Am 07.02.2012 00:03, schrieb Anthony Liguori: > On 02/02/2012 08:59 PM, Andreas Färber wrote: >> This allows to share initialization between CPU models. >> >> Signed-off-by: Andreas Färber<afaer...@suse.de> >> --- >> target-arm/cpu.c | 5 +++++ >> 1 files changed, 5 insertions(+), 0 deletions(-) >> >> diff --git a/target-arm/cpu.c b/target-arm/cpu.c >> index 43231c9..b794ec1 100644 >> --- a/target-arm/cpu.c >> +++ b/target-arm/cpu.c >> @@ -96,6 +96,7 @@ static void arm_cpu_reset(CPU *c) >> typedef struct ARMCPUInfo { >> const char *name; >> uint32_t id; >> + void (*class_init)(ARMCPUClass *klass, const struct ARMCPUInfo >> *info); >> } ARMCPUInfo; > > So could you do: > > TypeInfo arm_cpus[] = { > { > .name = "arm-cpu-model", > .parent = TYPE_ARM_CPU, > .class_data = (void *)(intptr_t)0x2342342, > .class_init = arm_generic_init, > } > > It's roughly the same code but then there isn't redirection. You can do > this in general by having something like: > > .class_data = (SpecialInfo[]){ .id = 0x23423423 },
Have you reviewed the users of this? More fields are being added, and the specific users of this facility initialize fields not shared by many CPUs so I wanted to keep ARMCPUInfo small. The shared fields are already being initialized by arm_cpu_class_init() via .class_data. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg