From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:45921) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TY1hh-0004JL-6W for qemu-devel@nongnu.org; Mon, 12 Nov 2012 16:38:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TY1he-0004hg-4C for qemu-devel@nongnu.org; Mon, 12 Nov 2012 16:38:01 -0500 Received: from mx1.redhat.com ([209.132.183.28]:61043) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TY1hd-0004g1-Qs for qemu-devel@nongnu.org; Mon, 12 Nov 2012 16:37:58 -0500 From: Eduardo Habkost Date: Mon, 12 Nov 2012 19:38:58 -0200 Message-Id: <1352756342-13716-14-git-send-email-ehabkost@redhat.com> In-Reply-To: <1352756342-13716-1-git-send-email-ehabkost@redhat.com> References: <1352756342-13716-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH 13/17] target-i386: cpu: create cpu_x86_find_cpudef() function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Igor Mammedov , =?UTF-8?q?Andreas=20F=C3=A4rber?= Cc: Don Slutz Move the code that looks for a given CPU model to a separate function. This will make it easier to separate the cpudef lookup code and the feature string parsing code, later. Signed-off-by: Eduardo Habkost --- target-i386/cpu.c | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 3a85989..c2594bd 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1146,6 +1146,33 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque, cpu->env.tsc_khz = value / 1000; } +/* Find a CPU model definition and put the result on a X86CPUDefinition struct + */ +static int cpu_x86_find_cpudef(const char *name, + X86CPUDefinition *result, + Error **errp) +{ + X86CPUDefinition *def; + + for (def = x86_defs; def; def = def->next) + if (name && !strcmp(name, def->name)) + break; + if (kvm_enabled() && name && strcmp(name, "host") == 0) { + kvm_cpu_fill_host(result); + } else if (!def) { + goto error; + } else { + memcpy(result, def, sizeof(*def)); + } + return 0; + +error: + if (!error_is_set(errp)) { + error_set(errp, QERR_INVALID_PARAMETER_COMBINATION); + } + return -1; +} + static int cpu_x86_find_by_name(X86CPUDefinition *x86_cpu_def, const char *cpu_model, Error **errp) { @@ -1175,15 +1202,8 @@ static int cpu_x86_find_by_name(X86CPUDefinition *x86_cpu_def, name = model_pieces[0]; features = model_pieces[1]; - for (def = x86_defs; def; def = def->next) - if (name && !strcmp(name, def->name)) - break; - if (kvm_enabled() && name && strcmp(name, "host") == 0) { - kvm_cpu_fill_host(x86_cpu_def); - } else if (!def) { + if (cpu_x86_find_cpudef(name, x86_cpu_def, errp) < 0) { goto error; - } else { - memcpy(x86_cpu_def, def, sizeof(*def)); } add_flagname_to_bitmaps("hypervisor", &plus_features, -- 1.7.11.7