From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
qemu-devel@nongnu.org, qemu-arm@nongnu.org,
peter.maydell@linaro.org
Cc: maz@kernel.org, drjones@redhat.com
Subject: [PATCH v2 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap
Date: Sun, 1 Mar 2020 11:40:38 +0100 [thread overview]
Message-ID: <20200301104040.15186-5-eric.auger@redhat.com> (raw)
In-Reply-To: <20200301104040.15186-1-eric.auger@redhat.com>
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>
---
hw/arm/virt.c | 11 +++++++++--
target/arm/kvm.c | 14 ++++++++------
target/arm/kvm_arm.h | 3 +++
3 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 338d56999f..eb8c57c85e 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1553,11 +1553,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)
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
--
2.20.1
next prev parent reply other threads:[~2020-03-01 10:43 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-01 10:40 [PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work Eric Auger
2020-03-01 10:40 ` [PATCH v2 1/6] hw/arm/virt: Document 'max' value in gic-version property description Eric Auger
2020-03-01 17:39 ` Richard Henderson
2020-03-01 10:40 ` [PATCH v2 2/6] hw/arm/virt: Use VIRT_GIC_VERSION defines Eric Auger
2020-03-01 17:44 ` Richard Henderson
2020-03-01 10:40 ` [PATCH v2 3/6] hw/arm/virt: Introduce finalize_gic_version() Eric Auger
2020-03-01 17:48 ` Richard Henderson
2020-03-01 10:40 ` Eric Auger [this message]
2020-03-01 17:50 ` [PATCH v2 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap Richard Henderson
2020-03-01 10:40 ` [PATCH v2 5/6] hw/arm/virt: kvm: Check the chosen gic version is supported by the host Eric Auger
2020-03-01 17:56 ` Richard Henderson
2020-03-01 18:02 ` Auger Eric
2020-03-01 10:40 ` [PATCH v2 6/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work Eric Auger
2020-03-01 17:58 ` Richard Henderson
2020-03-02 7:54 ` Andrew Jones
2020-03-02 7:55 ` [PATCH v2 0/6] " Andrew Jones
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200301104040.15186-5-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=maz@kernel.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).