Introduce a new class derived from AccelCPUClass. It only exists to to contain the new KVMCPUOps which will allow for a QOM-ified access to what was previously kvm_arch_foo direct linking. This anticipates a world where we have a KVM interface capable of launching multiple architectures.
Signed-off-by: Alex Bennée <[email protected]> --- include/accel/kvm/cpu-ops.h | 53 +++++++++++++++++++++++++++++++++++++ accel/kvm/kvm-accel-ops.c | 9 +++++++ 2 files changed, 62 insertions(+) create mode 100644 include/accel/kvm/cpu-ops.h diff --git a/include/accel/kvm/cpu-ops.h b/include/accel/kvm/cpu-ops.h new file mode 100644 index 00000000000..662d0c553c7 --- /dev/null +++ b/include/accel/kvm/cpu-ops.h @@ -0,0 +1,53 @@ +/* + * KVM CPU-specific operations + * + * Copyright 2026 Linaro Ltd + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef ACCEL_KVM_CPU_OPS_H +#define ACCEL_KVM_CPU_OPS_H + +#include "qom/object.h" +#include "hw/core/cpu.h" +#include "accel/accel-cpu-target.h" + +/** + * struct KVMCPUOps - Target-specific per-vCPU operations for KVM + */ +typedef struct KVMCPUOps { +} KVMCPUOps; + +#define TYPE_KVM_ACCEL_CPU "kvm-accel-cpu" + +/** + * struct KVMAccelCPUClass - KVM-specific accelerator CPU class + * + * @parent_class: The parent #AccelCPUClass + */ +typedef struct KVMAccelCPUClass { + AccelCPUClass parent_class; + + const KVMCPUOps *cpu_ops; +} KVMAccelCPUClass; + +DECLARE_CLASS_CHECKERS(KVMAccelCPUClass, KVM_ACCEL_CPU, TYPE_KVM_ACCEL_CPU) + +/** + * kvm_get_cpu_ops - Retrieve the KVMCPUOps table for a CPU + * @cpu: The #CPUState + * + * Returns: A pointer to the active #KVMCPUOps, or NULL if the CPU class does + * not have an attached KVM accelerator class. + */ +static inline const KVMCPUOps *kvm_get_cpu_ops(const CPUState *cpu) +{ + if (cpu->cc->accel_cpu) { + KVMAccelCPUClass *kacc = KVM_ACCEL_CPU_CLASS(cpu->cc->accel_cpu); + return kacc->cpu_ops; + } + return NULL; +} + +#endif /* ACCEL_KVM_CPU_OPS_H */ diff --git a/accel/kvm/kvm-accel-ops.c b/accel/kvm/kvm-accel-ops.c index 47244d33f7d..445d7d7f545 100644 --- a/accel/kvm/kvm-accel-ops.c +++ b/accel/kvm/kvm-accel-ops.c @@ -18,6 +18,7 @@ #include "qemu/main-loop.h" #include "exec/cpu-common.h" #include "accel/accel-cpu-ops.h" +#include "accel/kvm/cpu-ops.h" #include "system/kvm.h" #include "system/kvm_int.h" #include "system/runstate.h" @@ -121,8 +122,16 @@ static const TypeInfo kvm_accel_ops_type = { .abstract = true, }; +static const TypeInfo kvm_accel_cpu_type = { + .name = TYPE_KVM_ACCEL_CPU, + .parent = TYPE_ACCEL_CPU, + .class_size = sizeof(KVMAccelCPUClass), + .abstract = true, +}; + static void kvm_accel_ops_register_types(void) { type_register_static(&kvm_accel_ops_type); + type_register_static(&kvm_accel_cpu_type); } type_init(kvm_accel_ops_register_types); -- 2.47.3
