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 <[email protected]>
> ---
[...]
> +/**
> + * 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