Hello, Here's an updated series on incrementally converting CPUState to QOM.
Patch 1 is cherry-picked from Anthony's QOM series 3/4. Patch 2 rearranges module init for QOM. Patch 3 add QOM support to the user emulators. Patch 4 introduces QOM CPU. Patch 5-8 Derive and start using a QOM CPU for ARM. Regards, Andreas Cc: Anthony Liguori <anth...@codemonkey.ws> Cc: Peter Maydell <peter.mayd...@linaro.org> v1 -> v2: * Cherry-pick Anthony's object_class_foreach() patch. * Don't introduce extra early_init(), just relocate former MODULE_INIT_DEVICE. * Provide new type_init() macro to be used instead of device_init(). * Drop processor_init() and MODULE_INIT_CPU in favor of MODULE_INIT_DEVICE. * Prepare cast macros for CPU. * Add documentation. * Fix ARMCPUClass type name (arm-cpu-core -> arm-cpu). * Add documentation. * Rename ARMCPUDef to ARMCPUInfo. * Use a C99-style table for initializing the classes through class_data instead of individual class_init functions (suggested by Anthony). * Prepare reset callback. * Make ENV_GET_OBJECT() use an inline function for readability. * Invoke the CPU's reset method from cpu_reset(). * Do feature initialization via table where sensible. * Add feature flags to ARMCPU as well (suggested by PMM for future tweaking, also simplifies load/save a bit) and initialize them from ARMCPUClass. * Make feature inference work for ARMCPU as well by not passing the ARMCPUClass. Use function-local macros to avoid the ugliness of deferencing the features pointer. Andreas Färber (7): qom: Register QOM infrastructure early qom: Add QOM support to user emulators qom: Introduce CPU class target-arm: Introduce QOM CPU and use it for CPUID lookup target-arm: Embed CPUARMState in QOM ARMCPU target-arm: Prepare model-specific class_init function target-arm: Move CPU feature flags out of CPUState Anthony Liguori (1): qom: Allow object_class_foreach() to take additional parameters to refine search Makefile.objs | 1 + Makefile.target | 16 ++- Makefile.user | 1 + bsd-user/main.c | 2 + darwin-user/main.c | 3 + hw/cpu.c | 39 ++++++ include/qemu/cpu.h | 62 +++++++++ include/qemu/object.h | 1 + linux-user/main.c | 2 + module.h | 5 +- qom/object.c | 18 +++- target-arm/cpu-core.c | 358 +++++++++++++++++++++++++++++++++++++++++++++++++ target-arm/cpu-core.h | 68 ++++++++++ target-arm/cpu.h | 9 +- target-arm/helper.c | 184 ++++--------------------- target-arm/machine.c | 6 +- vl.c | 4 +- 17 files changed, 604 insertions(+), 175 deletions(-) create mode 100644 hw/cpu.c create mode 100644 include/qemu/cpu.h create mode 100644 target-arm/cpu-core.c create mode 100644 target-arm/cpu-core.h -- 1.7.7