From: Igor Mammedov <imammedo@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: aliguori@us.ibm.com, jan.kiszka@siemens.com, Don@CloudSwitch.com,
mdroth@linux.vnet.ibm.com, qemu-devel@nongnu.org,
blauwirbel@gmail.com, stefanha@redhat.com, pbonzini@redhat.com,
afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 15/37] target-i386: set default value of "hypervisor" feature using static property
Date: Thu, 29 Nov 2012 19:30:29 +0100 [thread overview]
Message-ID: <20121129193029.2bfc2748@nial.usersys.redhat.com> (raw)
In-Reply-To: <20121129154737.GA4255@otherpad.lan.raisama.net>
On Thu, 29 Nov 2012 13:47:37 -0200
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Thu, Nov 29, 2012 at 03:56:09PM +0100, Igor Mammedov wrote:
> > On Fri, 9 Nov 2012 16:48:07 +0100
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > >
> > > On 22/10/2012, at 17:03, Igor Mammedov <imammedo@redhat.com> wrote:
> > >
> > > > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > > > ---
> > > > target-i386/cpu.c | 9 +++------
> > > > 1 file changed, 3 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> > > > index 3131945..dc4fcdf 100644
> > > > --- a/target-i386/cpu.c
> > > > +++ b/target-i386/cpu.c
> > > > @@ -174,7 +174,7 @@ static Property cpu_x86_properties[] = {
> > > > DEFINE_PROP_BIT("f-xsave", X86CPU, env.cpuid_ext_features, 26,
> > > > false), DEFINE_PROP_BIT("f-osxsave", X86CPU, env.cpuid_ext_features,
> > > > 27, false), DEFINE_PROP_BIT("f-avx", X86CPU, env.cpuid_ext_features,
> > > > 28, false),
> > > > - DEFINE_PROP_BIT("f-hypervisor", X86CPU, env.cpuid_ext_features,
> > > > 31, false),
> > > > + DEFINE_PROP_BIT("f-hypervisor", X86CPU, env.cpuid_ext_features,
> > > > 31, true), DEFINE_PROP_BIT("f-syscall", X86CPU,
> > > > env.cpuid_ext2_features, 11, false), DEFINE_PROP_BIT("f-nx", X86CPU,
> > > > env.cpuid_ext2_features, 20, false), DEFINE_PROP_BIT("f-xd", X86CPU,
> > > > env.cpuid_ext2_features, 20, false), @@ -1307,11 +1307,12 @@ static
> > > > int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def, {
> > > > unsigned int i;
> > > > x86_def_t *def;
> > > > + CPUX86State *env = &cpu->env;
> > > >
> > > > char *s = g_strdup(cpu_model);
> > > > char *featurestr, *name = strtok(s, ",");
> > > > /* Features to be added*/
> > > > - uint32_t plus_features = 0, plus_ext_features = 0;
> > > > + uint32_t plus_features = 0, plus_ext_features =
> > > > env->cpuid_ext_features;
> > >
> > > Moving data back and forth between CPUX86State and x86_def_t makes the
> > > initialization ordering confusing (today data is moved from x86_def_t to
> > > X86CPU, and never the other way around).
> > >
> > > As this code is removed in the next patches, I don't mind too much, but
> > > maybe it's simpler to implement this change only after the "use static
> > > properties for setting cpuid features" patch?
> > It won't eliminate moving data back and forth between CPUX86State and
> > x86_def_t until CPU sub-classes (i.e. when x86_def_t isn't used anymore),
> > if defaults from static properties are used.
>
> You don't need CPU subclasses to reduce back-and-forth data movement.
> We can just reorder code to look like:
>
> split_cpu_model_string(cpu_model, &model, &features);
> fill_cpudef_for_model_somehow(model, &cpudef);
somewhere between here and [2], One still needs to enable "hypervisor"
feature, and set kvm_features defaults. I guess "hypervisor" could be pushed
out into x86_def_t for each model and kvm_cpu_fill_host(). But it would be
hard to do so for KVM features (see how pv_eoi is set).
see 8d239fbb9b, ded9f32153, a7bb291e5b, 2623e2f876, bd539e14ef in
https://github.com/imammedo/qemu/commits/x86-cpu-properties.WIP
> cpudef_2_x86_cpu(cpu, &cpudef);
As alternative it's possible to merge (OR) ext_features and kvm_features from
cpudef into env inside of cpudef_2_x86_cpu() to keep defaults SET by static
properties when cpu obj was created.
[2]
This merge won't disappear completely until cpudefs are converted into
classes and X_class_init() will set all defaults for a given cpu model.
and common defaults could/should be set by parent X86CPU class_init(),
and ideally rewrite should end up in a inheritance tree of subclasses, each
adding new features relative to previous model.
> cpu_parse_feature_string(cpu, features);
>
> Instead of what we have today, that is:
>
> split_cpu_model_string(cpu_model, &model, &features);
> fill_cpudef_for_model_somehow(model, &cpudef);
> cpu_parse_feature_string(cpu, features);
> /* (the 3 steps above are all done inside cpu_x86_find_by_name()) */
> cpudef_2_x86_cpu(cpu, &cpudef);
>
> You did that on patch 32/37, but I would be interesting to do that
> _before_ introducing the whole new CPU properties code, to make review
> easier.
>
> Reordering the steps to make the code less confusing before introducing
> the CPU properties makes the code easier to review, that's why I sent
> the CPU init cleanup series. And it makes us one step closer to
> completely eliminate the X86CPUDefinition struct in the future.
>
> I actually made the reordering change above using the CPU init series as
> base, and it was very easy to do, after the CPU init was cleaned up. You
> can see the result at:
> https://github.com/ehabkost/qemu-hacks/commit/5256503135e787cb3550092c24dbeb3c5fc5a747
After some playing, I've abandoned approach to change
cpu_x86_find_by_name() and opted in favor of not touching it and feature
string parsing much, except of doing almost the same split as you. As
additional thing, I've moved setting defaults out of it as well.
> (it's completely untested. The rest of the changes are on the
> work/cpu-model-classes branch)
Some reordering has been done to series to make it clearer and easier to
review. Pls, checkout it out on my x86-cpu-properties.WIP
>
> >
> > But I've rewritten patches in a way to make this easier to review and less
> > confusing.
>
> I'm curious to see the result. Right now I am using the CPU init cleanup
> series as base for my CPU subclass experiments.
>
>
> >
> > >
> > > > uint32_t plus_ext2_features = 0, plus_ext3_features = 0;
> > > > uint32_t plus_kvm_features = 0, plus_svm_features = 0;
> > > > uint32_t plus_7_0_ebx_features = 0;
> > > > @@ -1345,10 +1346,6 @@ static int cpu_x86_find_by_name(X86CPU *cpu,
> > > > x86_def_t *x86_cpu_def, plus_kvm_features = 0;
> > > > #endif
> > > >
> > > > - add_flagname_to_bitmaps("hypervisor", &plus_features,
> > > > - &plus_ext_features, &plus_ext2_features,
> > > > &plus_ext3_features,
> > > > - &plus_kvm_features, &plus_svm_features,
> > > > &plus_7_0_ebx_features); -
> > > > featurestr = strtok(NULL, ",");
> > > >
> > > > while (featurestr) {
> > > > --
> > > > 1.7.11.7
> > > >
> > > >
> > >
> >
>
next prev parent reply other threads:[~2012-11-29 18:31 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-22 15:02 [Qemu-devel] [PATCH 00/37 v5] target-i386: convert CPU features into properties Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 01/37] target-i386: return Error from cpu_x86_find_by_name() Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 02/37] target-i386: cpu_x86_register(): report error from property setter Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 03/37] target-i386: if x86_cpu_realize() failed report error and do cleanup Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 04/37] target-i386: filter out not TCG features if running without kvm at realize time Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 05/37] target-i386: move out CPU features initialization in separate func Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 06/37] add visitor for parsing hz[KMG] input string Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 07/37] target-i386: use visit_type_hz to parse tsc_freq property value Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 08/37] target-i386: define static properties for cpuid features Igor Mammedov
2012-10-22 23:19 ` Don Slutz
[not found] ` <20121023122954.2db05627@thinkpad.mammed.net>
2012-10-23 18:17 ` Don Slutz
2012-10-22 15:02 ` [Qemu-devel] [PATCH 09/37] qdev: export qdev_prop_find() and allow it to be used with DeviceClass instead of Object Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 10/37] target-i386: parse cpu_model string into set of stringified properties Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 11/37] target-i386: introduce vendor-override static property Igor Mammedov
2012-10-22 15:02 ` [Qemu-devel] [PATCH 12/37] target-i386: convert "xlevel" to " Igor Mammedov
2012-10-23 21:38 ` Don Slutz
2012-10-22 15:02 ` [Qemu-devel] [PATCH 13/37] target-i386: convert "level" " Igor Mammedov
2012-10-23 21:38 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 14/37] target-i386: postpone cpuid_level update to realize time Igor Mammedov
2012-12-05 16:18 ` Andreas Färber
2012-10-22 15:03 ` [Qemu-devel] [PATCH 15/37] target-i386: set default value of "hypervisor" feature using static property Igor Mammedov
2012-10-23 21:39 ` Don Slutz
2012-11-09 15:48 ` Eduardo Habkost
2012-11-29 14:56 ` Igor Mammedov
2012-11-29 15:47 ` Eduardo Habkost
2012-11-29 18:30 ` Igor Mammedov [this message]
2012-11-29 19:14 ` Eduardo Habkost
2012-10-22 15:03 ` [Qemu-devel] [PATCH 16/37] target-i386: set kvm CPUID default feature values using static properties Igor Mammedov
2012-10-22 23:20 ` Don Slutz
2012-10-23 10:40 ` Igor Mammedov
2012-10-23 10:55 ` Andreas Färber
2012-10-23 12:47 ` Igor Mammedov
2012-11-09 15:55 ` Eduardo Habkost
2012-10-22 15:03 ` [Qemu-devel] [PATCH 17/37] target-i386: make 'f-kvmclock' compatible with legacy behaviour Igor Mammedov
2012-10-23 21:41 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 18/37] target-i386: add stubs for hyperv_(vapic_recommended|relaxed_timing_enabled|get_spinlock_retries)() Igor Mammedov
2012-10-25 21:44 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 19/37] qdev: add DEFINE_ABSTRACT_PROP() helper Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 20/37] target-i386: convert 'hv_spinlocks' to static property Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 21/37] target-i386: convert 'hv_relaxed' " Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 22/37] target-i386: convert 'hv_vapic' " Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 23/37] target-i386: convert 'check' and 'enforce' to static properties Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 24/37] target-i386: use define for cpuid vendor string size Igor Mammedov
2012-12-05 16:08 ` Andreas Färber
2012-10-22 15:03 ` [Qemu-devel] [PATCH 25/37] target-i386: replace uint32_t vendor fields by vendor string in x86_def_t Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 26/37] target-i386: convert "vendor" property to static property Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 27/37] target-i386: convert "tsc-frequency" " Igor Mammedov
2012-10-25 21:40 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 28/37] target-i386: convert "model-id" " Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 29/37] target-i386: convert "stepping" " Igor Mammedov
2012-10-25 21:26 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 30/37] target-i386: convert "model" " Igor Mammedov
2012-10-25 21:21 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 31/37] target-i386: convert "family" " Igor Mammedov
2012-10-25 21:24 ` Don Slutz
2012-10-22 15:03 ` [Qemu-devel] [PATCH 32/37] target-i386: use static properties for setting cpuid features Igor Mammedov
2012-10-23 15:29 ` Don Slutz
2012-10-23 15:50 ` Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 33/37] qdev: QDEV_PROP_FOREACH and QDEV_CLASS_FOREACH Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 34/37] qdev: introduce QDEV_FIND_PROP_FROM_BIT and qdev_prop_find_bit() Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 35/37] target-i386: use static properties in check_features_against_host() to print CPUID feature names Igor Mammedov
2012-10-23 13:17 ` Igor Mammedov
2012-10-23 13:25 ` [Qemu-devel] [PATCH v2] " Igor Mammedov
2012-10-22 15:03 ` [Qemu-devel] [PATCH 36/37] target-i386: use static properties to list CPUID features Igor Mammedov
2012-10-23 13:26 ` [Qemu-devel] [PATCH v2] " Igor Mammedov
2012-10-23 13:51 ` Eduardo Habkost
2012-10-23 16:18 ` Igor Mammedov
2012-10-23 17:23 ` [Qemu-devel] [PATCH 36/37] " Don Slutz
2012-10-24 14:00 ` Eduardo Habkost
2012-10-22 15:03 ` [Qemu-devel] [PATCH 37/37] target-i386: cleanup cpu_x86_find_by_name(), only fill x86_def_t in it Igor Mammedov
2012-10-23 13:32 ` [Qemu-devel] [PATCH 00/37 v5] target-i386: convert CPU features into properties Don Slutz
2012-10-23 13:56 ` Igor Mammedov
2012-10-24 13:55 ` 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=20121129193029.2bfc2748@nial.usersys.redhat.com \
--to=imammedo@redhat.com \
--cc=Don@CloudSwitch.com \
--cc=afaerber@suse.de \
--cc=aliguori@us.ibm.com \
--cc=blauwirbel@gmail.com \
--cc=ehabkost@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).