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]>
---
include/system/kvm.h | 1 +
accel/kvm/kvm-accel-ops.c | 1 +
target/i386/kvm/kvm-cpu.c | 22 +---------------------
target/riscv/kvm/kvm-cpu.c | 23 +----------------------
4 files changed, 4 insertions(+), 43 deletions(-)
diff --git a/include/system/kvm.h b/include/system/kvm.h
index fd7175ea9f5..2c31fa6019e 100644
--- a/include/system/kvm.h
+++ b/include/system/kvm.h
@@ -364,6 +364,7 @@ int kvm_arch_pre_create_vcpu(CPUState *cpu, Error **errp);
int kvm_arch_init_vcpu(CPUState *cpu);
int kvm_arch_destroy_vcpu(CPUState *cpu);
+void kvm_arch_cpu_instance_init(CPUState *cpu);
bool kvm_arch_cpu_realize(CPUState *cpu, Error **errp);
#ifdef TARGET_KVM_HAVE_RESET_PARKED_VCPU
diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c
index 4294c7a9514..113a23f2384 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_target_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/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/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,
--
2.53.0