From: Pierrick Bouvier <[email protected]> Move gic_cap_kvm_probe to target/arm/kvm.c to remove #ifdef CONFIG_KVM.
Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Signed-off-by: Pierrick Bouvier <[email protected]> Message-ID: <[email protected]> Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- target/arm/kvm_arm.h | 3 +++ target/arm/arm-qmp-cmds.c | 27 +++------------------------ target/arm/kvm-stub.c | 5 +++++ target/arm/kvm.c | 21 +++++++++++++++++++++ target/arm/meson.build | 2 +- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h index 6a9b6374a6d..cc0b374254e 100644 --- a/target/arm/kvm_arm.h +++ b/target/arm/kvm_arm.h @@ -11,6 +11,7 @@ #ifndef QEMU_KVM_ARM_H #define QEMU_KVM_ARM_H +#include "qapi/qapi-types-misc-arm.h" #include "system/kvm.h" #include "target/arm/cpu-qom.h" @@ -263,4 +264,6 @@ void kvm_arm_enable_mte(Object *cpuobj, Error **errp); void arm_cpu_kvm_set_irq(void *arm_cpu, int irq, int level); +void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3); + #endif diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index 45df15de782..83ec95c290f 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -43,29 +43,6 @@ static GICCapability *gic_cap_new(int version) return cap; } -static inline void gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3) -{ -#ifdef CONFIG_KVM - int fdarray[3]; - - if (!kvm_arm_create_scratch_host_vcpu(fdarray, NULL)) { - return; - } - - /* Test KVM GICv2 */ - if (kvm_device_supported(fdarray[1], KVM_DEV_TYPE_ARM_VGIC_V2)) { - v2->kernel = true; - } - - /* Test KVM GICv3 */ - if (kvm_device_supported(fdarray[1], KVM_DEV_TYPE_ARM_VGIC_V3)) { - v3->kernel = true; - } - - kvm_arm_destroy_scratch_host_vcpu(fdarray); -#endif -} - GICCapabilityList *qmp_query_gic_capabilities(Error **errp) { GICCapabilityList *head = NULL; @@ -74,7 +51,9 @@ GICCapabilityList *qmp_query_gic_capabilities(Error **errp) v2->emulated = true; v3->emulated = true; - gic_cap_kvm_probe(v2, v3); + if (kvm_enabled()) { + arm_gic_cap_kvm_probe(v2, v3); + } QAPI_LIST_PREPEND(head, v2); QAPI_LIST_PREPEND(head, v3); diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c index c93462c5b9b..ea67deea520 100644 --- a/target/arm/kvm-stub.c +++ b/target/arm/kvm-stub.c @@ -124,3 +124,8 @@ bool kvm_arm_cpu_post_load(ARMCPU *cpu) { g_assert_not_reached(); } + +void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3) +{ + g_assert_not_reached(); +} diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 3e35570f15f..ded582e0da0 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -2580,3 +2580,24 @@ void arm_cpu_kvm_set_irq(void *arm_cpu, int irq, int level) } kvm_arm_set_irq(cs->cpu_index, KVM_ARM_IRQ_TYPE_CPU, irq_id, !!level); } + +void arm_gic_cap_kvm_probe(GICCapability *v2, GICCapability *v3) +{ + int fdarray[3]; + + if (!kvm_arm_create_scratch_host_vcpu(fdarray, NULL)) { + return; + } + + /* Test KVM GICv2 */ + if (kvm_device_supported(fdarray[1], KVM_DEV_TYPE_ARM_VGIC_V2)) { + v2->kernel = true; + } + + /* Test KVM GICv3 */ + if (kvm_device_supported(fdarray[1], KVM_DEV_TYPE_ARM_VGIC_V3)) { + v3->kernel = true; + } + + kvm_arm_destroy_scratch_host_vcpu(fdarray); +} diff --git a/target/arm/meson.build b/target/arm/meson.build index 462c71148d2..1a1bcde2601 100644 --- a/target/arm/meson.build +++ b/target/arm/meson.build @@ -16,7 +16,7 @@ arm_common_ss.add(files( 'mmuidx.c', )) -arm_system_ss.add(files( +arm_common_system_ss.add(files( 'arm-qmp-cmds.c', )) arm_system_ss.add(when: 'CONFIG_KVM', if_true: files('hyp_gdbstub.c', 'kvm.c')) -- 2.52.0
