linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Rosato <mjrosato@linux.ibm.com>
To: linux-s390@vger.kernel.org
Cc: alex.williamson@redhat.com, cohuck@redhat.com,
	schnelle@linux.ibm.com, farman@linux.ibm.com,
	pmorel@linux.ibm.com, borntraeger@linux.ibm.com,
	hca@linux.ibm.com, gor@linux.ibm.com,
	gerald.schaefer@linux.ibm.com, agordeev@linux.ibm.com,
	svens@linux.ibm.com, frankja@linux.ibm.com, david@redhat.com,
	imbrenda@linux.ibm.com, vneethv@linux.ibm.com,
	oberpar@linux.ibm.com, freude@linux.ibm.com, thuth@redhat.com,
	pasic@linux.ibm.com, pbonzini@redhat.com, corbet@lwn.net,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org
Subject: [PATCH v5 16/21] KVM: vfio: add s390x hook to register KVM guest designation
Date: Mon,  4 Apr 2022 13:43:44 -0400	[thread overview]
Message-ID: <20220404174349.58530-17-mjrosato@linux.ibm.com> (raw)
In-Reply-To: <20220404174349.58530-1-mjrosato@linux.ibm.com>

At the time a KVM is associated with a vfio group, s390x zPCI devices
must register a special guest indication (GISA designation) to allow
for the use of interpretive execution facilities.  This indication is
used to ensure that only the specified KVM can interact with the device.
Similarly, the indication must be removed once the KVM is no longer
associated with the device.

This patch adds an s390-specific hook to invoke a KVM registration routine
for each device associated with the iommu group; in reality, it will be a
NOP for all but zPCI devices on s390x.

Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
---
 virt/kvm/vfio.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c
index 8fcbc50221c2..2efe5be5a6ee 100644
--- a/virt/kvm/vfio.c
+++ b/virt/kvm/vfio.c
@@ -106,7 +106,7 @@ static bool kvm_vfio_group_is_coherent(struct vfio_group *vfio_group)
 	return ret > 0;
 }
 
-#ifdef CONFIG_SPAPR_TCE_IOMMU
+#if defined(CONFIG_SPAPR_TCE_IOMMU) || defined(CONFIG_S390)
 static int kvm_vfio_external_user_iommu_id(struct vfio_group *vfio_group)
 {
 	int (*fn)(struct vfio_group *);
@@ -133,7 +133,9 @@ static struct iommu_group *kvm_vfio_group_get_iommu_group(
 
 	return iommu_group_get_by_id(group_id);
 }
+#endif
 
+#ifdef CONFIG_SPAPR_TCE_IOMMU
 static void kvm_spapr_tce_release_vfio_group(struct kvm *kvm,
 		struct vfio_group *vfio_group)
 {
@@ -147,6 +149,24 @@ static void kvm_spapr_tce_release_vfio_group(struct kvm *kvm,
 }
 #endif
 
+#ifdef CONFIG_S390
+static int kvm_s390_register_kvm(struct vfio_group *vfio_group,
+				  struct kvm *kvm)
+{
+	int rc;
+
+	struct iommu_group *grp = kvm_vfio_group_get_iommu_group(vfio_group);
+
+	if (WARN_ON_ONCE(!grp))
+		return -EPERM;
+
+	rc = iommu_group_for_each_dev(grp, kvm, kvm_s390_pci_register_kvm);
+	iommu_group_put(grp);
+
+	return rc;
+}
+#endif
+
 /*
  * Groups can use the same or different IOMMU domains.  If the same then
  * adding a new group may change the coherency of groups we've previously
@@ -223,6 +243,16 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg)
 			return -ENOMEM;
 		}
 
+#ifdef CONFIG_S390
+		ret = kvm_s390_register_kvm(vfio_group, dev->kvm);
+		if (ret) {
+			kfree(kvg);
+			mutex_unlock(&kv->lock);
+			kvm_vfio_group_put_external_user(vfio_group);
+			return ret;
+		}
+#endif
+
 		list_add_tail(&kvg->node, &kv->group_list);
 		kvg->vfio_group = vfio_group;
 
@@ -258,6 +288,9 @@ static int kvm_vfio_set_group(struct kvm_device *dev, long attr, u64 arg)
 #ifdef CONFIG_SPAPR_TCE_IOMMU
 			kvm_spapr_tce_release_vfio_group(dev->kvm,
 							 kvg->vfio_group);
+#endif
+#ifdef CONFIG_S390
+			kvm_s390_register_kvm(vfio_group, NULL);
 #endif
 			kvm_vfio_group_set_kvm(kvg->vfio_group, NULL);
 			kvm_vfio_group_put_external_user(kvg->vfio_group);
-- 
2.27.0


  parent reply	other threads:[~2022-04-04 21:27 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-04 17:43 [PATCH v5 00/21] KVM: s390: enable zPCI for interpretive execution Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 01/21] s390/sclp: detect the zPCI load/store interpretation facility Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 02/21] s390/sclp: detect the AISII facility Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 03/21] s390/sclp: detect the AENI facility Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 04/21] s390/sclp: detect the AISI facility Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 05/21] s390/airq: pass more TPI info to airq handlers Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 06/21] s390/airq: allow for airq structure that uses an input vector Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 07/21] s390/pci: externalize the SIC operation controls and routine Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 08/21] s390/pci: stash associated GISA designation Matthew Rosato
2022-04-05  8:03   ` Niklas Schnelle
2022-04-12 16:18     ` Christian Borntraeger
2022-04-19  7:54   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 09/21] s390/pci: stash dtsm and maxstbl Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 10/21] KVM: s390: pci: add basic kvm_zdev structure Matthew Rosato
2022-04-05  8:20   ` Niklas Schnelle
2022-04-05 13:51     ` Matthew Rosato
2022-04-12 16:20   ` Christian Borntraeger
2022-04-19  7:55   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 11/21] KVM: s390: pci: do initial setup for AEN interpretation Matthew Rosato
2022-04-14  7:20   ` Christian Borntraeger
2022-04-14 13:00     ` Matthew Rosato
2022-04-19  8:16   ` Pierre Morel
2022-04-20 13:43     ` Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 12/21] KVM: s390: pci: enable host forwarding of Adapter Event Notifications Matthew Rosato
2022-04-19  9:21   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 13/21] KVM: s390: mechanism to enable guest zPCI Interpretation Matthew Rosato
2022-04-19  9:30   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 14/21] KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding Matthew Rosato
2022-04-05 13:39   ` Niklas Schnelle
2022-04-05 13:48     ` Matthew Rosato
2022-04-05 15:06       ` Pierre Morel
2022-04-08 12:48     ` Jason Gunthorpe
2022-04-11 12:19       ` Heiko Carstens
2022-04-04 17:43 ` [PATCH v5 15/21] KVM: s390: pci: add routines to start/stop interpretive execution Matthew Rosato
2022-04-08 12:47   ` Jason Gunthorpe
2022-04-12 13:14     ` Matthew Rosato
2022-04-12 13:29       ` Jason Gunthorpe
2022-04-04 17:43 ` Matthew Rosato [this message]
2022-04-08 12:45   ` [PATCH v5 16/21] KVM: vfio: add s390x hook to register KVM guest designation Jason Gunthorpe
2022-04-12 13:39     ` Matthew Rosato
2022-04-12 13:55       ` Jason Gunthorpe
2022-04-12 14:32         ` Matthew Rosato
2022-04-04 17:43 ` [PATCH v5 17/21] vfio-pci/zdev: add function handle to clp base capability Matthew Rosato
2022-04-19  9:40   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 18/21] vfio-pci/zdev: different maxstbl for interpreted devices Matthew Rosato
2022-04-19  9:41   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 19/21] KVM: s390: add KVM_S390_ZPCI_OP to manage guest zPCI devices Matthew Rosato
2022-04-19 10:07   ` Pierre Morel
2022-04-20 14:10     ` Matthew Rosato
2022-04-20 18:18       ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 20/21] KVM: s390: introduce CPU feature for zPCI Interpretation Matthew Rosato
2022-04-19 10:08   ` Pierre Morel
2022-04-04 17:43 ` [PATCH v5 21/21] MAINTAINERS: additional files related kvm s390 pci passthrough Matthew Rosato

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=20220404174349.58530-17-mjrosato@linux.ibm.com \
    --to=mjrosato@linux.ibm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=alex.williamson@redhat.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=corbet@lwn.net \
    --cc=david@redhat.com \
    --cc=farman@linux.ibm.com \
    --cc=frankja@linux.ibm.com \
    --cc=freude@linux.ibm.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=oberpar@linux.ibm.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=pmorel@linux.ibm.com \
    --cc=schnelle@linux.ibm.com \
    --cc=svens@linux.ibm.com \
    --cc=thuth@redhat.com \
    --cc=vneethv@linux.ibm.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 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).