From: Eric Auger <eric.auger@redhat.com>
To: eric.auger@redhat.com, eric.auger.pro@gmail.com,
marc.zyngier@arm.com, christoffer.dall@linaro.org,
andre.przywara@arm.com
Cc: drjones@redhat.com, kvmarm@lists.cs.columbia.edu,
kvm@vger.kernel.org, pbonzini@redhat.com
Subject: [RFC v7 7/7] KVM: arm: enable KVM_SIGNAL_MSI and MSI routing
Date: Mon, 18 Jul 2016 13:25:57 +0000 [thread overview]
Message-ID: <1468848357-2331-8-git-send-email-eric.auger@redhat.com> (raw)
In-Reply-To: <1468848357-2331-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>
---
v6 -> v7:
- move vgic_v2m_inject_msi into vgic-irqfd
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 | 19 ++++++++++++++++++-
2 files changed, 19 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 4f0d7eb..28c96ad 100644
--- a/virt/kvm/arm/vgic/vgic-irqfd.c
+++ b/virt/kvm/arm/vgic/vgic-irqfd.c
@@ -77,6 +77,23 @@ out:
}
/**
+ * 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
+ */
+static 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);
+}
+
+/**
* kvm_set_msi: inject the MSI corresponding to the
* MSI routing entry
*
@@ -96,7 +113,7 @@ int kvm_set_msi(struct kvm_kernel_irq_routing_entry *e,
msi.devid = e->msi_devid;
if (!vgic_has_its(kvm))
- return -ENODEV;
+ return vgic_v2m_inject_msi(kvm, &msi);
return vgic_its_inject_msi(kvm, &msi);
}
--
1.9.1
next prev parent reply other threads:[~2016-07-18 13:26 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-18 13:25 [RFC v7 0/7] KVM: arm/arm64: gsi routing support Eric Auger
2016-07-18 13:25 ` [RFC v7 1/7] KVM: api: pass the devid in the msi routing entry Eric Auger
2016-07-21 16:01 ` Radim Krčmář
2016-07-21 16:43 ` Andre Przywara
2016-07-21 17:15 ` Radim Krčmář
2016-07-21 20:48 ` Auger Eric
2016-07-18 13:25 ` [RFC v7 2/7] KVM: kvm_host: add devid in kvm_kernel_irq_routing_entry Eric Auger
2016-07-21 16:13 ` Radim Krčmář
2016-07-21 16:54 ` Marc Zyngier
2016-07-21 17:22 ` Radim Krčmář
2016-07-21 17:25 ` Marc Zyngier
2016-07-21 20:47 ` Auger Eric
2016-07-18 13:25 ` [RFC v7 3/7] KVM: irqchip: convey devid to kvm_set_msi Eric Auger
2016-07-18 13:25 ` [RFC v7 4/7] KVM: move kvm_setup_default/empty_irq_routing declaration in arch specific header Eric Auger
2016-07-18 13:25 ` [RFC v7 5/7] KVM: arm/arm64: enable irqchip routing Eric Auger
2016-07-19 14:56 ` Marc Zyngier
2016-07-19 15:46 ` Paolo Bonzini
2016-07-19 16:16 ` Marc Zyngier
2016-07-20 7:31 ` Auger Eric
2016-07-21 15:33 ` Marc Zyngier
2016-07-18 13:25 ` [RFC v7 6/7] KVM: arm/arm64: enable MSI routing Eric Auger
2016-07-21 16:21 ` Radim Krčmář
2016-07-21 20:50 ` Auger Eric
2016-07-18 13:25 ` Eric Auger [this message]
2016-07-21 16:33 ` [RFC v7 7/7] KVM: arm: enable KVM_SIGNAL_MSI and " Radim Krčmář
2016-07-21 21:10 ` Auger Eric
2016-07-22 13:39 ` Radim Krčmář
2016-07-22 13:52 ` Auger Eric
2016-07-22 13:56 ` Radim Krčmář
2016-07-22 13:59 ` 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=1468848357-2331-8-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.