mirror of https://github.com/xemu-project/xemu.git
target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap
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 <eric.auger@redhat.com> Reviewed-by: Andrew Jones <drjones@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200311131618.7187-5-eric.auger@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
36bf4ec8c8
commit
d45efe4782
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue