[libvirt] [qom-cpu PATCH 7/7 v9] target-i386: CPU model subclasses

Eduardo Habkost ehabkost at redhat.com
Tue Feb 11 08:05:57 UTC 2014


On Mon, Feb 10, 2014 at 11:39:51PM +0100, Andreas Färber wrote:
> Am 10.02.2014 11:21, schrieb Eduardo Habkost:
> > +static const TypeInfo x86_cpu_host_type_info = {
> > +    .name = CPU_CLASS_NAME("host"),
> > +    .parent = TYPE_X86_CPU,
> > +    .instance_size = sizeof(X86CPU),
> > +    .instance_init = x86_cpu_instance_init_host,
> > +    .abstract = false,
> > +    .class_size = sizeof(X86CPUClass),
> > +    .class_init = x86_cpu_class_init_host,
> > +};
> 
> This looks broken: .class_data is not set but the loading of the cpudef
> happens in the TYPE_X86_CPU initfn. My preferred solution would be to
> move the cpudef-loading from TYPE_X86_CPU's instance_init to a separate
> one specified for the models only, allowing non-cpudef-based models. Not
> finished investigating yet.

class_data is not set because x86_cpu_class_init_host doesn't use it.

x86_cpu_class_init_host() simply points fills host_cpu_def and makes
xcc->cpu_def point to it. Why would we need a separate instance_init
only for the other models? x86_cpu_initfn() already works for everything
except the ->features field (that is then handled by
x86_cpu_instance_init_host()).

> 
> For now I've prepended a patch implementing my generalized
> CPUClass::class_by_name instead of a custom x86_cpu_class_by_name().

Sounds good to me.

> 
> Other style nits that I'm working on cleaning up are declarations in the
> middle of blocks, keeping _class_init naming convention (pretty sure my
> patches always had the most-specific-to-least-specific naming), strictly
> distinguishing between type and class, adding to my gtk-style
> documentation rather than new custom comments, placing struct
> documentation in the header and keeping the diff nicely readable AFAP.
> I'd further like to keep some other conventions from previous CPU
> subclasses, like pulling the model for loop out of the model
> registration function.
> 
> My patches had always tried to turn what is now x86_cpu_load_def() into
> an instance_init function rather than calling it from one - did you have
> reasons not to?

I like to keep the "simply move stuff from X86CPUDefinition to X86CPU"
logic in a separate place. I think it makes the code more readable (and
it also made the code movements more obvious because I didn't have to
move all the code that's inside load_def(), just the load_def() call.
But if you want to inline it inside instance_init, I wouldn't mind.


> 
> Did you consider converting the host model in a first step to make the
> patch smaller?

Converting the host model would require moving some logic to
instance_init but keeping the strcmp(name, "host") hack. I thought it
would involve more complex intermediate steps so I chose not to try it.

-- 
Eduardo




More information about the libvir-list mailing list