From: "Richard W.M. Jones" <rjones@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, Igor Mammedov <imammedo@redhat.com>,
Jiri Denemark <jdenemar@redhat.com>,
Richard Henderson <rth@twiddle.net>,
David Hildenbrand <david@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] i386: Support "-cpu host" on TCG too
Date: Tue, 17 Jan 2017 13:39:14 +0000 [thread overview]
Message-ID: <20170117133914.GA14855@redhat.com> (raw)
In-Reply-To: <20170116195452.23532-1-ehabkost@redhat.com>
On Mon, Jan 16, 2017 at 05:54:52PM -0200, Eduardo Habkost wrote:
> 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/query 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 <rth@twiddle.net>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> 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 8cd607e9a2..75618919e3 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.
> * @migration_safe: See CpuDefinitionInfo::migration_safe
> * @parent_realize: The parent class' realize handler.
> * @parent_reset: The parent class' reset handler.
> @@ -62,7 +62,7 @@ typedef struct X86CPUClass {
> /* Should be eventually replaced by subclass-specific property defaults. */
> X86CPUDefinition *cpu_def;
>
> - bool kvm_required;
> + int ordering;
> bool migration_safe;
>
> /* Optional description of CPU model.
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index ec6eaf215c..e0ca8c0288 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -1549,7 +1549,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);
> @@ -1563,8 +1563,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.
> @@ -2075,13 +2074,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_load_features(xc, &err);
> @@ -2129,7 +2121,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;
> @@ -2138,9 +2130,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);
> @@ -3191,13 +3182,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;
FYI libvirt will also need changing. Currently it reports:
Original error from libvirt: unsupported configuration: CPU mode 'host-passthrough' for x86_64 qemu domain on x86_64 host is not supported by hypervisor [code=67 int1=-1]
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
next prev parent reply other threads:[~2017-01-17 13:39 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-16 19:54 [Qemu-devel] [PATCH] i386: Support "-cpu host" on TCG too Eduardo Habkost
2017-01-17 13:39 ` Richard W.M. Jones [this message]
2017-01-17 14:03 ` Eduardo Habkost
2017-01-17 13:42 ` Richard W.M. Jones
2017-01-17 13:44 ` Richard W.M. Jones
2017-01-17 13:57 ` Richard W.M. Jones
2017-01-17 14:05 ` Eduardo Habkost
2017-01-17 14:19 ` Richard W.M. Jones
2017-01-17 17:43 ` David Hildenbrand
2017-01-19 14:52 ` Cornelia Huck
2017-02-16 14:43 ` Christian Borntraeger
2017-02-16 14:44 ` Christian Borntraeger
2017-01-19 17:50 ` Daniel P. Berrange
2017-01-19 18:22 ` Peter Maydell
2017-01-19 18:31 ` Eduardo Habkost
2017-01-19 18:38 ` Daniel P. Berrange
2017-01-19 19:02 ` Eduardo Habkost
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170117133914.GA14855@redhat.com \
--to=rjones@redhat.com \
--cc=david@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=jdenemar@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.