From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34298) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1gFv-0007fP-HU for qemu-devel@nongnu.org; Wed, 15 Aug 2012 12:15:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1gFu-0004Ok-0H for qemu-devel@nongnu.org; Wed, 15 Aug 2012 12:15:39 -0400 Received: from mx1.redhat.com ([209.132.183.28]:64031) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1gFt-0004Of-Od for qemu-devel@nongnu.org; Wed, 15 Aug 2012 12:15:37 -0400 From: Igor Mammedov Date: Wed, 15 Aug 2012 18:13:41 +0200 Message-Id: <1345047221-26898-22-git-send-email-imammedo@redhat.com> In-Reply-To: <1345047221-26898-1-git-send-email-imammedo@redhat.com> References: <1345047221-26898-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH 21/21] target-i386: cleanup cpu_x86_find_by_name(), only fill x86_def_t in it List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@us.ibm.com, stefanha@linux.vnet.ibm.com, gleb@redhat.com, vijaymohan.pandarathil@hp.com, jan.kiszka@siemens.com, mtosatti@redhat.com, mdroth@linux.vnet.ibm.com, blauwirbel@gmail.com, avi@redhat.com, pbonzini@redhat.com, akong@redhat.com, lersek@redhat.com, afaerber@suse.de, ehabkost@redhat.com Do in cpu_x86_find_by_name() only what name implies. i.e. leave only cpudef search and copy/fill passed in x86_def_t structure. and move out of it cpu_model parsing and CPU initializing into cpu_x86_register(). Plus add hints to where blocks should go when cpu_x86_register() is disbanded. Signed-off-by: Igor Mammedov --- target-i386/cpu.c | 55 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 75cbf48..ee2a90f 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1170,42 +1170,26 @@ static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, { x86_def_t *def; - QDict *features; - char *name; - - compat_normalize_cpu_model(cpu_model, &name, &features, errp); - if (error_is_set(errp)) { - goto error; + if (!cpu_model) { + error_set(errp, QERR_INVALID_PARAMETER_VALUE, "cpu_model", "NULL"); + return -1; } - for (def = x86_defs; def; def = def->next) - if (name && !strcmp(name, def->name)) + for (def = x86_defs; def; def = def->next) { + if (!strcmp(cpu_model, def->name)) { break; - if (kvm_enabled() && name && strcmp(name, "host") == 0) { + } + } + if (kvm_enabled() && strcmp(cpu_model, "host") == 0) { cpu_x86_fill_host(x86_cpu_def); } else if (!def) { - goto error; + error_set(errp, QERR_DEVICE_NOT_FOUND, cpu_model); + return -1; } else { memcpy(x86_cpu_def, def, sizeof(*def)); } - cpudef_2_x86_cpu(cpu, x86_cpu_def, errp); - - cpu_x86_set_props(cpu, features, errp); - QDECREF(features); - if (error_is_set(errp)) { - goto error; - } - - g_free(name); return 0; - -error: - g_free(name); - if (!error_is_set(errp)) { - error_set(errp, QERR_INVALID_PARAMETER_COMBINATION); - } - return -1; } /* generate a composite string into buf of all cpuid names in featureset @@ -1326,14 +1310,29 @@ int cpu_x86_register(X86CPU *cpu, const char *cpu_model) { x86_def_t def1, *def = &def1; Error *error = NULL; + QDict *features; + char *name; - memset(def, 0, sizeof(*def)); + /* for CPU subclasses should go into cpu_x86_init() before object_new() */ + compat_normalize_cpu_model(cpu_model, &name, &features, &error); + if (error_is_set(&error)) { + goto out; + } - if (cpu_x86_find_by_name(cpu, def, cpu_model, &error) < 0) { + /* this block should be replaced by CPU subclasses */ + memset(def, 0, sizeof(*def)); + if (cpu_x86_find_by_name(cpu, def, name, &error) < 0) { goto out; } + cpudef_2_x86_cpu(cpu, def, &error); + + /* for CPU subclasses should go between object_new() and + * x86_cpu_realize() */ + cpu_x86_set_props(cpu, features, &error); out: + QDECREF(features); + g_free(name); if (error_is_set(&error)) { fprintf(stderr, "%s\n", error_get_pretty(error)); error_free(error); -- 1.7.11.2