[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap
From: |
Eric Auger |
Subject: |
[PATCH v5 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap |
Date: |
Wed, 11 Mar 2020 14:16:16 +0100 |
Convert kvm_arm_vgic_probe() so that it returns a
bitmap of supported in-kernel emulation VGIC versions instead
of the max version: at the moment values can be v2 and v3.
This allows to expose the case where the host GICv3 also
supports GICv2 emulation. This will be useful to choose the
default version in KVM accelerated mode.
Signed-off-by: Eric Auger <address@hidden>
Reviewed-by: Andrew Jones <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
---
target/arm/kvm_arm.h | 3 +++
hw/arm/virt.c | 11 +++++++++--
target/arm/kvm.c | 14 ++++++++------
3 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h
index ae9e075d75..48bf5e16d5 100644
--- a/target/arm/kvm_arm.h
+++ b/target/arm/kvm_arm.h
@@ -15,6 +15,9 @@
#include "exec/memory.h"
#include "qemu/error-report.h"
+#define KVM_ARM_VGIC_V2 (1 << 0)
+#define KVM_ARM_VGIC_V3 (1 << 1)
+
/**
* kvm_arm_vcpu_init:
* @cs: CPUState
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index e55cafa014..a94bc5ddae 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1554,11 +1554,18 @@ static void finalize_gic_version(VirtMachineState *vms)
vms->gic_version = VIRT_GIC_VERSION_3;
}
} else {
- vms->gic_version = kvm_arm_vgic_probe();
- if (!vms->gic_version) {
+ int probe_bitmap = kvm_arm_vgic_probe();
+
+ if (!probe_bitmap) {
error_report(
"Unable to determine GIC version supported by host");
exit(1);
+ } else {
+ if (probe_bitmap & KVM_ARM_VGIC_V3) {
+ vms->gic_version = VIRT_GIC_VERSION_3;
+ } else {
+ vms->gic_version = VIRT_GIC_VERSION_2;
+ }
}
}
} else if (vms->gic_version == VIRT_GIC_VERSION_NOSEL) {
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
index 85860e6f95..390077c518 100644
--- a/target/arm/kvm.c
+++ b/target/arm/kvm.c
@@ -874,15 +874,17 @@ int kvm_arch_irqchip_create(KVMState *s)
int kvm_arm_vgic_probe(void)
{
+ int val = 0;
+
if (kvm_create_device(kvm_state,
KVM_DEV_TYPE_ARM_VGIC_V3, true) == 0) {
- return 3;
- } else if (kvm_create_device(kvm_state,
- KVM_DEV_TYPE_ARM_VGIC_V2, true) == 0) {
- return 2;
- } else {
- return 0;
+ val |= KVM_ARM_VGIC_V3;
}
+ if (kvm_create_device(kvm_state,
+ KVM_DEV_TYPE_ARM_VGIC_V2, true) == 0) {
+ val |= KVM_ARM_VGIC_V2;
+ }
+ return val;
}
int kvm_arm_set_irq(int cpu, int irqtype, int irq, int level)
--
2.20.1
- [PATCH v5 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Eric Auger, 2020/03/11
- [PATCH v5 1/6] hw/arm/virt: Document 'max' value in gic-version property description, Eric Auger, 2020/03/11
- [PATCH v5 2/6] hw/arm/virt: Introduce VirtGICType enum type, Eric Auger, 2020/03/11
- [PATCH v5 3/6] hw/arm/virt: Introduce finalize_gic_version(), Eric Auger, 2020/03/11
- [PATCH v5 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap,
Eric Auger <=
- [PATCH v5 5/6] hw/arm/virt: kvm: Restructure finalize_gic_version(), Eric Auger, 2020/03/11
- [PATCH v5 6/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Eric Auger, 2020/03/11
- Re: [PATCH v5 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Peter Maydell, 2020/03/12