qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC v3 9/9] i386: split cpu accelerators from cpu.c


From: Eduardo Habkost
Subject: Re: [RFC v3 9/9] i386: split cpu accelerators from cpu.c
Date: Wed, 18 Nov 2020 13:28:45 -0500

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 <cfontana@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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]