Expose kvm_arch_cpu_instance_init() and register it as generic
AccelOpsClass::cpu_instance_init hook.
Both X86 / RISCV's ACCEL_CPU_NAME("kvm") TypeInfo are now empty,
remove them.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Richard Henderson <[email protected]>
Reviewed-by: Pierrick Bouvier <[email protected]>
---
include/system/kvm.h | 1 +
accel/kvm/kvm-accel-ops.c | 1 +
target/arm/kvm.c | 4 ++++
target/i386/kvm/kvm-cpu.c | 22 +---------------------
target/loongarch/kvm/kvm.c | 4 ++++
target/ppc/kvm.c | 4 ++++
target/riscv/kvm/kvm-cpu.c | 23 +----------------------
target/s390x/kvm/kvm.c | 4 ++++
8 files changed, 20 insertions(+), 43 deletions(-)
diff --git a/include/system/kvm.h b/include/system/kvm.h
index cb077d6d863..a249f076763 100644
--- a/include/system/kvm.h
+++ b/include/system/kvm.h
@@ -223,6 +223,7 @@ void kvm_irqchip_add_change_notifier(Notifier *n);
void kvm_irqchip_remove_change_notifier(Notifier *n);
void kvm_irqchip_change_notify(void);
+void kvm_arch_cpu_instance_init(CPUState *cpu);
bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp);
#ifdef COMPILING_PER_TARGET
diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
index 4e7e3039208..edad3c1acea 100644
--- a/accel/kvm/kvm-accel-ops.c
+++ b/accel/kvm/kvm-accel-ops.c
@@ -97,6 +97,7 @@ static void kvm_accel_ops_class_init(ObjectClass *oc, const
void *data)
AccelOpsClass *ops = ACCEL_OPS_CLASS(oc);
ops->create_vcpu_thread = kvm_start_vcpu_thread;
+ ops->cpu_instance_init = kvm_arch_cpu_instance_init;
ops->cpu_realize = kvm_arch_cpu_realize;
ops->cpu_thread_is_idle = kvm_vcpu_thread_is_idle;
ops->cpus_are_resettable = kvm_cpus_are_resettable;
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index 22bd924a399..0f1a98b430f 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -1783,6 +1783,10 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
"Eager Page Split chunk size for hugepages. (default: 0, disabled)");
}
+void kvm_arch_cpu_instance_init(CPUState *cpu)
+{
+}
+
bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
{
return true;
diff --git a/target/i386/kvm/kvm-cpu.c b/target/i386/kvm/kvm-cpu.c
index 36634ec8929..6d93b50248c 100644
--- a/target/i386/kvm/kvm-cpu.c
+++ b/target/i386/kvm/kvm-cpu.c
@@ -16,7 +16,6 @@
#include "hw/i386/x86.h"
#include "kvm_i386.h"
-#include "accel/accel-cpu-target.h"
static void kvm_set_guest_phys_bits(CPUState *cs)
{
@@ -207,7 +206,7 @@ static void x86_cpu_change_kvm_default(const char *prop,
const char *value)
assert(pv->prop);
}
-static void kvm_cpu_instance_init(CPUState *cs)
+void kvm_arch_cpu_instance_init(CPUState *cs)
{
X86CPU *cpu = X86_CPU(cs);
X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
@@ -232,22 +231,3 @@ static void kvm_cpu_instance_init(CPUState *cs)
kvm_cpu_xsave_init();
}
-
-static void kvm_cpu_accel_class_init(ObjectClass *oc, const void *data)
-{
- AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
-
- acc->cpu_instance_init = kvm_cpu_instance_init;
-}
-static const TypeInfo kvm_cpu_accel_type_info = {
- .name = ACCEL_CPU_NAME("kvm"),
-
- .parent = TYPE_ACCEL_CPU,
- .class_init = kvm_cpu_accel_class_init,
- .abstract = true,
-};
-static void kvm_cpu_accel_register_types(void)
-{
- type_register_static(&kvm_cpu_accel_type_info);
-}
-type_init(kvm_cpu_accel_register_types);
diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
index ec4c05006c6..167fdd515be 100644
--- a/target/loongarch/kvm/kvm.c
+++ b/target/loongarch/kvm/kvm.c
@@ -1496,6 +1496,10 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
{
}
+void kvm_arch_cpu_instance_init(CPUState *cpu)
+{
+}
+
bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
{
return true;
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 013f5e852e1..894962d509f 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -2352,6 +2352,10 @@ static void alter_insns(uint64_t *word, uint64_t flags,
bool on)
}
}
+void kvm_arch_cpu_instance_init(CPUState *cpu)
+{
+}
+
bool kvm_arch_cpu_realize(CPUState *cs, Error **errp)
{
int ret;
diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c
index 7c4440d0025..b8e08d810a8 100644
--- a/target/riscv/kvm/kvm-cpu.c
+++ b/target/riscv/kvm/kvm-cpu.c
@@ -32,7 +32,6 @@
#include "system/kvm_int.h"
#include "cpu.h"
#include "trace.h"
-#include "accel/accel-cpu-target.h"
#include "hw/pci/pci.h"
#include "exec/memattrs.h"
#include "system/address-spaces.h"
@@ -1981,7 +1980,7 @@ void kvm_riscv_aia_create(MachineState *machine, uint64_t
group_shift,
kvm_msi_via_irqfd_allowed = true;
}
-static void kvm_cpu_instance_init(CPUState *cs)
+void kvm_arch_cpu_instance_init(CPUState *cs)
{
Object *obj = OBJECT(RISCV_CPU(cs));
@@ -2108,26 +2107,6 @@ void riscv_kvm_cpu_finalize_features(RISCVCPU *cpu,
Error **errp)
kvm_riscv_destroy_scratch_vcpu(&kvmcpu);
}
-static void kvm_cpu_accel_class_init(ObjectClass *oc, const void *data)
-{
- AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
-
- acc->cpu_instance_init = kvm_cpu_instance_init;
-}
-
-static const TypeInfo kvm_cpu_accel_type_info = {
- .name = ACCEL_CPU_NAME("kvm"),
-
- .parent = TYPE_ACCEL_CPU,
- .class_init = kvm_cpu_accel_class_init,
- .abstract = true,
-};
-static void kvm_cpu_accel_register_types(void)
-{
- type_register_static(&kvm_cpu_accel_type_info);
-}
-type_init(kvm_cpu_accel_register_types);
-
static const TypeInfo riscv_kvm_cpu_type_infos[] = {
{
.name = TYPE_RISCV_CPU_HOST,
diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
index 1c259652925..46730e72a92 100644
--- a/target/s390x/kvm/kvm.c
+++ b/target/s390x/kvm/kvm.c
@@ -2612,6 +2612,10 @@ void kvm_arch_accel_class_init(ObjectClass *oc)
{
}
+void kvm_arch_cpu_instance_init(CPUState *cpu)
+{
+}
+
bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp)
{
return true;
--
2.53.0