We will change query-cpu-definitions to have a new `machine` parameter. Make the machine-specific parts of that code explicit instead of calling default_cpu_version(), so we can change it to use the new parameter later.
As the code now has a dependency on MachineClass, wrap it inside a !CONFIG_USER_ONLY ifdef. The function was never used by *-user, anyway. This patch shouldn't introduce any behavior change. Results of query-cpu-definition will be exactly the same. Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- target/i386/cpu.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5dbd379331..67d1eca4ed 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -3877,6 +3877,7 @@ static void x86_cpu_get_unavailable_features(Object *obj, Visitor *v, visit_type_strList(v, "unavailable-features", &result, errp); } +#ifndef CONFIG_USER_ONLY /* Check for missing features that may prevent the CPU class from * running using the current machine and accelerator. */ @@ -3914,6 +3915,7 @@ static void x86_cpu_class_check_missing_features(X86CPUClass *xcc, object_unref(OBJECT(xc)); } +#endif /* Print all cpuid feature names in featureset */ @@ -4039,11 +4041,17 @@ void x86_cpu_list(void) g_list_free(names); } +#ifndef CONFIG_USER_ONLY +typedef struct X86CPUDefinitionArgs { + CpuDefinitionInfoList *cpu_list; + X86CPUVersion default_version; +} X86CPUDefinitionArgs; + static void x86_cpu_definition_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; X86CPUClass *cc = X86_CPU_CLASS(oc); - CpuDefinitionInfoList **cpu_list = user_data; + X86CPUDefinitionArgs *args = user_data; CpuDefinitionInfoList *entry; CpuDefinitionInfo *info; @@ -4059,25 +4067,30 @@ static void x86_cpu_definition_entry(gpointer data, gpointer user_data) * Old machine types won't report aliases, so that alias translation * doesn't break compatibility with previous QEMU versions. */ - if (default_cpu_version() != CPU_VERSION_LEGACY) { - info->alias_of = x86_cpu_class_get_alias_of(cc, default_cpu_version()); + if (args->default_version != CPU_VERSION_LEGACY) { + info->alias_of = x86_cpu_class_get_alias_of(cc, args->default_version); info->has_alias_of = !!info->alias_of; } entry = g_malloc0(sizeof(*entry)); entry->value = info; - entry->next = *cpu_list; - *cpu_list = entry; + entry->next = args->cpu_list; + args->cpu_list = entry; } CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) { - CpuDefinitionInfoList *cpu_list = NULL; - GSList *list = get_sorted_cpu_model_list(); - g_slist_foreach(list, x86_cpu_definition_entry, &cpu_list); + X86CPUDefinitionArgs args = { .cpu_list = NULL }; + GSList *list; + MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine()); + + args.default_version = default_cpu_version_for_machine(mc); + list = get_sorted_cpu_model_list(); + g_slist_foreach(list, x86_cpu_definition_entry, &args); g_slist_free(list); - return cpu_list; + return args.cpu_list; } +#endif static uint64_t x86_cpu_get_supported_feature_word(FeatureWord w, bool migratable_only) -- 2.21.0