diff options
author | Igor Mammedov <imammedo@redhat.com> | 2017-08-30 15:24:30 +0200 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2017-09-08 09:30:55 +1000 |
commit | c5354f54aa60d98c54ea5170a2064a1023e69967 (patch) | |
tree | 8c04ef380bfaa4e5e85095e067308e3cf6e83e2a /hw | |
parent | c9137065814609111ec0ed29246388f4ad086732 (diff) |
ppc: make cpu_model translation to type consistent
PPC handles -cpu FOO rather incosistently,
i.e. it does case-insensitive matching of FOO to
a CPU type (see: ppc_cpu_compare_class_name) but
handles alias names as case-sensitive, as result:
# qemu-system-ppc64 -M mac99 -cpu g3
qemu-system-ppc64: unable to find CPU model ' kN�U'
# qemu-system-ppc64 -cpu 970MP_V1.1
qemu-system-ppc64: Unable to find sPAPR CPU Core definition
while
# qemu-system-ppc64 -M mac99 -cpu G3
# qemu-system-ppc64 -cpu 970MP_v1.1
start up just fine.
Considering we can't take case-insensitive matching away,
make it case-insensitive for all alias/type/core_type
lookups.
As side effect it allows to remove duplicate core types
which are the same except of using different cased letters in name.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/ppc/spapr_cpu_core.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index dd9232620d..92bec033b3 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -130,8 +130,10 @@ char *spapr_get_cpu_core_type(const char *model) { char *core_type; gchar **model_pieces = g_strsplit(model, ",", 2); + gchar *cpu_model = g_ascii_strdown(model_pieces[0], -1); + g_strfreev(model_pieces); - core_type = g_strdup_printf("%s-%s", model_pieces[0], TYPE_SPAPR_CPU_CORE); + core_type = g_strdup_printf("%s-" TYPE_SPAPR_CPU_CORE, cpu_model); /* Check whether it exists or whether we have to look up an alias name */ if (!object_class_by_name(core_type)) { @@ -139,13 +141,13 @@ char *spapr_get_cpu_core_type(const char *model) g_free(core_type); core_type = NULL; - realmodel = ppc_cpu_lookup_alias(model_pieces[0]); + realmodel = ppc_cpu_lookup_alias(cpu_model); if (realmodel) { core_type = spapr_get_cpu_core_type(realmodel); } } + g_free(cpu_model); - g_strfreev(model_pieces); return core_type; } @@ -273,31 +275,29 @@ static const char *spapr_core_models[] = { "970_v2.2", /* 970MP variants */ - "970MP_v1.0", "970mp_v1.0", - "970MP_v1.1", "970mp_v1.1", /* POWER5+ */ - "POWER5+_v2.1", + "power5+_v2.1", /* POWER7 */ - "POWER7_v2.3", + "power7_v2.3", /* POWER7+ */ - "POWER7+_v2.1", + "power7+_v2.1", /* POWER8 */ - "POWER8_v2.0", + "power8_v2.0", /* POWER8E */ - "POWER8E_v2.1", + "power8e_v2.1", /* POWER8NVL */ - "POWER8NVL_v1.0", + "power8nvl_v1.0", /* POWER9 */ - "POWER9_v1.0", + "power9_v1.0", }; static Property spapr_cpu_core_properties[] = { |