All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.