On Wed, Nov 18, 2020 at 11:29:36AM +0100, Claudio Fontana wrote: > split cpu.c into: > > cpu.c cpuid and common x86 cpu functionality > host-cpu.c host x86 cpu functions and "host" cpu type > kvm/cpu.c KVM x86 cpu type > hvf/cpu.c HVF x86 cpu type > tcg/cpu.c TCG x86 cpu type > > The accel interface of the X86CPUClass is set at MODULE_INIT_ACCEL_CPU > time, when the accelerator is known. > > Signed-off-by: Claudio Fontana <cfont...@suse.de> > --- [...] > +/** > + * X86CPUAccel: > + * @name: string name of the X86 CPU Accelerator > + * > + * @common_class_init: initializer for the common cpu
So this will be called for every single CPU class. > + * @instance_init: cpu instance initialization > + * @realizefn: realize function, called first in x86 cpu realize > + * > + * X86 CPU accelerator-specific CPU initializations > + */ > + > +struct X86CPUAccel { > + const char *name; > + > + void (*common_class_init)(X86CPUClass *xcc); > + void (*instance_init)(X86CPU *cpu); > + void (*realizefn)(X86CPU *cpu, Error **errp); > }; > > +void x86_cpu_accel_init(const X86CPUAccel *accel); [...] > +static void x86_cpu_accel_init_aux(ObjectClass *klass, void *opaque) > +{ > + X86CPUClass *xcc = X86_CPU_CLASS(klass); > + const X86CPUAccel **accel = opaque; > + > + xcc->accel = *accel; > + xcc->accel->common_class_init(xcc); > +} > + > +void x86_cpu_accel_init(const X86CPUAccel *accel) > +{ > + object_class_foreach(x86_cpu_accel_init_aux, TYPE_X86_CPU, false, > &accel); > +} This matches the documented behavior. [...] > +void host_cpu_class_init(X86CPUClass *xcc) > +{ > + xcc->host_cpuid_required = true; > + xcc->ordering = 8; > + xcc->model_description = > + g_strdup_printf("%s processor with all supported host features ", > + xcc->accel->name); > +} [...] > +static void hvf_cpu_common_class_init(X86CPUClass *xcc) > +{ > + host_cpu_class_init(xcc); Why are you calling host_cpu_class_init() for all CPU types? > +} [...] > +static void kvm_cpu_common_class_init(X86CPUClass *xcc) > +{ > + host_cpu_class_init(xcc); > +} Same question as above. -- Eduardo