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é Reviewed-by: Richard Henderson Reviewed-by: Pierrick Bouvier --- 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