All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yi Liu <yi.l.liu@intel.com>
To: alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com
Cc: joro@8bytes.org, robin.murphy@arm.com, cohuck@redhat.com,
	eric.auger@redhat.com, nicolinc@nvidia.com, kvm@vger.kernel.org,
	mjrosato@linux.ibm.com, chao.p.peng@linux.intel.com,
	yi.l.liu@intel.com, yi.y.sun@linux.intel.com, peterx@redhat.com,
	jasowang@redhat.com, shameerali.kolothum.thodi@huawei.com,
	lulu@redhat.com, suravee.suthikulpanit@amd.com,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org, linux-s390@vger.kernel.org,
	xudong.hao@intel.com, yan.y.zhao@intel.com,
	terrence.xu@intel.com, yanting.jiang@intel.com,
	zhenzhong.duan@intel.com, clegoate@redhat.com
Subject: [PATCH v7 4/9] iommufd: Add iommufd_ctx_has_group()
Date: Fri,  2 Jun 2023 05:15:10 -0700	[thread overview]
Message-ID: <20230602121515.79374-5-yi.l.liu@intel.com> (raw)
In-Reply-To: <20230602121515.79374-1-yi.l.liu@intel.com>

This adds the helper to check if any device within the given iommu_group
has been bound with the iommufd_ctx. This is helpful for the checking on
device ownership for the devices which have not been bound but cannot be
bound to any other iommufd_ctx as the iommu_group has been bound.

Tested-by: Terrence Xu <terrence.xu@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
---
 drivers/iommu/iommufd/device.c | 30 ++++++++++++++++++++++++++++++
 include/linux/iommufd.h        |  8 ++++++++
 2 files changed, 38 insertions(+)

diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index 4f9b2142274c..4571344c8508 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -98,6 +98,36 @@ struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
 }
 EXPORT_SYMBOL_NS_GPL(iommufd_device_bind, IOMMUFD);
 
+/**
+ * iommufd_ctx_has_group - True if any device within the group is bound
+ *                         to the ictx
+ * @ictx: iommufd file descriptor
+ * @group: Pointer to a physical iommu_group struct
+ *
+ * True if any device within the group has been bound to this ictx, ex. via
+ * iommufd_device_bind(), therefore implying ictx ownership of the group.
+ */
+bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group)
+{
+	struct iommufd_object *obj;
+	unsigned long index;
+
+	if (!ictx || !group)
+		return false;
+
+	xa_lock(&ictx->objects);
+	xa_for_each(&ictx->objects, index, obj) {
+		if (obj->type == IOMMUFD_OBJ_DEVICE &&
+		    container_of(obj, struct iommufd_device, obj)->group == group) {
+			xa_unlock(&ictx->objects);
+			return true;
+		}
+	}
+	xa_unlock(&ictx->objects);
+	return false;
+}
+EXPORT_SYMBOL_NS_GPL(iommufd_ctx_has_group, IOMMUFD);
+
 /**
  * iommufd_device_unbind - Undo iommufd_device_bind()
  * @idev: Device returned by iommufd_device_bind()
diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h
index 1129a36a74c4..33fe57e95e42 100644
--- a/include/linux/iommufd.h
+++ b/include/linux/iommufd.h
@@ -16,6 +16,7 @@ struct page;
 struct iommufd_ctx;
 struct iommufd_access;
 struct file;
+struct iommu_group;
 
 struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
 					   struct device *dev, u32 *id);
@@ -50,6 +51,7 @@ void iommufd_ctx_get(struct iommufd_ctx *ictx);
 #if IS_ENABLED(CONFIG_IOMMUFD)
 struct iommufd_ctx *iommufd_ctx_from_file(struct file *file);
 void iommufd_ctx_put(struct iommufd_ctx *ictx);
+bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group);
 
 int iommufd_access_pin_pages(struct iommufd_access *access, unsigned long iova,
 			     unsigned long length, struct page **out_pages,
@@ -71,6 +73,12 @@ static inline void iommufd_ctx_put(struct iommufd_ctx *ictx)
 {
 }
 
+static inline bool iommufd_ctx_has_group(struct iommufd_ctx *ictx,
+					 struct iommu_group *group)
+{
+	return false;
+}
+
 static inline int iommufd_access_pin_pages(struct iommufd_access *access,
 					   unsigned long iova,
 					   unsigned long length,
-- 
2.34.1


WARNING: multiple messages have this Message-ID (diff)
From: Yi Liu <yi.l.liu@intel.com>
To: alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com
Cc: mjrosato@linux.ibm.com, jasowang@redhat.com,
	xudong.hao@intel.com, zhenzhong.duan@intel.com,
	peterx@redhat.com, terrence.xu@intel.com,
	chao.p.peng@linux.intel.com, linux-s390@vger.kernel.org,
	yi.l.liu@intel.com, kvm@vger.kernel.org, lulu@redhat.com,
	yanting.jiang@intel.com, joro@8bytes.org, nicolinc@nvidia.com,
	yan.y.zhao@intel.com, intel-gfx@lists.freedesktop.org,
	eric.auger@redhat.com, intel-gvt-dev@lists.freedesktop.org,
	yi.y.sun@linux.intel.com, clegoate@redhat.com, cohuck@redhat.com,
	shameerali.kolothum.thodi@huawei.com,
	suravee.suthikulpanit@amd.com, robin.murphy@arm.com
Subject: [Intel-gfx] [PATCH v7 4/9] iommufd: Add iommufd_ctx_has_group()
Date: Fri,  2 Jun 2023 05:15:10 -0700	[thread overview]
Message-ID: <20230602121515.79374-5-yi.l.liu@intel.com> (raw)
In-Reply-To: <20230602121515.79374-1-yi.l.liu@intel.com>

This adds the helper to check if any device within the given iommu_group
has been bound with the iommufd_ctx. This is helpful for the checking on
device ownership for the devices which have not been bound but cannot be
bound to any other iommufd_ctx as the iommu_group has been bound.

Tested-by: Terrence Xu <terrence.xu@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
---
 drivers/iommu/iommufd/device.c | 30 ++++++++++++++++++++++++++++++
 include/linux/iommufd.h        |  8 ++++++++
 2 files changed, 38 insertions(+)

diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index 4f9b2142274c..4571344c8508 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -98,6 +98,36 @@ struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
 }
 EXPORT_SYMBOL_NS_GPL(iommufd_device_bind, IOMMUFD);
 
+/**
+ * iommufd_ctx_has_group - True if any device within the group is bound
+ *                         to the ictx
+ * @ictx: iommufd file descriptor
+ * @group: Pointer to a physical iommu_group struct
+ *
+ * True if any device within the group has been bound to this ictx, ex. via
+ * iommufd_device_bind(), therefore implying ictx ownership of the group.
+ */
+bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group)
+{
+	struct iommufd_object *obj;
+	unsigned long index;
+
+	if (!ictx || !group)
+		return false;
+
+	xa_lock(&ictx->objects);
+	xa_for_each(&ictx->objects, index, obj) {
+		if (obj->type == IOMMUFD_OBJ_DEVICE &&
+		    container_of(obj, struct iommufd_device, obj)->group == group) {
+			xa_unlock(&ictx->objects);
+			return true;
+		}
+	}
+	xa_unlock(&ictx->objects);
+	return false;
+}
+EXPORT_SYMBOL_NS_GPL(iommufd_ctx_has_group, IOMMUFD);
+
 /**
  * iommufd_device_unbind - Undo iommufd_device_bind()
  * @idev: Device returned by iommufd_device_bind()
diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h
index 1129a36a74c4..33fe57e95e42 100644
--- a/include/linux/iommufd.h
+++ b/include/linux/iommufd.h
@@ -16,6 +16,7 @@ struct page;
 struct iommufd_ctx;
 struct iommufd_access;
 struct file;
+struct iommu_group;
 
 struct iommufd_device *iommufd_device_bind(struct iommufd_ctx *ictx,
 					   struct device *dev, u32 *id);
@@ -50,6 +51,7 @@ void iommufd_ctx_get(struct iommufd_ctx *ictx);
 #if IS_ENABLED(CONFIG_IOMMUFD)
 struct iommufd_ctx *iommufd_ctx_from_file(struct file *file);
 void iommufd_ctx_put(struct iommufd_ctx *ictx);
+bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group);
 
 int iommufd_access_pin_pages(struct iommufd_access *access, unsigned long iova,
 			     unsigned long length, struct page **out_pages,
@@ -71,6 +73,12 @@ static inline void iommufd_ctx_put(struct iommufd_ctx *ictx)
 {
 }
 
+static inline bool iommufd_ctx_has_group(struct iommufd_ctx *ictx,
+					 struct iommu_group *group)
+{
+	return false;
+}
+
 static inline int iommufd_access_pin_pages(struct iommufd_access *access,
 					   unsigned long iova,
 					   unsigned long length,
-- 
2.34.1


  parent reply	other threads:[~2023-06-02 12:15 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-02 12:15 [PATCH v7 0/9] Enhance vfio PCI hot reset for vfio cdev device Yi Liu
2023-06-02 12:15 ` [Intel-gfx] " Yi Liu
2023-06-02 12:15 ` [PATCH v7 1/9] vfio/pci: Update comment around group_fd get in vfio_pci_ioctl_pci_hot_reset() Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-02 12:15 ` [PATCH v7 2/9] vfio/pci: Move the existing hot reset logic to be a helper Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-02 12:15 ` [PATCH v7 3/9] iommufd: Reserve all negative IDs in the iommufd xarray Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-13 11:46   ` Jason Gunthorpe
2023-06-13 11:46     ` [Intel-gfx] " Jason Gunthorpe
2023-06-02 12:15 ` Yi Liu [this message]
2023-06-02 12:15   ` [Intel-gfx] [PATCH v7 4/9] iommufd: Add iommufd_ctx_has_group() Yi Liu
2023-06-08 21:40   ` Alex Williamson
2023-06-08 21:40     ` Alex Williamson
2023-06-08 23:44     ` Liu, Yi L
2023-06-08 23:44       ` [Intel-gfx] " Liu, Yi L
2023-06-13 11:46   ` Jason Gunthorpe
2023-06-13 11:46     ` [Intel-gfx] " Jason Gunthorpe
2023-06-02 12:15 ` [PATCH v7 5/9] iommufd: Add helper to retrieve iommufd_ctx and devid Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-13 11:47   ` Jason Gunthorpe
2023-06-13 11:47     ` [Intel-gfx] " Jason Gunthorpe
2023-06-02 12:15 ` [PATCH v7 6/9] vfio: Mark cdev usage in vfio_device Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-13 17:56   ` Jason Gunthorpe
2023-06-13 17:56     ` [Intel-gfx] " Jason Gunthorpe
2023-06-14  5:56     ` Liu, Yi L
2023-06-14  5:56       ` [Intel-gfx] " Liu, Yi L
2023-06-14 12:11       ` Jason Gunthorpe
2023-06-14 12:11         ` [Intel-gfx] " Jason Gunthorpe
2023-06-02 12:15 ` [PATCH v7 7/9] vfio: Add helper to search vfio_device in a dev_set Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-13 11:47   ` Jason Gunthorpe
2023-06-13 11:47     ` Jason Gunthorpe
2023-06-02 12:15 ` [PATCH v7 8/9] vfio/pci: Extend VFIO_DEVICE_GET_PCI_HOT_RESET_INFO for vfio device cdev Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-08 22:26   ` Alex Williamson
2023-06-08 22:26     ` Alex Williamson
2023-06-09  0:04     ` Liu, Yi L
2023-06-09  0:04       ` [Intel-gfx] " Liu, Yi L
2023-06-13 11:46   ` Jason Gunthorpe
2023-06-13 11:46     ` [Intel-gfx] " Jason Gunthorpe
2023-06-13 12:50     ` Liu, Yi L
2023-06-13 12:50       ` [Intel-gfx] " Liu, Yi L
2023-06-13 14:32       ` Alex Williamson
2023-06-13 14:32         ` Alex Williamson
2023-06-13 17:40         ` Jason Gunthorpe
2023-06-13 17:40           ` [Intel-gfx] " Jason Gunthorpe
2023-06-13 18:23   ` Jason Gunthorpe
2023-06-13 18:23     ` [Intel-gfx] " Jason Gunthorpe
2023-06-14 10:35     ` Liu, Yi L
2023-06-14 10:35       ` [Intel-gfx] " Liu, Yi L
2023-06-14 12:17       ` Jason Gunthorpe
2023-06-14 12:17         ` [Intel-gfx] " Jason Gunthorpe
2023-06-14 13:05         ` Liu, Yi L
2023-06-14 13:05           ` [Intel-gfx] " Liu, Yi L
2023-06-14 13:37           ` Jason Gunthorpe
2023-06-14 13:37             ` [Intel-gfx] " Jason Gunthorpe
2023-06-15  3:31             ` Liu, Yi L
2023-06-15  3:31               ` Liu, Yi L
2023-06-02 12:15 ` [PATCH v7 9/9] vfio/pci: Allow passing zero-length fd array in VFIO_DEVICE_PCI_HOT_RESET Yi Liu
2023-06-02 12:15   ` [Intel-gfx] " Yi Liu
2023-06-08 22:30   ` Alex Williamson
2023-06-08 22:30     ` Alex Williamson
2023-06-09  0:13     ` Liu, Yi L
2023-06-09  0:13       ` [Intel-gfx] " Liu, Yi L
2023-06-09 14:38       ` Jason Gunthorpe
2023-06-09 14:38         ` [Intel-gfx] " Jason Gunthorpe
2023-06-13 18:09   ` Jason Gunthorpe
2023-06-13 18:09     ` [Intel-gfx] " Jason Gunthorpe
2023-06-02 15:14 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Enhance vfio PCI hot reset for vfio cdev device (rev5) Patchwork
2023-06-02 15:29 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-06-04 20:05 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2023-06-08  6:59 ` [PATCH v7 0/9] Enhance vfio PCI hot reset for vfio cdev device Jiang, Yanting
2023-06-08  6:59   ` [Intel-gfx] " Jiang, Yanting
2023-06-13 20:47 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Enhance vfio PCI hot reset for vfio cdev device (rev6) Patchwork
2023-06-14 15:47 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Enhance vfio PCI hot reset for vfio cdev device (rev7) Patchwork

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=20230602121515.79374-5-yi.l.liu@intel.com \
    --to=yi.l.liu@intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=clegoate@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=lulu@redhat.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=terrence.xu@intel.com \
    --cc=xudong.hao@intel.com \
    --cc=yan.y.zhao@intel.com \
    --cc=yanting.jiang@intel.com \
    --cc=yi.y.sun@linux.intel.com \
    --cc=zhenzhong.duan@intel.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.