[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 5/7] i386: Remove x86_cpu_set_default_version() function
From: |
Eduardo Habkost |
Subject: |
[PATCH 5/7] i386: Remove x86_cpu_set_default_version() function |
Date: |
Thu, 24 Oct 2019 23:25:51 -0300 |
We will introduce code that will return machine-type-specific
from other machines (not the current one), so we'll need a helper
for getting the default CPU version from a machine class.
With the new helper, we don't need the machine init function to
call x86_cpu_set_default_version() anymore: we can just look at
the machine class of the current machine. Replace the
default_cpu_version static variable with a default_cpu_version()
function that will look at qdev_get_machine().
Signed-off-by: Eduardo Habkost <address@hidden>
---
include/hw/i386/pc.h | 5 ++++-
target/i386/cpu.h | 6 ------
hw/i386/pc.c | 3 ---
target/i386/cpu.c | 28 ++++++++++++++++++++--------
4 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 37bfd95113..00ac726ebc 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -113,7 +113,10 @@ typedef struct PCMachineClass {
/* Compat options: */
- /* Default CPU model version. See x86_cpu_set_default_version(). */
+ /*
+ * Default CPU model version for CPU models having
+ * version == CPU_VERSION_AUTO.
+ */
int default_cpu_version;
/* ACPI compat: */
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index cedb5bc205..aa17c79b43 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -2168,12 +2168,6 @@ void x86_cpu_change_kvm_default(const char *prop, const
char *value);
typedef int X86CPUVersion;
-/*
- * Set default CPU model version for CPU models having
- * version == CPU_VERSION_AUTO.
- */
-void x86_cpu_set_default_version(X86CPUVersion version);
-
/* Return name of 32-bit register, from a R_* constant */
const char *get_register_name_32(unsigned int reg);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 4b1904237e..64ec995172 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1503,9 +1503,6 @@ void pc_cpus_init(PCMachineState *pcms)
const CPUArchIdList *possible_cpus;
MachineState *ms = MACHINE(pcms);
MachineClass *mc = MACHINE_GET_CLASS(pcms);
- PCMachineClass *pcmc = PC_MACHINE_CLASS(mc);
-
- x86_cpu_set_default_version(pcmc->default_cpu_version);
/* Calculates the limit to CPU APIC ID values
*
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 8cecc669b3..5dbd379331 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -57,6 +57,7 @@
#include "hw/xen/xen.h"
#include "hw/i386/apic_internal.h"
#include "hw/boards.h"
+#include "hw/i386/pc.h"
#endif
#include "disas/capstone.h"
@@ -3165,14 +3166,25 @@ static PropValue tcg_default_props[] = {
};
-X86CPUVersion default_cpu_version = CPU_VERSION_LATEST;
+#ifdef CONFIG_USER_ONLY
+static X86CPUVersion default_cpu_version(void)
+{
+ return CPU_VERSION_LATEST;
+}
+#else
+static X86CPUVersion default_cpu_version_for_machine(MachineClass *mc)
+{
+ PCMachineClass *pcmc =
+ (PCMachineClass *)object_class_dynamic_cast(OBJECT_CLASS(mc),
TYPE_PC_MACHINE);
+ return pcmc ? pcmc->default_cpu_version : CPU_VERSION_LATEST;
+}
-void x86_cpu_set_default_version(X86CPUVersion version)
+static X86CPUVersion default_cpu_version(void)
{
- /* Translating CPU_VERSION_AUTO to CPU_VERSION_AUTO doesn't make sense */
- assert(version != CPU_VERSION_AUTO);
- default_cpu_version = version;
+ return
default_cpu_version_for_machine(MACHINE_GET_CLASS(qdev_get_machine()));
}
+#endif
+
static X86CPUVersion x86_cpu_model_last_version(const X86CPUModel *model)
{
@@ -4047,8 +4059,8 @@ 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 (default_cpu_version() != CPU_VERSION_LEGACY) {
+ info->alias_of = x86_cpu_class_get_alias_of(cc, default_cpu_version());
info->has_alias_of = !!info->alias_of;
}
@@ -4119,7 +4131,7 @@ static void x86_cpu_apply_props(X86CPU *cpu, PropValue
*props)
static void x86_cpu_apply_version_props(X86CPU *cpu, X86CPUModel *model)
{
const X86CPUVersionDefinition *vdef;
- X86CPUVersion version = x86_cpu_model_resolve_version(model,
default_cpu_version);
+ X86CPUVersion version = x86_cpu_model_resolve_version(model,
default_cpu_version());
if (version == CPU_VERSION_LEGACY) {
return;
--
2.21.0
- [PATCH 0/7] i386: Add `machine` parameter to query-cpu-definitions, Eduardo Habkost, 2019/10/24
- [PATCH 1/7] i386: Use g_autofree at x86_cpu_list_entry(), Eduardo Habkost, 2019/10/24
- [PATCH 2/7] i386: Add default_version parameter to CPU version functions, Eduardo Habkost, 2019/10/24
- [PATCH 3/7] i386: Don't use default_cpu_version at "-cpu help", Eduardo Habkost, 2019/10/24
- [PATCH 4/7] machine: machine_find_class() function, Eduardo Habkost, 2019/10/24
- [PATCH 5/7] i386: Remove x86_cpu_set_default_version() function,
Eduardo Habkost <=
- [PATCH 6/7] i386: Don't use default_cpu_version() inside query-cpu-definitions, Eduardo Habkost, 2019/10/24
- [PATCH 7/7] cpu: Add `machine` parameter to query-cpu-definitions, Eduardo Habkost, 2019/10/24
- Re: [PATCH 0/7] i386: Add `machine` parameter to query-cpu-definitions, David Hildenbrand, 2019/10/25