Some callers call CPUClass->parse_features manually to convert '-cpu cpufoo,featurestr' string to cpu type and featurestr into a set of global properties. And theni do controlled cpu creation with setting properties and completing it with realize. That's a lot of code duplication as they are practically reimplement the same parsing logic.
Some don't and use cpu_generic_init() instead which does the same parsing along with creation/realizing cpu within one wrapper. And some trying to switch to controlled cpu creation, implement object_new()/set properties/realize steps but forget feature parsing logic witch lieads to 'bugs' commit 00909b585 (hw/arm/integratorcp: Support specifying features via -cpu) This series moves -cpu option parsing to generic machine code that removes a little of code duplication and makes cpus creation process more unified. PS: As I don't have time to rewrite this part QEMU, being busy rewritting yet another part of QEMU, SERIES IS UNFINISHED AND SERVERS TO SHOW IDEA HOW IT SHOULD BE DONE. FEEL FREE TO PICK UP AND COMPLETE THIS PATCHES TO HANDLE ALL BOARDS (series does it only for virt-arm/spapr/pc) It compiles and pc machine even starts but otherwise is untested. CC: Eduardo Habkost <ehabk...@redhat.com> CC: patc...@linaro.org CC: Peter Maydell <peter.mayd...@linaro.org> CC: Marcel Apfelbaum <mar...@redhat.com> CC: Paolo Bonzini <pbonz...@redhat.com> CC: David Gibson <da...@gibson.dropbear.id.au> CC: qemu-...@nongnu.org CC: qemu-...@nongnu.org CC: "Michael S. Tsirkin" <m...@redhat.com> Igor Mammedov (3): machine: call machine init from wrapper machine: generalize handling of default cpu_model machine: generilize cpu_model parsing include/hw/boards.h | 5 +++++ include/hw/ppc/ppc.h | 2 -- hw/arm/virt.c | 46 ++++++++++--------------------------------- hw/core/machine.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ hw/i386/pc.c | 42 +++++++++++++-------------------------- hw/ppc/ppc.c | 25 ------------------------ hw/ppc/spapr.c | 14 +++++++------ vl.c | 2 +- 8 files changed, 92 insertions(+), 99 deletions(-) -- 2.7.4