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