All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/15] Add vfio_device cdev for iommufd support
@ 2023-02-13 15:13 ` Yi Liu
  0 siblings, 0 replies; 135+ messages in thread
From: Yi Liu @ 2023-02-13 15:13 UTC (permalink / raw)
  To: joro, alex.williamson, jgg, kevin.tian, robin.murphy
  Cc: cohuck, eric.auger, nicolinc, kvm, mjrosato, chao.p.peng,
	yi.l.liu, yi.y.sun, peterx, jasowang, shameerali.kolothum.thodi,
	lulu, suravee.suthikulpanit, intel-gvt-dev, intel-gfx,
	linux-s390

Existing VFIO provides group-centric user APIs for userspace. Userspace
opens the /dev/vfio/$group_id first before getting device fd and hence
getting access to device. This is not the desired model for iommufd. Per
the conclusion of community discussion[1], iommufd provides device-centric
kAPIs and requires its consumer (like VFIO) to be device-centric user
APIs. Such user APIs are used to associate device with iommufd and also
the I/O address spaces managed by the iommufd.

This series first introduces a per device file structure to be prepared
for further enhancement and refactors the kvm-vfio code to be prepared
for accepting device file from userspace. Then refactors the vfio to be
able to handle iommufd binding. This refactor includes the mechanism of
blocking device access before iommufd bind, making vfio_device_open() be
exclusive between the group path and the cdev path. Eventually, adds the
cdev support for vfio device, and makes group infrastructure optional as
it is not needed when vfio device cdev is compiled.

This is also a prerequisite for iommu nesting for vfio device[2].

The complete code can be found in below branch, simple test done with the
legacy group path and the cdev path. Draft QEMU branch can be found at[3]

https://github.com/yiliu1765/iommufd/tree/vfio_device_cdev_v3
(config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y)

base-commit: 06a24ad

[1] https://lore.kernel.org/kvm/BN9PR11MB5433B1E4AE5B0480369F97178C189@BN9PR11MB5433.namprd11.prod.outlook.com/
[2] https://lore.kernel.org/linux-iommu/20230209043153.14964-1-yi.l.liu@intel.com/
[3] https://github.com/yiliu1765/qemu/tree/iommufd_rfcv3 (it is based on Eric's
    QEMU iommufd rfcv3 (https://lore.kernel.org/kvm/20230131205305.2726330-1-eric.auger@redhat.com/)
    plus two commits to align with vfio_device_cdev v3)

Change log:

v3:
 - Add r-b from Kevin on patch 03, 06, 07, 08.
 - Refine the group and cdev path exclusion. Remove vfio_device:single_open;
   add vfio_group::cdev_device_open_cnt to achieve exlucsion between group
   path and cdev path (Kevin, Jason)
 - Fix a bug in the error handling path (Yan Zhao)
 - Address misc remarks from Kevin

v2: https://lore.kernel.org/kvm/20230206090532.95598-1-yi.l.liu@intel.com/
 - Add r-b from Kevin and Eric on patch 01 02 04.
 - "Split kvm/vfio: Provide struct kvm_device_ops::release() insted of ::destroy()"
   from this series and got applied. (Alex, Kevin, Jason, Mathhew)
 - Add kvm_ref_lock to protect vfio_device_file->kvm instead of reusing
   dev_set->lock as dead-lock is observed with vfio-ap which would try to
   acquire kvm_lock. This is opposite lock order with kvm_device_release()
   which holds kvm_lock first and then hold dev_set->lock. (Kevin)
 - Use a separate ioctl for detaching IOAS. (Alex)
 - Rename vfio_device_file::single_open to be is_cdev_device (Kevin, Alex)
 - Move the vfio device cdev code into device_cdev.c and add a VFIO_DEVICE_CDEV
   kconfig for it. (Kevin, Jason)

v1: https://lore.kernel.org/kvm/20230117134942.101112-1-yi.l.liu@intel.com/
 - Fix the circular refcount between kvm struct and device file reference. (JasonG)
 - Address comments from KevinT
 - Remained the ioctl for detach, needs to Alex's taste
   (https://lore.kernel.org/kvm/BN9PR11MB5276BE9F4B0613EE859317028CFF9@BN9PR11MB5276.namprd11.prod.outlook.com/)

rfc: https://lore.kernel.org/kvm/20221219084718.9342-1-yi.l.liu@intel.com/

Thanks,
	Yi Liu

Yi Liu (15):
  vfio: Allocate per device file structure
  vfio: Refine vfio file kAPIs
  vfio: Accept vfio device file in the driver facing kAPI
  kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device
    fd
  kvm/vfio: Accept vfio device file from userspace
  vfio: Pass struct vfio_device_file * to vfio_device_open/close()
  vfio: Block device access via device fd until device is opened
  vfio: Add infrastructure for bind_iommufd from userspace
  vfio-iommufd: Add detach_ioas support for physical VFIO devices
  vfio-iommufd: Add detach_ioas for emulated VFIO devices
  vfio: Add cdev_device_open_cnt to vfio_group
  vfio: Make vfio_device_open() single open for device cdev path
  vfio: Add cdev for vfio_device
  vfio: Add ioctls for device cdev using iommufd
  vfio: Compile group optionally

 Documentation/driver-api/vfio.rst             |   8 +-
 Documentation/virt/kvm/devices/vfio.rst       |  45 ++-
 drivers/gpu/drm/i915/gvt/kvmgt.c              |   1 +
 drivers/s390/cio/vfio_ccw_ops.c               |   1 +
 drivers/s390/crypto/vfio_ap_ops.c             |   1 +
 drivers/vfio/Kconfig                          |  29 ++
 drivers/vfio/Makefile                         |   3 +-
 drivers/vfio/device_cdev.c                    | 264 ++++++++++++++++
 drivers/vfio/fsl-mc/vfio_fsl_mc.c             |   1 +
 drivers/vfio/group.c                          | 149 +++++----
 drivers/vfio/iommufd.c                        |  59 +++-
 .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c    |   2 +
 drivers/vfio/pci/mlx5/main.c                  |   1 +
 drivers/vfio/pci/vfio_pci.c                   |   1 +
 drivers/vfio/pci/vfio_pci_core.c              |   4 +-
 drivers/vfio/platform/vfio_amba.c             |   1 +
 drivers/vfio/platform/vfio_platform.c         |   1 +
 drivers/vfio/vfio.h                           | 168 +++++++++-
 drivers/vfio/vfio_main.c                      | 295 ++++++++++++++++--
 include/linux/iommufd.h                       |   6 +
 include/linux/vfio.h                          |  28 +-
 include/uapi/linux/kvm.h                      |  16 +-
 include/uapi/linux/vfio.h                     |  86 +++++
 virt/kvm/vfio.c                               | 141 ++++-----
 24 files changed, 1106 insertions(+), 205 deletions(-)
 create mode 100644 drivers/vfio/device_cdev.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 135+ messages in thread

end of thread, other threads:[~2023-02-18  2:55 UTC | newest]

Thread overview: 135+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-13 15:13 [PATCH v3 00/15] Add vfio_device cdev for iommufd support Yi Liu
2023-02-13 15:13 ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 01/15] vfio: Allocate per device file structure Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 02/15] vfio: Refine vfio file kAPIs Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 03/15] vfio: Accept vfio device file in the driver facing kAPI Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 23:21   ` Alex Williamson
2023-02-13 23:21     ` [Intel-gfx] " Alex Williamson
2023-02-14  2:19     ` Liu, Yi L
2023-02-14  2:19       ` [Intel-gfx] " Liu, Yi L
2023-02-13 23:43   ` Jason Gunthorpe
2023-02-13 23:43     ` [Intel-gfx] " Jason Gunthorpe
2023-02-14  2:02     ` Liu, Yi L
2023-02-14  2:02       ` [Intel-gfx] " Liu, Yi L
2023-02-14  7:19       ` Liu, Yi L
2023-02-14  7:19         ` [Intel-gfx] " Liu, Yi L
2023-02-17 10:55         ` Liu, Yi L
2023-02-17 10:55           ` [Intel-gfx] " Liu, Yi L
2023-02-17 15:59           ` Jason Gunthorpe
2023-02-17 15:59             ` [Intel-gfx] " Jason Gunthorpe
2023-02-18  2:54             ` Liu, Yi L
2023-02-18  2:54               ` [Intel-gfx] " Liu, Yi L
2023-02-15 12:38       ` Jason Gunthorpe
2023-02-15 12:38         ` Jason Gunthorpe
2023-02-15 14:43         ` Liu, Yi L
2023-02-15 14:43           ` [Intel-gfx] " Liu, Yi L
2023-02-15 14:46           ` Jason Gunthorpe
2023-02-15 14:46             ` [Intel-gfx] " Jason Gunthorpe
2023-02-15 15:32             ` Alex Williamson
2023-02-15 15:32               ` [Intel-gfx] " Alex Williamson
2023-02-15 17:04               ` Jason Gunthorpe
2023-02-15 17:04                 ` [Intel-gfx] " Jason Gunthorpe
2023-02-15 17:19                 ` Alex Williamson
2023-02-15 17:19                   ` Alex Williamson
2023-02-15 17:33                   ` Jason Gunthorpe
2023-02-15 17:33                     ` [Intel-gfx] " Jason Gunthorpe
2023-02-13 15:13 ` [PATCH v3 04/15] kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device fd Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 05/15] kvm/vfio: Accept vfio device file from userspace Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-14 22:26   ` Alex Williamson
2023-02-14 22:26     ` [Intel-gfx] " Alex Williamson
2023-02-14 23:25     ` Jason Gunthorpe
2023-02-14 23:25       ` [Intel-gfx] " Jason Gunthorpe
2023-02-14 23:42       ` Alex Williamson
2023-02-14 23:42         ` Alex Williamson
2023-02-15  0:17         ` Jason Gunthorpe
2023-02-15  0:17           ` [Intel-gfx] " Jason Gunthorpe
2023-02-15  0:27           ` Timothy Pearson
2023-02-15  0:27             ` [Intel-gfx] " Timothy Pearson
2023-02-17  5:34           ` Liu, Yi L
2023-02-17  5:34             ` [Intel-gfx] " Liu, Yi L
2023-02-17  5:48             ` Liu, Yi L
2023-02-17  5:48               ` [Intel-gfx] " Liu, Yi L
2023-02-17 16:00               ` Jason Gunthorpe
2023-02-17 16:00                 ` Jason Gunthorpe
2023-02-15  7:37       ` Liu, Yi L
2023-02-15  7:37         ` [Intel-gfx] " Liu, Yi L
2023-02-13 15:13 ` [PATCH v3 06/15] vfio: Pass struct vfio_device_file * to vfio_device_open/close() Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 07/15] vfio: Block device access via device fd until device is opened Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-14 22:46   ` Alex Williamson
2023-02-14 22:46     ` Alex Williamson
2023-02-15  6:12     ` Liu, Yi L
2023-02-15  6:12       ` [Intel-gfx] " Liu, Yi L
2023-02-13 15:13 ` [PATCH v3 08/15] vfio: Add infrastructure for bind_iommufd from userspace Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-13 15:13 ` [PATCH v3 09/15] vfio-iommufd: Add detach_ioas support for physical VFIO devices Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-14  8:05   ` Tian, Kevin
2023-02-14  8:05     ` [Intel-gfx] " Tian, Kevin
2023-02-13 15:13 ` [PATCH v3 10/15] vfio-iommufd: Add detach_ioas for emulated " Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-14  8:06   ` Tian, Kevin
2023-02-14  8:06     ` [Intel-gfx] " Tian, Kevin
2023-02-13 15:13 ` [PATCH v3 11/15] vfio: Add cdev_device_open_cnt to vfio_group Yi Liu
2023-02-13 15:13   ` [Intel-gfx] " Yi Liu
2023-02-14  8:18   ` Tian, Kevin
2023-02-14  8:18     ` [Intel-gfx] " Tian, Kevin
2023-02-13 15:13 ` [Intel-gfx] [PATCH v3 12/15] vfio: Make vfio_device_open() single open for device cdev path Yi Liu
2023-02-13 15:13   ` Yi Liu
2023-02-14  8:25   ` Tian, Kevin
2023-02-14  8:25     ` [Intel-gfx] " Tian, Kevin
2023-02-13 15:13 ` [Intel-gfx] [PATCH v3 13/15] vfio: Add cdev for vfio_device Yi Liu
2023-02-13 15:13   ` Yi Liu
2023-02-14  8:32   ` Tian, Kevin
2023-02-14  8:32     ` [Intel-gfx] " Tian, Kevin
2023-02-14  8:35     ` Liu, Yi L
2023-02-14  8:35       ` [Intel-gfx] " Liu, Yi L
2023-02-13 15:13 ` [Intel-gfx] [PATCH v3 14/15] vfio: Add ioctls for device cdev using iommufd Yi Liu
2023-02-13 15:13   ` Yi Liu
2023-02-14  8:53   ` Tian, Kevin
2023-02-14  8:53     ` [Intel-gfx] " Tian, Kevin
2023-02-14 23:39   ` Yan Zhao
2023-02-14 23:39     ` [Intel-gfx] " Yan Zhao
2023-02-15  2:04     ` Tian, Kevin
2023-02-15  2:04       ` [Intel-gfx] " Tian, Kevin
2023-02-15  7:37       ` Liu, Yi L
2023-02-15  7:37         ` [Intel-gfx] " Liu, Yi L
2023-02-16  8:24   ` Yan Zhao
2023-02-16  8:24     ` [Intel-gfx] " Yan Zhao
2023-02-16  9:10     ` Liu, Yi L
2023-02-16  9:10       ` [Intel-gfx] " Liu, Yi L
2023-02-16  9:23       ` Yan Zhao
2023-02-16  9:23         ` [Intel-gfx] " Yan Zhao
2023-02-16 10:28         ` Liu, Yi L
2023-02-16 10:28           ` [Intel-gfx] " Liu, Yi L
2023-02-16 14:24           ` Jason Gunthorpe
2023-02-16 14:24             ` [Intel-gfx] " Jason Gunthorpe
2023-02-13 15:13 ` [Intel-gfx] [PATCH v3 15/15] vfio: Compile group optionally Yi Liu
2023-02-13 15:13   ` Yi Liu
2023-02-13 15:30 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Add vfio_device cdev for iommufd support (rev2) Patchwork
2023-02-13 19:47 ` [PATCH v3 00/15] Add vfio_device cdev for iommufd support Alex Williamson
2023-02-13 19:47   ` [Intel-gfx] " Alex Williamson
2023-02-13 23:21   ` Jason Gunthorpe
2023-02-13 23:21     ` [Intel-gfx] " Jason Gunthorpe
2023-02-14 15:15     ` Liu, Yi L
2023-02-14 15:15       ` [Intel-gfx] " Liu, Yi L
2023-02-14 15:54       ` Alex Williamson
2023-02-14 15:54         ` [Intel-gfx] " Alex Williamson
2023-02-14 16:48         ` Jason Gunthorpe
2023-02-14 16:48           ` [Intel-gfx] " Jason Gunthorpe
2023-02-14  1:55   ` Liu, Yi L
2023-02-14  1:55     ` [Intel-gfx] " Liu, Yi L
2023-02-14 15:47     ` Alex Williamson
2023-02-14 15:47       ` Alex Williamson
2023-02-15  7:54       ` Liu, Yi L
2023-02-15  7:54         ` [Intel-gfx] " Liu, Yi L
2023-02-15 20:09         ` Alex Williamson
2023-02-15 20:09           ` [Intel-gfx] " Alex Williamson
2023-02-16  2:53           ` Liu, Yi L
2023-02-16  2:53             ` [Intel-gfx] " Liu, Yi L

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.