All of lore.kernel.org
 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,
	jgg@nvidia.com, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org
Subject: [PATCH v6 16/21] vfio-pci/zdev: add open/close device hooks
Date: Tue, 26 Apr 2022 16:08:37 -0400	[thread overview]
Message-ID: <20220426200842.98655-17-mjrosato@linux.ibm.com> (raw)
In-Reply-To: <20220426200842.98655-1-mjrosato@linux.ibm.com>

During vfio-pci open_device, register a notifier for the zPCI device to
catch KVM registration.  This is needed in order to pass a special
indicator (GISA) to firmware to allow zPCI interpretation facilities to be
used for only the specific KVM associated with the vfio-pci device.
During vfio-pci close_device, unregister the notifier.

Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
---
 arch/s390/include/asm/pci.h      |  2 ++
 drivers/vfio/pci/vfio_pci_core.c |  2 ++
 drivers/vfio/pci/vfio_pci_zdev.c | 50 ++++++++++++++++++++++++++++++++
 include/linux/vfio_pci_core.h    | 10 +++++++
 4 files changed, 64 insertions(+)

diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h
index 322060a75d9f..fdcc95b36edb 100644
--- a/arch/s390/include/asm/pci.h
+++ b/arch/s390/include/asm/pci.h
@@ -5,6 +5,7 @@
 #include <linux/pci.h>
 #include <linux/mutex.h>
 #include <linux/iommu.h>
+#include <linux/notifier.h>
 #include <linux/pci_hotplug.h>
 #include <asm-generic/pci.h>
 #include <asm/pci_clp.h>
@@ -194,6 +195,7 @@ struct zpci_dev {
 	/* IOMMU and passthrough */
 	struct s390_domain *s390_domain; /* s390 IOMMU domain data */
 	struct kvm_zdev *kzdev;
+	struct notifier_block nb; /* vfio notifications */
 };
 
 static inline bool zdev_enabled(struct zpci_dev *zdev)
diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index 06b6f3594a13..d53125b308f0 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -449,6 +449,7 @@ void vfio_pci_core_close_device(struct vfio_device *core_vdev)
 		vdev->sriov_pf_core_dev->vf_token->users--;
 		mutex_unlock(&vdev->sriov_pf_core_dev->vf_token->lock);
 	}
+	vfio_pci_zdev_release(vdev);
 	vfio_spapr_pci_eeh_release(vdev->pdev);
 	vfio_pci_core_disable(vdev);
 
@@ -469,6 +470,7 @@ void vfio_pci_core_finish_enable(struct vfio_pci_core_device *vdev)
 {
 	vfio_pci_probe_mmaps(vdev);
 	vfio_spapr_pci_eeh_open(vdev->pdev);
+	vfio_pci_zdev_open(vdev);
 
 	if (vdev->sriov_pf_core_dev) {
 		mutex_lock(&vdev->sriov_pf_core_dev->vf_token->lock);
diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_zdev.c
index ea4c0d2b0663..112c1f820f8e 100644
--- a/drivers/vfio/pci/vfio_pci_zdev.c
+++ b/drivers/vfio/pci/vfio_pci_zdev.c
@@ -11,6 +11,7 @@
 #include <linux/uaccess.h>
 #include <linux/vfio.h>
 #include <linux/vfio_zdev.h>
+#include <linux/kvm_host.h>
 #include <asm/pci_clp.h>
 #include <asm/pci_io.h>
 
@@ -136,3 +137,52 @@ int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev,
 
 	return ret;
 }
+
+static int vfio_pci_zdev_group_notifier(struct notifier_block *nb,
+					unsigned long action, void *data)
+{
+	struct zpci_dev *zdev = container_of(nb, struct zpci_dev, nb);
+	int (*fn)(struct zpci_dev *zdev, struct kvm *kvm);
+	int rc = NOTIFY_OK;
+
+	if (action == VFIO_GROUP_NOTIFY_SET_KVM) {
+		if (!zdev)
+			return NOTIFY_DONE;
+
+		fn = symbol_get(kvm_s390_pci_register_kvm);
+		if (!fn)
+			return NOTIFY_DONE;
+
+		if (fn(zdev, (struct kvm *)data))
+			rc = NOTIFY_BAD;
+
+		symbol_put(kvm_s390_pci_register_kvm);
+	}
+
+	return rc;
+}
+
+void vfio_pci_zdev_open(struct vfio_pci_core_device *vdev)
+{
+	unsigned long events = VFIO_GROUP_NOTIFY_SET_KVM;
+	struct zpci_dev *zdev = to_zpci(vdev->pdev);
+
+	if (!zdev)
+		return;
+
+	zdev->nb.notifier_call = vfio_pci_zdev_group_notifier;
+
+	vfio_register_notifier(vdev->vdev.dev, VFIO_GROUP_NOTIFY,
+			       &events, &zdev->nb);
+}
+
+void vfio_pci_zdev_release(struct vfio_pci_core_device *vdev)
+{
+	struct zpci_dev *zdev = to_zpci(vdev->pdev);
+
+	if (!zdev)
+		return;
+
+	vfio_unregister_notifier(vdev->vdev.dev, VFIO_GROUP_NOTIFY,
+				 &zdev->nb);
+}
diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h
index 48f2dd3c568c..b1b285421c18 100644
--- a/include/linux/vfio_pci_core.h
+++ b/include/linux/vfio_pci_core.h
@@ -209,12 +209,22 @@ static inline int vfio_pci_igd_init(struct vfio_pci_core_device *vdev)
 #ifdef CONFIG_S390
 extern int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev,
 				       struct vfio_info_cap *caps);
+void vfio_pci_zdev_open(struct vfio_pci_core_device *vdev);
+void vfio_pci_zdev_release(struct vfio_pci_core_device *vdev);
 #else
 static inline int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device *vdev,
 					      struct vfio_info_cap *caps)
 {
 	return -ENODEV;
 }
+
+static inline void vfio_pci_zdev_open(struct vfio_pci_core_device *vdev)
+{
+}
+
+static inline void vfio_pci_zdev_release(struct vfio_pci_core_device *vdev)
+{
+}
 #endif
 
 /* Will be exported for vfio pci drivers usage */
-- 
2.27.0


  parent reply	other threads:[~2022-04-26 20:11 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-26 20:08 [PATCH v6 00/21] KVM: s390: enable zPCI for interpretive execution Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 01/21] s390/sclp: detect the zPCI load/store interpretation facility Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 02/21] s390/sclp: detect the AISII facility Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 03/21] s390/sclp: detect the AENI facility Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 04/21] s390/sclp: detect the AISI facility Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 05/21] s390/airq: pass more TPI info to airq handlers Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 06/21] s390/airq: allow for airq structure that uses an input vector Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 07/21] s390/pci: externalize the SIC operation controls and routine Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 08/21] s390/pci: stash associated GISA designation Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 09/21] s390/pci: stash dtsm and maxstbl Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 10/21] KVM: s390: pci: add basic kvm_zdev structure Matthew Rosato
2022-04-27  8:41   ` kernel test robot
2022-04-27 13:25     ` Matthew Rosato
2022-04-27 13:25       ` Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 11/21] KVM: s390: pci: do initial setup for AEN interpretation Matthew Rosato
2022-05-05 10:16   ` Christian Borntraeger
2022-04-26 20:08 ` [PATCH v6 12/21] KVM: s390: pci: enable host forwarding of Adapter Event Notifications Matthew Rosato
2022-05-05 12:37   ` Christian Borntraeger
2022-04-26 20:08 ` [PATCH v6 13/21] KVM: s390: mechanism to enable guest zPCI Interpretation Matthew Rosato
2022-05-05 13:10   ` Christian Borntraeger
2022-04-26 20:08 ` [PATCH v6 14/21] KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding Matthew Rosato
2022-05-06 15:35   ` Christian Borntraeger
2022-05-06 15:55     ` Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 15/21] KVM: s390: pci: add routines to start/stop interpretive execution Matthew Rosato
2022-04-27 15:14   ` Jason Gunthorpe
2022-04-27 20:20     ` Matthew Rosato
2022-04-28 12:28       ` Jason Gunthorpe
2022-04-26 20:08 ` Matthew Rosato [this message]
2022-04-27 14:04   ` [PATCH v6 16/21] vfio-pci/zdev: add open/close device hooks Jason Gunthorpe
2022-04-27 14:42     ` Matthew Rosato
2022-04-27 15:01       ` Jason Gunthorpe
2022-04-27 15:26         ` Matthew Rosato
2022-04-27 15:39           ` Jason Gunthorpe
2022-05-06 15:56             ` Christian Borntraeger
2022-04-26 20:08 ` [PATCH v6 17/21] vfio-pci/zdev: add function handle to clp base capability Matthew Rosato
2022-05-06 16:02   ` Christian Borntraeger
2022-04-26 20:08 ` [PATCH v6 18/21] vfio-pci/zdev: different maxstbl for interpreted devices Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 19/21] KVM: s390: add KVM_S390_ZPCI_OP to manage guest zPCI devices Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 20/21] KVM: s390: introduce CPU feature for zPCI Interpretation Matthew Rosato
2022-04-26 20:08 ` [PATCH v6 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=20220426200842.98655-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=jgg@nvidia.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 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.