@@ -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)
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 <ehabkost@redhat.com> --- target/i386/cpu.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-)