From patchwork Wed Aug 15 16:13:41 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Mammedov X-Patchwork-Id: 177731 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 9E2032C0089 for ; Thu, 16 Aug 2012 02:44:08 +1000 (EST) Received: from localhost ([::1]:58649 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1ghS-0005fA-Gk for incoming@patchwork.ozlabs.org; Wed, 15 Aug 2012 12:44:06 -0400 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 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q7FGFYmk011291 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 15 Aug 2012 12:15:34 -0400 Received: from thinkpad.com (vpn-238-39.phx2.redhat.com [10.3.238.39]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q7FGDtIB029187; Wed, 15 Aug 2012 12:15:30 -0400 From: Igor Mammedov To: qemu-devel@nongnu.org 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> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 209.132.183.28 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 Subject: [Qemu-devel] [PATCH 21/21] target-i386: cleanup cpu_x86_find_by_name(), only fill x86_def_t in it X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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);