kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Liu Yi L <yi.l.liu@intel.com>
To: alex.williamson@redhat.com, jgg@nvidia.com, hch@lst.de,
	jasowang@redhat.com, joro@8bytes.org
Cc: jean-philippe@linaro.org, kevin.tian@intel.com,
	parav@mellanox.com, lkml@metux.net, pbonzini@redhat.com,
	lushenming@huawei.com, eric.auger@redhat.com, corbet@lwn.net,
	ashok.raj@intel.com, yi.l.liu@intel.com,
	yi.l.liu@linux.intel.com, jun.j.tian@intel.com, hao.wu@intel.com,
	dave.jiang@intel.com, jacob.jun.pan@linux.intel.com,
	kwankhede@nvidia.com, robin.murphy@arm.com, kvm@vger.kernel.org,
	iommu@lists.linux-foundation.org, dwmw2@infradead.org,
	linux-kernel@vger.kernel.org, baolu.lu@linux.intel.com,
	david@gibson.dropbear.id.au, nicolinc@nvidia.com
Subject: [RFC 02/20] vfio: Add device class for /dev/vfio/devices
Date: Sun, 19 Sep 2021 14:38:30 +0800	[thread overview]
Message-ID: <20210919063848.1476776-3-yi.l.liu@intel.com> (raw)
In-Reply-To: <20210919063848.1476776-1-yi.l.liu@intel.com>

This patch introduces a new interface (/dev/vfio/devices/$DEVICE) for
userspace to directly open a vfio device w/o relying on container/group
(/dev/vfio/$GROUP). Anything related to group is now hidden behind
iommufd (more specifically in iommu core by this RFC) in a device-centric
manner.

In case a device is exposed in both legacy and new interfaces (see next
patch for how to decide it), this patch also ensures that when the device
is already opened via one interface then the other one must be blocked.

Signed-off-by: Liu Yi L <yi.l.liu@intel.com>
---
 drivers/vfio/vfio.c  | 228 +++++++++++++++++++++++++++++++++++++++----
 include/linux/vfio.h |   2 +
 2 files changed, 213 insertions(+), 17 deletions(-)

diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
index 02cc51ce6891..84436d7abedd 100644
--- a/drivers/vfio/vfio.c
+++ b/drivers/vfio/vfio.c
@@ -46,6 +46,12 @@ static struct vfio {
 	struct mutex			group_lock;
 	struct cdev			group_cdev;
 	dev_t				group_devt;
+	/* Fields for /dev/vfio/devices interface */
+	struct class			*device_class;
+	struct cdev			device_cdev;
+	dev_t				device_devt;
+	struct mutex			device_lock;
+	struct idr			device_idr;
 } vfio;
 
 struct vfio_iommu_driver {
@@ -81,9 +87,11 @@ struct vfio_group {
 	struct list_head		container_next;
 	struct list_head		unbound_list;
 	struct mutex			unbound_lock;
-	atomic_t			opened;
-	wait_queue_head_t		container_q;
+	struct mutex			opened_lock;
+	u32				opened;
+	bool				opened_by_nongroup_dev;
 	bool				noiommu;
+	wait_queue_head_t		container_q;
 	unsigned int			dev_counter;
 	struct kvm			*kvm;
 	struct blocking_notifier_head	notifier;
@@ -327,7 +335,7 @@ static struct vfio_group *vfio_create_group(struct iommu_group *iommu_group)
 	INIT_LIST_HEAD(&group->unbound_list);
 	mutex_init(&group->unbound_lock);
 	atomic_set(&group->container_users, 0);
-	atomic_set(&group->opened, 0);
+	mutex_init(&group->opened_lock);
 	init_waitqueue_head(&group->container_q);
 	group->iommu_group = iommu_group;
 #ifdef CONFIG_VFIO_NOIOMMU
@@ -1489,10 +1497,53 @@ static long vfio_group_fops_unl_ioctl(struct file *filep,
 	return ret;
 }
 
+/*
+ * group->opened is used to ensure that the group can be opened only via
+ * one of the two interfaces (/dev/vfio/$GROUP and /dev/vfio/devices/
+ * $DEVICE) instead of both.
+ *
+ * We also introduce a new group flag to indicate whether this group is
+ * opened via /dev/vfio/devices/$DEVICE. For multi-devices group,
+ * group->opened also tracks how many devices have been opened in the
+ * group if the new flag is true.
+ *
+ * Also add a new lock since two flags are operated here.
+ */
+static int vfio_group_try_open(struct vfio_group *group, bool nongroup_dev)
+{
+	int ret = 0;
+
+	mutex_lock(&group->opened_lock);
+	if (group->opened) {
+		if (nongroup_dev && group->opened_by_nongroup_dev)
+			group->opened++;
+		else
+			ret = -EBUSY;
+		goto out;
+	}
+
+	/*
+	 * Is something still in use from a previous open? Should
+	 * not allow new open if it is such case.
+	 */
+	if (group->container) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	group->opened = 1;
+	group->opened_by_nongroup_dev = nongroup_dev;
+
+out:
+	mutex_unlock(&group->opened_lock);
+
+	return ret;
+}
+
 static int vfio_group_fops_open(struct inode *inode, struct file *filep)
 {
 	struct vfio_group *group;
-	int opened;
+	int ret;
 
 	group = vfio_group_get_from_minor(iminor(inode));
 	if (!group)
@@ -1503,18 +1554,10 @@ static int vfio_group_fops_open(struct inode *inode, struct file *filep)
 		return -EPERM;
 	}
 
-	/* Do we need multiple instances of the group open?  Seems not. */
-	opened = atomic_cmpxchg(&group->opened, 0, 1);
-	if (opened) {
-		vfio_group_put(group);
-		return -EBUSY;
-	}
-
-	/* Is something still in use from a previous open? */
-	if (group->container) {
-		atomic_dec(&group->opened);
+	ret = vfio_group_try_open(group, false);
+	if (ret) {
 		vfio_group_put(group);
-		return -EBUSY;
+		return ret;
 	}
 
 	/* Warn if previous user didn't cleanup and re-init to drop them */
@@ -1534,7 +1577,9 @@ static int vfio_group_fops_release(struct inode *inode, struct file *filep)
 
 	vfio_group_try_dissolve_container(group);
 
-	atomic_dec(&group->opened);
+	mutex_lock(&group->opened_lock);
+	group->opened--;
+	mutex_unlock(&group->opened_lock);
 
 	vfio_group_put(group);
 
@@ -1552,6 +1597,92 @@ static const struct file_operations vfio_group_fops = {
 /**
  * VFIO Device fd
  */
+static struct vfio_device *vfio_device_get_from_minor(int minor)
+{
+	struct vfio_device *device;
+
+	mutex_lock(&vfio.device_lock);
+	device = idr_find(&vfio.device_idr, minor);
+	if (!device || !vfio_device_try_get(device)) {
+		mutex_unlock(&vfio.device_lock);
+		return NULL;
+	}
+	mutex_unlock(&vfio.device_lock);
+
+	return device;
+}
+
+static int vfio_device_fops_open(struct inode *inode, struct file *filep)
+{
+	struct vfio_device *device;
+	struct vfio_group *group;
+	int ret, opened;
+
+	device = vfio_device_get_from_minor(iminor(inode));
+	if (!device)
+		return -ENODEV;
+
+	/*
+	 * Check whether the user has opened this device via the legacy
+	 * container/group interface. If yes, then prevent the user from
+	 * opening it via device node in /dev/vfio/devices. Otherwise,
+	 * mark the group as opened to block the group interface. either
+	 * way, we must ensure only one interface is used to open the
+	 * device when it supports both legacy and new interfaces.
+	 */
+	group = vfio_group_try_get(device->group);
+	if (group) {
+		ret = vfio_group_try_open(group, true);
+		if (ret)
+			goto err_group_try_open;
+	}
+
+	/*
+	 * No support of multiple instances of the device open, similar to
+	 * the policy on the group open.
+	 */
+	opened = atomic_cmpxchg(&device->opened, 0, 1);
+	if (opened) {
+		ret = -EBUSY;
+		goto err_device_try_open;
+	}
+
+	if (!try_module_get(device->dev->driver->owner)) {
+		ret = -ENODEV;
+		goto err_module_get;
+	}
+
+	ret = device->ops->open(device);
+	if (ret)
+		goto err_device_open;
+
+	filep->private_data = device;
+
+	if (group)
+		vfio_group_put(group);
+	return 0;
+err_device_open:
+	module_put(device->dev->driver->owner);
+err_module_get:
+	atomic_dec(&device->opened);
+err_device_try_open:
+	if (group) {
+		mutex_lock(&group->opened_lock);
+		group->opened--;
+		mutex_unlock(&group->opened_lock);
+	}
+err_group_try_open:
+	if (group)
+		vfio_group_put(group);
+	vfio_device_put(device);
+	return ret;
+}
+
+static bool vfio_device_in_container(struct vfio_device *device)
+{
+	return !!(device->group && device->group->container);
+}
+
 static int vfio_device_fops_release(struct inode *inode, struct file *filep)
 {
 	struct vfio_device *device = filep->private_data;
@@ -1560,7 +1691,16 @@ static int vfio_device_fops_release(struct inode *inode, struct file *filep)
 
 	module_put(device->dev->driver->owner);
 
-	vfio_group_try_dissolve_container(device->group);
+	if (vfio_device_in_container(device)) {
+		vfio_group_try_dissolve_container(device->group);
+	} else {
+		atomic_dec(&device->opened);
+		if (device->group) {
+			mutex_lock(&device->group->opened_lock);
+			device->group->opened--;
+			mutex_unlock(&device->group->opened_lock);
+		}
+	}
 
 	vfio_device_put(device);
 
@@ -1613,6 +1753,7 @@ static int vfio_device_fops_mmap(struct file *filep, struct vm_area_struct *vma)
 
 static const struct file_operations vfio_device_fops = {
 	.owner		= THIS_MODULE,
+	.open		= vfio_device_fops_open,
 	.release	= vfio_device_fops_release,
 	.read		= vfio_device_fops_read,
 	.write		= vfio_device_fops_write,
@@ -2295,6 +2436,52 @@ static struct miscdevice vfio_dev = {
 	.mode = S_IRUGO | S_IWUGO,
 };
 
+static char *vfio_device_devnode(struct device *dev, umode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, "vfio/devices/%s", dev_name(dev));
+}
+
+static int vfio_init_device_class(void)
+{
+	int ret;
+
+	mutex_init(&vfio.device_lock);
+	idr_init(&vfio.device_idr);
+
+	/* /dev/vfio/devices/$DEVICE */
+	vfio.device_class = class_create(THIS_MODULE, "vfio-device");
+	if (IS_ERR(vfio.device_class))
+		return PTR_ERR(vfio.device_class);
+
+	vfio.device_class->devnode = vfio_device_devnode;
+
+	ret = alloc_chrdev_region(&vfio.device_devt, 0, MINORMASK + 1, "vfio-device");
+	if (ret)
+		goto err_alloc_chrdev;
+
+	cdev_init(&vfio.device_cdev, &vfio_device_fops);
+	ret = cdev_add(&vfio.device_cdev, vfio.device_devt, MINORMASK + 1);
+	if (ret)
+		goto err_cdev_add;
+	return 0;
+
+err_cdev_add:
+	unregister_chrdev_region(vfio.device_devt, MINORMASK + 1);
+err_alloc_chrdev:
+	class_destroy(vfio.device_class);
+	vfio.device_class = NULL;
+	return ret;
+}
+
+static void vfio_destroy_device_class(void)
+{
+	cdev_del(&vfio.device_cdev);
+	unregister_chrdev_region(vfio.device_devt, MINORMASK + 1);
+	class_destroy(vfio.device_class);
+	vfio.device_class = NULL;
+	idr_destroy(&vfio.device_idr);
+}
+
 static int __init vfio_init(void)
 {
 	int ret;
@@ -2329,6 +2516,10 @@ static int __init vfio_init(void)
 	if (ret)
 		goto err_cdev_add;
 
+	ret = vfio_init_device_class();
+	if (ret)
+		goto err_init_device_class;
+
 	pr_info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
 
 #ifdef CONFIG_VFIO_NOIOMMU
@@ -2336,6 +2527,8 @@ static int __init vfio_init(void)
 #endif
 	return 0;
 
+err_init_device_class:
+	cdev_del(&vfio.group_cdev);
 err_cdev_add:
 	unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
 err_alloc_chrdev:
@@ -2358,6 +2551,7 @@ static void __exit vfio_cleanup(void)
 	unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
 	class_destroy(vfio.class);
 	vfio.class = NULL;
+	vfio_destroy_device_class();
 	misc_deregister(&vfio_dev);
 }
 
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index a2c5b30e1763..4a5f3f99eab2 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -24,6 +24,8 @@ struct vfio_device {
 	refcount_t refcount;
 	struct completion comp;
 	struct list_head group_next;
+	int minor;
+	atomic_t opened;
 };
 
 /**
-- 
2.25.1


  parent reply	other threads:[~2021-09-19  6:41 UTC|newest]

Thread overview: 280+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-19  6:38 [RFC 00/20] Introduce /dev/iommu for userspace I/O address space management Liu Yi L
2021-09-19  6:38 ` [RFC 01/20] iommu/iommufd: Add /dev/iommu core Liu Yi L
2021-09-21 15:41   ` Jason Gunthorpe
2021-09-22  1:51     ` Tian, Kevin
2021-09-22 12:40       ` Jason Gunthorpe
2021-09-22 13:59         ` Tian, Kevin
2021-09-22 14:10           ` Jason Gunthorpe
2021-10-15  9:18     ` Liu, Yi L
2021-10-15 11:18       ` Jason Gunthorpe
2021-10-15 11:29         ` Liu, Yi L
2021-10-19 16:57         ` Jacob Pan
2021-10-19 16:57           ` Jason Gunthorpe
2021-10-19 17:11             ` Jacob Pan
2021-10-19 17:12               ` Jason Gunthorpe
2021-09-19  6:38 ` Liu Yi L [this message]
2021-09-21 15:57   ` [RFC 02/20] vfio: Add device class for /dev/vfio/devices Jason Gunthorpe
2021-09-21 23:56     ` Tian, Kevin
2021-09-22  0:55       ` Jason Gunthorpe
2021-09-22  1:07         ` Tian, Kevin
2021-09-22 12:31           ` Jason Gunthorpe
2021-09-22  3:22         ` Tian, Kevin
2021-09-22 12:50           ` Jason Gunthorpe
2021-09-22 14:09             ` Tian, Kevin
2021-09-21 19:56   ` Alex Williamson
2021-09-22  0:56     ` Tian, Kevin
2021-09-29  2:08   ` David Gibson
2021-09-29 19:05     ` Alex Williamson
2021-09-30  2:43       ` David Gibson
2021-10-20 12:39     ` Liu, Yi L
2021-09-19  6:38 ` [RFC 03/20] vfio: Add vfio_[un]register_device() Liu Yi L
2021-09-21 16:01   ` Jason Gunthorpe
2021-09-21 23:10     ` Tian, Kevin
2021-09-22  0:53       ` Jason Gunthorpe
2021-09-22  0:59         ` Tian, Kevin
2021-09-22  9:23         ` Tian, Kevin
2021-09-22 12:22           ` Jason Gunthorpe
2021-09-22 13:44             ` Tian, Kevin
2021-09-22 20:10             ` Alex Williamson
2021-09-22 22:34               ` Tian, Kevin
2021-09-22 22:45                 ` Alex Williamson
2021-09-22 23:45                   ` Tian, Kevin
2021-09-22 23:52                     ` Jason Gunthorpe
2021-09-23  0:38                       ` Tian, Kevin
2021-09-22 23:56               ` Jason Gunthorpe
2021-09-22  0:54     ` Tian, Kevin
2021-09-22  1:00       ` Jason Gunthorpe
2021-09-22  1:02         ` Tian, Kevin
2021-09-23  7:25         ` Eric Auger
2021-09-23 11:44           ` Jason Gunthorpe
2021-09-29  2:46         ` david
2021-09-29 12:22           ` Jason Gunthorpe
2021-09-30  2:48             ` david
2021-09-29  2:43   ` David Gibson
2021-09-29  3:40     ` Tian, Kevin
2021-09-29  5:30     ` Tian, Kevin
2021-09-29  7:08       ` Cornelia Huck
2021-09-29 12:15         ` Jason Gunthorpe
2021-09-19  6:38 ` [RFC 04/20] iommu: Add iommu_device_get_info interface Liu Yi L
2021-09-21 16:19   ` Jason Gunthorpe
2021-09-22  2:31     ` Lu Baolu
2021-09-22  5:07       ` Christoph Hellwig
2021-09-29  2:52   ` David Gibson
2021-09-29  9:25     ` Lu Baolu
2021-09-29  9:29       ` Lu Baolu
2021-09-19  6:38 ` [RFC 05/20] vfio/pci: Register device to /dev/vfio/devices Liu Yi L
2021-09-21 16:40   ` Jason Gunthorpe
2021-09-21 21:09     ` Alex Williamson
2021-09-21 21:58       ` Jason Gunthorpe
2021-09-22  1:24         ` Tian, Kevin
2021-09-22  1:19       ` Tian, Kevin
2021-09-22 21:17         ` Alex Williamson
2021-09-22 23:49           ` Tian, Kevin
2021-09-19  6:38 ` [RFC 06/20] iommu: Add iommu_device_init[exit]_user_dma interfaces Liu Yi L
2021-09-21 17:09   ` Jason Gunthorpe
2021-09-22  1:47     ` Tian, Kevin
2021-09-22 12:39       ` Jason Gunthorpe
2021-09-22 13:56         ` Tian, Kevin
2021-09-27  9:42         ` Tian, Kevin
2021-09-27 11:34           ` Lu Baolu
2021-09-27 13:08             ` Tian, Kevin
2021-09-27 11:53           ` Jason Gunthorpe
2021-09-27 13:00             ` Tian, Kevin
2021-09-27 13:09               ` Jason Gunthorpe
2021-09-27 13:32                 ` Tian, Kevin
2021-09-27 14:39                   ` Jason Gunthorpe
2021-09-28  7:13                     ` Tian, Kevin
2021-09-28 11:54                       ` Jason Gunthorpe
2021-09-28 23:59                         ` Tian, Kevin
2021-09-27 19:19                   ` Alex Williamson
2021-09-28  7:43                     ` Tian, Kevin
2021-09-28 16:26                       ` Alex Williamson
2021-09-27 15:09           ` Jason Gunthorpe
2021-09-28  7:30             ` Tian, Kevin
2021-09-28 11:57               ` Jason Gunthorpe
2021-09-28 13:35                 ` Lu Baolu
2021-09-28 14:07                   ` Jason Gunthorpe
2021-09-29  0:38                     ` Tian, Kevin
2021-09-29 12:59                       ` Jason Gunthorpe
2021-10-15  1:29                         ` Tian, Kevin
2021-10-15 11:09                           ` Jason Gunthorpe
2021-10-18  1:52                             ` Tian, Kevin
2021-09-29  2:22                     ` Lu Baolu
2021-09-29  2:29                       ` Tian, Kevin
2021-09-29  2:38                         ` Lu Baolu
2021-09-29  4:55   ` David Gibson
2021-09-29  5:38     ` Tian, Kevin
2021-09-29  6:35       ` David Gibson
2021-09-29  7:31         ` Tian, Kevin
2021-09-30  3:05           ` David Gibson
2021-09-29 12:57         ` Jason Gunthorpe
2021-09-30  3:09           ` David Gibson
2021-09-30 22:28             ` Jason Gunthorpe
2021-10-01  3:54               ` David Gibson
2021-09-19  6:38 ` [RFC 07/20] iommu/iommufd: Add iommufd_[un]bind_device() Liu Yi L
2021-09-21 17:14   ` Jason Gunthorpe
2021-10-15  9:21     ` Liu, Yi L
2021-09-29  5:25   ` David Gibson
2021-09-29 12:24     ` Jason Gunthorpe
2021-09-30  3:10       ` David Gibson
2021-10-01 12:43         ` Jason Gunthorpe
2021-10-07  1:23           ` David Gibson
2021-10-07 11:35             ` Jason Gunthorpe
2021-10-11  3:24               ` David Gibson
2021-09-19  6:38 ` [RFC 08/20] vfio/pci: Add VFIO_DEVICE_BIND_IOMMUFD Liu Yi L
2021-09-21 17:29   ` Jason Gunthorpe
2021-09-22 21:01     ` Alex Williamson
2021-09-22 23:01       ` Jason Gunthorpe
2021-09-29  6:00   ` David Gibson
2021-09-29  6:41     ` Tian, Kevin
2021-09-29 12:28       ` Jason Gunthorpe
2021-09-29 22:34         ` Tian, Kevin
2021-09-30  3:12       ` David Gibson
2021-09-19  6:38 ` [RFC 09/20] iommu: Add page size and address width attributes Liu Yi L
2021-09-22 13:42   ` Eric Auger
2021-09-22 14:19     ` Tian, Kevin
2021-09-19  6:38 ` [RFC 10/20] iommu/iommufd: Add IOMMU_DEVICE_GET_INFO Liu Yi L
2021-09-21 17:40   ` Jason Gunthorpe
2021-09-22  3:30     ` Tian, Kevin
2021-09-22 12:41       ` Jason Gunthorpe
2021-09-29  6:18         ` david
2021-09-22 21:24   ` Alex Williamson
2021-09-22 23:49     ` Jason Gunthorpe
2021-09-23  3:10       ` Tian, Kevin
2021-09-23 10:15         ` Jean-Philippe Brucker
2021-09-23 11:27           ` Jason Gunthorpe
2021-09-23 12:05             ` Tian, Kevin
2021-09-23 12:22               ` Jason Gunthorpe
2021-09-29  8:48                 ` Tian, Kevin
2021-09-29 12:36                   ` Jason Gunthorpe
2021-09-30  8:30                     ` Tian, Kevin
2021-09-30 10:33                       ` Jean-Philippe Brucker
2021-09-30 22:04                         ` Jason Gunthorpe
2021-10-01  3:28                           ` hch
2021-10-14  8:13                             ` Tian, Kevin
2021-10-14  8:22                               ` hch
2021-10-14  8:29                                 ` Tian, Kevin
2021-10-14  8:01                         ` Tian, Kevin
2021-10-14  9:16                           ` Jean-Philippe Brucker
2021-09-30  8:49                 ` Tian, Kevin
2021-09-30 13:43                   ` Lu Baolu
2021-10-01  3:24                     ` hch
2021-09-30 22:08                   ` Jason Gunthorpe
2021-09-23 11:36         ` Jason Gunthorpe
     [not found]       ` <BN9PR11MB5433409DF766AAEF1BB2CF258CA39@BN9PR11MB5433.namprd11.prod.outlook.com>
2021-09-23  3:38         ` Tian, Kevin
2021-09-23 11:42           ` Jason Gunthorpe
2021-09-30  9:35             ` Tian, Kevin
2021-09-30 22:23               ` Jason Gunthorpe
2021-10-01  3:30                 ` hch
2021-10-14  9:11                 ` Tian, Kevin
2021-10-14 15:42                   ` Jason Gunthorpe
2021-10-15  1:01                     ` Tian, Kevin
     [not found]                     ` <BN9PR11MB543327BB6D58AEF91AD2C9D18CB99@BN9PR11MB5433.namprd11.prod.outlook.com>
2021-10-21  2:26                       ` Tian, Kevin
2021-10-21 14:58                         ` Jean-Philippe Brucker
2021-10-21 23:22                           ` Jason Gunthorpe
2021-10-22  7:49                             ` Jean-Philippe Brucker
2021-10-25 16:51                               ` Jason Gunthorpe
2021-10-21 23:30                         ` Jason Gunthorpe
2021-10-22  3:08                           ` Tian, Kevin
2021-10-25 23:34                             ` Jason Gunthorpe
2021-10-27  1:42                               ` Tian, Kevin
2021-10-28  2:07                               ` Tian, Kevin
2021-10-29 13:55                                 ` Jason Gunthorpe
2021-09-29  6:23   ` David Gibson
2021-09-19  6:38 ` [RFC 11/20] iommu/iommufd: Add IOMMU_IOASID_ALLOC/FREE Liu Yi L
2021-09-21 17:44   ` Jason Gunthorpe
2021-09-22  3:40     ` Tian, Kevin
2021-09-22 14:09       ` Jason Gunthorpe
2021-09-23  9:14         ` Tian, Kevin
2021-09-23 12:06           ` Jason Gunthorpe
2021-09-23 12:22             ` Tian, Kevin
2021-09-23 12:31               ` Jason Gunthorpe
2021-09-23 12:45                 ` Tian, Kevin
2021-09-23 13:01                   ` Jason Gunthorpe
2021-09-23 13:20                     ` Tian, Kevin
2021-09-23 13:30                       ` Jason Gunthorpe
2021-09-23 13:41                         ` Tian, Kevin
2021-10-01  6:30               ` david
2021-10-01  6:26           ` david
2021-10-01  6:19         ` david
2021-10-01 12:25           ` Jason Gunthorpe
2021-10-02  4:21             ` david
2021-10-02 12:25               ` Jason Gunthorpe
2021-10-11  5:37                 ` david
2021-10-11 17:17                   ` Jason Gunthorpe
2021-10-14  4:33                     ` david
2021-10-14 15:06                       ` Jason Gunthorpe
2021-10-18  3:40                         ` david
2021-10-01  6:15       ` david
2021-09-22 12:51     ` Liu, Yi L
2021-09-22 13:32       ` Jason Gunthorpe
2021-09-23  6:26         ` Liu, Yi L
2021-10-01  6:13     ` David Gibson
2021-10-01 12:22       ` Jason Gunthorpe
2021-10-11  6:02         ` David Gibson
2021-10-11  8:49           ` Jean-Philippe Brucker
2021-10-11 23:38             ` Jason Gunthorpe
2021-10-12  8:33               ` Jean-Philippe Brucker
2021-10-13  7:14                 ` Tian, Kevin
2021-10-13  7:07             ` Tian, Kevin
2021-10-14  4:38             ` David Gibson
2021-10-11 18:49           ` Jason Gunthorpe
2021-10-14  4:53             ` David Gibson
2021-10-14 14:52               ` Jason Gunthorpe
2021-10-18  3:50                 ` David Gibson
2021-10-18 17:42                   ` Jason Gunthorpe
2021-09-22 13:45   ` Jean-Philippe Brucker
2021-09-29 10:47     ` Liu, Yi L
2021-10-01  6:11   ` David Gibson
2021-10-13  7:00     ` Tian, Kevin
2021-10-14  5:00       ` David Gibson
2021-10-14  6:53         ` Tian, Kevin
2021-10-25  5:05           ` David Gibson
2021-10-27  2:32             ` Tian, Kevin
2021-09-19  6:38 ` [RFC 12/20] iommu/iommufd: Add IOMMU_CHECK_EXTENSION Liu Yi L
2021-09-21 17:47   ` Jason Gunthorpe
2021-09-22  3:41     ` Tian, Kevin
2021-09-22 12:55       ` Jason Gunthorpe
2021-09-22 14:13         ` Tian, Kevin
2021-09-19  6:38 ` [RFC 13/20] iommu: Extend iommu_at[de]tach_device() for multiple devices group Liu Yi L
2021-10-14  5:24   ` David Gibson
2021-10-14  7:06     ` Tian, Kevin
2021-10-18  3:57       ` David Gibson
2021-10-18 16:32         ` Jason Gunthorpe
2021-10-25  5:14           ` David Gibson
2021-10-25 12:14             ` Jason Gunthorpe
2021-10-25 13:16               ` David Gibson
2021-10-25 23:36                 ` Jason Gunthorpe
2021-10-26  9:23                   ` David Gibson
2021-09-19  6:38 ` [RFC 14/20] iommu/iommufd: Add iommufd_device_[de]attach_ioasid() Liu Yi L
2021-09-21 18:02   ` Jason Gunthorpe
2021-09-22  3:53     ` Tian, Kevin
2021-09-22 12:57       ` Jason Gunthorpe
2021-09-22 14:16         ` Tian, Kevin
2021-09-19  6:38 ` [RFC 15/20] vfio/pci: Add VFIO_DEVICE_[DE]ATTACH_IOASID Liu Yi L
2021-09-21 18:04   ` Jason Gunthorpe
2021-09-22  3:56     ` Tian, Kevin
2021-09-22 12:58       ` Jason Gunthorpe
2021-09-22 14:17         ` Tian, Kevin
2021-09-19  6:38 ` [RFC 16/20] vfio/type1: Export symbols for dma [un]map code sharing Liu Yi L
2021-09-21 18:14   ` Jason Gunthorpe
2021-09-22  3:57     ` Tian, Kevin
2021-09-19  6:38 ` [RFC 17/20] iommu/iommufd: Report iova range to userspace Liu Yi L
2021-09-22 14:49   ` Jean-Philippe Brucker
2021-09-29 10:44     ` Liu, Yi L
2021-09-29 12:07       ` Jean-Philippe Brucker
2021-09-29 12:31         ` Jason Gunthorpe
2021-09-19  6:38 ` [RFC 18/20] iommu/iommufd: Add IOMMU_[UN]MAP_DMA on IOASID Liu Yi L
2021-09-19  6:38 ` [RFC 19/20] iommu/vt-d: Implement device_info iommu_ops callback Liu Yi L
2021-09-19  6:38 ` [RFC 20/20] Doc: Add documentation for /dev/iommu Liu Yi L
2021-10-29  0:15   ` David Gibson
2021-10-29 12:44     ` Jason Gunthorpe
2021-09-19  6:45 ` [RFC 00/20] Introduce /dev/iommu for userspace I/O address space management Liu, Yi L
2021-09-21 13:45 ` Jason Gunthorpe
2021-09-22  3:25   ` Liu, Yi L
     [not found] <PH0PR11MB56583D477B3977D92C2C1ADDC3839@PH0PR11MB5658.namprd11.prod.outlook.com>
2021-10-25 12:53 ` [RFC 02/20] vfio: Add device class for /dev/vfio/devices Jason Gunthorpe
2021-10-29  9:47   ` Liu, Yi L
2021-11-01 12:50     ` Jason Gunthorpe
2021-11-02  9:53       ` Liu, Yi L
2021-11-03 13:25         ` Jason Gunthorpe
2021-11-11 12:32           ` Liu, Yi L

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=20210919063848.1476776-3-yi.l.liu@intel.com \
    --to=yi.l.liu@intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=ashok.raj@intel.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=corbet@lwn.net \
    --cc=dave.jiang@intel.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=dwmw2@infradead.org \
    --cc=eric.auger@redhat.com \
    --cc=hao.wu@intel.com \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=jasowang@redhat.com \
    --cc=jean-philippe@linaro.org \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=jun.j.tian@intel.com \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkml@metux.net \
    --cc=lushenming@huawei.com \
    --cc=nicolinc@nvidia.com \
    --cc=parav@mellanox.com \
    --cc=pbonzini@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=yi.l.liu@linux.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 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).