From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
marc.zyngier@arm.com, christoffer.dall@linaro.org,
drjones@redhat.com, kvmarm@lists.cs.columbia.edu,
kvm@vger.kernel.org
Cc: andre.przywara@arm.com, pbonzini@redhat.com
Subject: [RFC v6 6/6] KVM: arm: enable KVM_SIGNAL_MSI and MSI routing
Date: Wed, 6 Jul 2016 10:47:55 +0200 [thread overview]
Message-ID: <1467794875-5237-7-git-send-email-eric.auger@redhat.com> (raw)
In-Reply-To: <1467794875-5237-1-git-send-email-eric.auger@redhat.com>
If the ITS modality is not available, let's simply support MSI
injection by transforming the MSI.data into an SPI ID.
This becomes possible to use KVM_SIGNAL_MSI ioctl and MSI
routing for arm too.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
v4 -> v5:
- on vgic_v2m_inject_msi check the msi->data is within the SPI range
- move KVM_HAVE_MSI in the KVM section (to be symetrical with ARM64)
v2 -> v3:
- reword the commit message
- add sanity check about devid provision
v1 -> v2:
- introduce vgic_v2m_inject_msi in vgic-v2-emul.c following Andre's
advice
---
arch/arm/kvm/Kconfig | 1 +
virt/kvm/arm/vgic/vgic-irqfd.c | 2 +-
virt/kvm/arm/vgic/vgic-v2.c | 17 +++++++++++++++++
virt/kvm/arm/vgic/vgic.h | 1 +
4 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
index 3e1cd04..90d0176 100644
--- a/arch/arm/kvm/Kconfig
+++ b/arch/arm/kvm/Kconfig
@@ -34,6 +34,7 @@ config KVM
select HAVE_KVM_IRQFD
select HAVE_KVM_IRQCHIP
select HAVE_KVM_IRQ_ROUTING
+ select HAVE_KVM_MSI
depends on ARM_VIRT_EXT && ARM_LPAE && ARM_ARCH_TIMER
---help---
Support hosting virtualized guest machines.
diff --git a/virt/kvm/arm/vgic/vgic-irqfd.c b/virt/kvm/arm/vgic/vgic-irqfd.c
index 5d9ed39..6612209 100644
--- a/virt/kvm/arm/vgic/vgic-irqfd.c
+++ b/virt/kvm/arm/vgic/vgic-irqfd.c
@@ -98,7 +98,7 @@ int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e,
msi.devid = e->devid;
if (!vgic_has_its(kvm))
- return -ENODEV;
+ return vgic_v2m_inject_msi(kvm, &msi);
return vgic_its_inject_msi(kvm, &msi);
}
diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c
index 0bf6709..88e77db 100644
--- a/virt/kvm/arm/vgic/vgic-v2.c
+++ b/virt/kvm/arm/vgic/vgic-v2.c
@@ -241,6 +241,23 @@ static bool vgic_v2_check_base(gpa_t dist_base, gpa_t cpu_base)
return false;
}
+/**
+ * vgic_v2m_inject_msi: emulates GICv2M MSI injection by injecting
+ * the SPI ID matching the msi data
+ *
+ * @kvm: pointer to the kvm struct
+ * @msi: the msi struct handle
+ */
+int vgic_v2m_inject_msi(struct kvm *kvm, struct kvm_msi *msi)
+{
+ if (msi->flags & KVM_MSI_VALID_DEVID)
+ return -EINVAL;
+ if (!vgic_valid_spi(kvm, msi->data))
+ return -EINVAL;
+
+ return kvm_vgic_inject_irq(kvm, 0, msi->data, 1);
+}
+
int vgic_v2_map_resources(struct kvm *kvm)
{
struct vgic_dist *dist = &kvm->arch.vgic;
diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h
index b3e5678..223e946 100644
--- a/virt/kvm/arm/vgic/vgic.h
+++ b/virt/kvm/arm/vgic/vgic.h
@@ -64,6 +64,7 @@ int vgic_v2_probe(const struct gic_kvm_info *info);
int vgic_v2_map_resources(struct kvm *kvm);
int vgic_register_dist_iodev(struct kvm *kvm, gpa_t dist_base_address,
enum vgic_type);
+int vgic_v2m_inject_msi(struct kvm *kvm, struct kvm_msi *msi);
#ifdef CONFIG_KVM_ARM_VGIC_V3
void vgic_v3_process_maintenance(struct kvm_vcpu *vcpu);
--
2.5.5
next prev parent reply other threads:[~2016-07-06 8:43 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-06 8:47 [RFC v6 0/6] KVM: arm/arm64: gsi routing support Eric Auger
2016-07-06 8:47 ` [RFC v6 1/6] KVM: api: pass the devid in the msi routing entry Eric Auger
2016-07-11 16:24 ` Andre Przywara
2016-07-06 8:47 ` [RFC v6 2/6] KVM: kvm_host: add devid in kvm_kernel_irq_routing_entry Eric Auger
2016-07-11 16:24 ` Andre Przywara
2016-07-06 8:47 ` [RFC v6 3/6] KVM: irqchip: convey devid to kvm_set_msi Eric Auger
2016-07-11 16:25 ` Andre Przywara
2016-07-06 8:47 ` [RFC v6 4/6] KVM: arm/arm64: enable irqchip routing Eric Auger
2016-07-07 17:20 ` Andrew Jones
2016-07-08 8:16 ` Auger Eric
2016-07-08 8:52 ` Andrew Jones
2016-07-08 20:55 ` Radim Krčmář
2016-07-14 9:36 ` Auger Eric
2016-07-11 16:25 ` Andre Przywara
2016-07-14 9:33 ` Auger Eric
2016-07-06 8:47 ` [RFC v6 5/6] KVM: arm/arm64: enable MSI routing Eric Auger
2016-07-11 16:26 ` Andre Przywara
2016-07-06 8:47 ` Eric Auger [this message]
2016-07-11 16:26 ` [RFC v6 6/6] KVM: arm: enable KVM_SIGNAL_MSI and " Andre Przywara
2016-07-14 10:00 ` Auger Eric
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=1467794875-5237-7-git-send-email-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=andre.przywara@arm.com \
--cc=christoffer.dall@linaro.org \
--cc=drjones@redhat.com \
--cc=eric.auger.pro@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=marc.zyngier@arm.com \
--cc=pbonzini@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.