On Sat, Jul 02, 2016 at 12:41:48AM +0200, Greg Kurz wrote: > If we want to generate cpu_dt_id in the machine code, this must occur > before the cpu gets realized. We must open code the cpu creation to be > able to do this. > > This patch just does that. It borrows some lines from previous work > from Bharata to handle the feature parsing. > > Signed-off-by: Greg Kurz <gr...@kaod.org> > --- > hw/ppc/ppc.c | 39 ++++++++++++++++++++++++++++++++++++++- > 1 file changed, 38 insertions(+), 1 deletion(-) > > diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c > index dc3d214009c5..57f4ddd073d0 100644 > --- a/hw/ppc/ppc.c > +++ b/hw/ppc/ppc.c > @@ -32,6 +32,7 @@ > #include "sysemu/cpus.h" > #include "hw/timer/m48t59.h" > #include "qemu/log.h" > +#include "qapi/error.h" > #include "qemu/error-report.h" > #include "hw/loader.h" > #include "sysemu/kvm.h" > @@ -1353,5 +1354,41 @@ PowerPCCPU *ppc_get_vcpu_by_dt_id(int cpu_dt_id) > > PowerPCCPU *ppc_cpu_init(const char *cpu_model) > { > - return POWERPC_CPU(cpu_generic_init(TYPE_POWERPC_CPU, cpu_model)); > + PowerPCCPU *cpu; > + CPUClass *cc; > + ObjectClass *oc; > + gchar **model_pieces; > + Error *err = NULL; > + > + model_pieces = g_strsplit(cpu_model, ",", 2); > + if (!model_pieces[0]) { > + error_report("Invalid/empty CPU model name"); > + return NULL; > + } > + > + oc = cpu_class_by_name(TYPE_POWERPC_CPU, model_pieces[0]); > + if (oc == NULL) { > + error_report("Unable to find CPU definition: %s", model_pieces[0]); > + return NULL; > + } > + > + cpu = POWERPC_CPU(object_new(object_class_get_name(oc))); > + > + cc = CPU_CLASS(oc); > + cc->parse_features(CPU(cpu), model_pieces[1], &err);
Igor is working on a patchset to convert -cpu features into global properties. IIUC, after that patchset, it is not recommended to parse the -cpu features for every CPU but do it only once. That is what I attempted here in the context of supporting compat cpu type for pseries-2.7: https://www.mail-archive.com/qemu-devel@nongnu.org/msg381660.html Regards, Bharata.