From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48161) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cCvEB-0004nB-M7 for qemu-devel@nongnu.org; Fri, 02 Dec 2016 16:18:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cCvEA-0003Ku-HP for qemu-devel@nongnu.org; Fri, 02 Dec 2016 16:18:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32960) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cCvEA-0003KR-8m for qemu-devel@nongnu.org; Fri, 02 Dec 2016 16:18:42 -0500 From: Eduardo Habkost Date: Fri, 2 Dec 2016 19:18:07 -0200 Message-Id: <1480713496-11213-9-git-send-email-ehabkost@redhat.com> In-Reply-To: <1480713496-11213-1-git-send-email-ehabkost@redhat.com> References: <1480713496-11213-1-git-send-email-ehabkost@redhat.com> Subject: [Qemu-devel] [PATCH for-2.9 08/17] target-i386: Support "-cpu host" on TCG too List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Richard Henderson Change the meaning of "-cpu host" to "enable all features supported by the accelerator in the current host", so that it can be used to enable all features supported by TCG. To make sure "host" is still at the end of the list in "-cpu help", add a "ordering" field that will be used when sorting the CPU model list. Cc: Richard Henderson Signed-off-by: Eduardo Habkost --- target-i386/cpu-qom.h | 4 ++-- target-i386/cpu.c | 26 +++++--------------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h index 7c9a07a..93c9679 100644 --- a/target-i386/cpu-qom.h +++ b/target-i386/cpu-qom.h @@ -47,7 +47,7 @@ typedef struct X86CPUDefinition X86CPUDefinition; /** * X86CPUClass: * @cpu_def: CPU model definition - * @kvm_required: Whether CPU model requires KVM to be enabled. + * @ordering: Ordering on the "-cpu help" CPU model list. * @parent_realize: The parent class' realize handler. * @parent_reset: The parent class' reset handler. * @@ -61,7 +61,7 @@ typedef struct X86CPUClass { /* Should be eventually replaced by subclass-specific property defaults. */ X86CPUDefinition *cpu_def; - bool kvm_required; + int ordering; /* Optional description of CPU model. * If unavailable, cpu_def->model_id is used */ diff --git a/target-i386/cpu.c b/target-i386/cpu.c index 1a276db..691ec5e 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -1575,7 +1575,7 @@ static void host_x86_cpu_class_init(ObjectClass *oc, void *data) X86CPUClass *xcc = X86_CPU_CLASS(oc); uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0; - xcc->kvm_required = true; + xcc->ordering = 9; /* Show it last on "-cpu help" */ host_cpuid(0x0, 0, &eax, &ebx, &ecx, &edx); x86_cpu_vendor_words2str(host_cpudef.vendor, ebx, edx, ecx); @@ -1589,8 +1589,7 @@ static void host_x86_cpu_class_init(ObjectClass *oc, void *data) xcc->cpu_def = &host_cpudef; xcc->model_description = - "KVM processor with all supported host features " - "(only available in KVM mode)"; + "Enables all features supported by the accelerator in the current host"; /* level, xlevel, xlevel2, and the feature words are initialized on * instance_init, because they require KVM to be initialized. @@ -2101,13 +2100,6 @@ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc, Error *err = NULL; strList **next = missing_feats; - if (xcc->kvm_required && !kvm_enabled()) { - strList *new = g_new0(strList, 1); - new->value = g_strdup("kvm");; - *missing_feats = new; - return; - } - xc = X86_CPU(object_new(object_class_get_name(OBJECT_CLASS(xcc)))); x86_cpu_expand_features(xc, &err); @@ -2155,7 +2147,7 @@ static void listflags(FILE *f, fprintf_function print, const char **featureset) } } -/* Sort alphabetically by type name, listing kvm_required models last. */ +/* Sort alphabetically by type name, respecting X86CPUClass::ordering. */ static gint x86_cpu_list_compare(gconstpointer a, gconstpointer b) { ObjectClass *class_a = (ObjectClass *)a; @@ -2164,9 +2156,8 @@ static gint x86_cpu_list_compare(gconstpointer a, gconstpointer b) X86CPUClass *cc_b = X86_CPU_CLASS(class_b); const char *name_a, *name_b; - if (cc_a->kvm_required != cc_b->kvm_required) { - /* kvm_required items go last */ - return cc_a->kvm_required ? 1 : -1; + if (cc_a->ordering != cc_b->ordering) { + return cc_a->ordering - cc_b->ordering; } else { name_a = object_class_get_name(class_a); name_b = object_class_get_name(class_b); @@ -3247,13 +3238,6 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) Error *local_err = NULL; static bool ht_warned; - if (xcc->kvm_required && !kvm_enabled()) { - char *name = x86_cpu_class_get_model_name(xcc); - error_setg(&local_err, "CPU model '%s' requires KVM", name); - g_free(name); - goto out; - } - if (cpu->apic_id == UNASSIGNED_APIC_ID) { error_setg(errp, "apic-id property was not initialized properly"); return; -- 2.7.4