diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 399dcc0aee14245d1d1a47c067f7a0f1e49e984c..0787c664865a5ff608f3e4ef2388dad0a7dc9afc 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1815,7 +1815,7 @@ static void ppc_spapr_init(MachineState *machine) if (mc->query_hotpluggable_cpus) { char *type = spapr_get_cpu_core_type(machine->cpu_model); - if (!object_class_by_name(type)) { + if (type == NULL) { error_report("Unable to find sPAPR CPU Core definition"); exit(1); } diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 716f7c44cdbb39ee43c05d1ca08da86e560073a3..bcb483dbe69af4ece1a659780494b5073543d2ae 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -93,6 +93,19 @@ char *spapr_get_cpu_core_type(const char *model) core_type = g_strdup_printf("%s-%s", model_pieces[0], TYPE_SPAPR_CPU_CORE); g_strfreev(model_pieces); + + /* Check whether it exists or whether we have to look up an alias name */ + if (!object_class_by_name(core_type)) { + const char *realmodel; + + g_free(core_type); + realmodel = ppc_cpu_lookup_alias(model); + if (realmodel) { + return spapr_get_cpu_core_type(realmodel); + } + return NULL; + } + return core_type; } @@ -354,41 +367,32 @@ typedef struct SPAPRCoreInfo { } SPAPRCoreInfo; static const SPAPRCoreInfo spapr_cores[] = { - /* 970 and aliaes */ + /* 970 */ { .name = "970_v2.2", .initfn = spapr_cpu_core_970_initfn }, - { .name = "970", .initfn = spapr_cpu_core_970_initfn }, - /* 970MP variants and aliases */ + /* 970MP variants */ { .name = "970MP_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn }, { .name = "970mp_v1.0", .initfn = spapr_cpu_core_970MP_v10_initfn }, { .name = "970MP_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn }, { .name = "970mp_v1.1", .initfn = spapr_cpu_core_970MP_v11_initfn }, - { .name = "970mp", .initfn = spapr_cpu_core_970MP_v11_initfn }, - /* POWER5 and aliases */ + /* POWER5+ */ { .name = "POWER5+_v2.1", .initfn = spapr_cpu_core_POWER5plus_initfn }, - { .name = "POWER5+", .initfn = spapr_cpu_core_POWER5plus_initfn }, - /* POWER7 and aliases */ + /* POWER7 */ { .name = "POWER7_v2.3", .initfn = spapr_cpu_core_POWER7_initfn }, - { .name = "POWER7", .initfn = spapr_cpu_core_POWER7_initfn }, - /* POWER7+ and aliases */ + /* POWER7+ */ { .name = "POWER7+_v2.1", .initfn = spapr_cpu_core_POWER7plus_initfn }, - { .name = "POWER7+", .initfn = spapr_cpu_core_POWER7plus_initfn }, - /* POWER8 and aliases */ + /* POWER8 */ { .name = "POWER8_v2.0", .initfn = spapr_cpu_core_POWER8_initfn }, - { .name = "POWER8", .initfn = spapr_cpu_core_POWER8_initfn }, - { .name = "power8", .initfn = spapr_cpu_core_POWER8_initfn }, - /* POWER8E and aliases */ + /* POWER8E */ { .name = "POWER8E_v2.1", .initfn = spapr_cpu_core_POWER8E_initfn }, - { .name = "POWER8E", .initfn = spapr_cpu_core_POWER8E_initfn }, - /* POWER8NVL and aliases */ + /* POWER8NVL */ { .name = "POWER8NVL_v1.0", .initfn = spapr_cpu_core_POWER8NVL_initfn }, - { .name = "POWER8NVL", .initfn = spapr_cpu_core_POWER8NVL_initfn }, { .name = NULL } };