On 3/12/21 2:40 PM, Claudio Fontana wrote:
> On 3/12/21 1:02 PM, Paolo Bonzini wrote:
>> On 12/03/21 12:51, Claudio Fontana wrote:
>>> seems to me we already have, as the accel class init, fe, for x86/tcg:
>>>
>>> static void tcg_cpu_accel_class_init(ObjectClass *oc, void *data)
>>> {
>>>      AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
>>>
>>> #ifndef CONFIG_USER_ONLY
>>>      acc->cpu_realizefn = tcg_cpu_realizefn;
>>> #endif /* CONFIG_USER_ONLY */
>>>
>>>      acc->cpu_class_init = tcg_cpu_class_init;
>>>      acc->cpu_instance_init = tcg_cpu_instance_init;
>>> }
>>>
>>> acc->cpu_class_init() call would then be the acc->init_cpu call you mention.
>>>
>>> The only thing we seem to be missing is the cc->init_tcg_ops(cc)..
>>
>> Yes, called by tcg_cpu_class_init or tcg_cpu_instance_init.
>>
>> Paolo
>>
>>
> 
> .. I wonder if we should make it a bit more general like:
> 
> static void accel_init_cpu_int_aux(ObjectClass *klass, void *opaque)
> {
>     CPUClass *cc = CPU_CLASS(klass);
>     AccelCPUClass *accel_cpu = opaque;
> 
>     /*                                                                        
>                                                               
>      * double dispatch. The first callback allows the accel cpu               
>                                                               
>      * to run initializations for the CPU,                                    
>                                                               
>      * the second one allows the CPU to customize the accel cpu               
>                                                               
>      * behavior according to the CPU.                                         
>                                                               
>      *                                                                        
>                                                               
>      * The second is currently only used by TCG, to specialize the            
>                                                               
>      * TCGCPUOps depending on the CPU type.                                   
>                                                               
>      */
>     cc->accel_cpu = accel_cpu;
>     if (accel_cpu->cpu_class_init) {
>         accel_cpu->cpu_class_init(cc);
>     }
>     if (cc->init_accel_cpu) {
>         cc->init_accel_cpu(accel_cpu, cc);
>     }
> }
> 
> .. but maybe this is premature, and should wait for actual users of this 
> beyond TCG on ARM?
> 
> Ciao,
> 
> C
> 

I'll put my experiment in the ARM cleanup series.

Ciao and thanks,

Claudio


Reply via email to