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
Subject: [PATCH v5 00/19] Add vfio_device cdev for iommufd support
Date: Mon, 27 Feb 2023 03:11:16 -0800 [thread overview]
Message-ID: <20230227111135.61728-1-yi.l.liu@intel.com> (raw)
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 the device_open 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_v5
(config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y)
base-commit: 63777bd2daa3625da6eada88bd9081f047664dad
[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/v4/v5)
Change log:
v5:
- Add r-b from Kevin on patch 08, 13, 14, 15 and 17.
- Rename patch 02 to limit the change for KVM facing kAPIs. The vfio pci
hot reset path only accepts group file until patch 09. (Kevin)
- Update comment around smp_load_acquire(&df->access_granted) (Yan)
- Adopt Jason's suggestion on the vfio pci hot reset path, passing zero-length
fd array to indicate using bound iommufd_ctx as ownership check. (Jason, Kevin)
- Direct read df->access_granted value in vfio_device_cdev_close() (Kevin, Yan, Jason)
- Wrap the iommufd get/put into a helper to refine the error path of
vfio_device_ioctl_bind_iommufd(). (Yan)
v4: https://lore.kernel.org/kvm/20230221034812.138051-1-yi.l.liu@intel.com/
- Add r-b from Kevin on patch 09/10
- Add a line in devices/vfio.rst to emphasize user should add group/device to
KVM prior to invoke open_device op which may be called in the VFIO_GROUP_GET_DEVICE_FD
or VFIO_DEVICE_BIND_IOMMUFD ioctl.
- Modify VFIO_GROUP/VFIO_DEVICE_CDEV Kconfig dependency (Alex)
- Select VFIO_GROUP for SPAPR (Jason)
- Check device fully-opened in PCI hotreset path for device fd (Jason)
- Set df->access_granted in the caller of vfio_device_open() since
the caller may fail in other operations, but df->access_granted
does not allow a true to false change. So it should be set only when
the open path is really done successfully. (Yan, Kevin)
- Fix missing iommufd_ctx_put() in the cdev path (Yan)
- Fix an issue found in testing exclusion between group and cdev path.
vfio_device_cdev_close() should check df->access_granted before heading
to other operations.
- Update vfio.rst for iommufd/cdev
v3: https://lore.kernel.org/kvm/20230213151348.56451-1-yi.l.liu@intel.com/
- 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 (19):
vfio: Allocate per device file structure
vfio: Refine vfio file kAPIs for KVM
vfio: Accept vfio device file in the KVM 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/pci: Update comment around group_fd get in
vfio_pci_ioctl_pci_hot_reset()
vfio/pci: Allow passing zero-length fd array in
VFIO_DEVICE_PCI_HOT_RESET
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 VFIO_DEVICE_BIND_IOMMUFD
vfio: Add VFIO_DEVICE_AT[DE]TACH_IOMMUFD_PT
vfio: Compile group optionally
docs: vfio: Add vfio device cdev description
Documentation/driver-api/vfio.rst | 133 +++++++-
Documentation/virt/kvm/devices/vfio.rst | 52 ++--
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 | 26 ++
drivers/vfio/Makefile | 3 +-
drivers/vfio/device_cdev.c | 285 ++++++++++++++++++
drivers/vfio/fsl-mc/vfio_fsl_mc.c | 1 +
drivers/vfio/group.c | 139 ++++++---
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 | 116 +++++--
drivers/vfio/platform/vfio_amba.c | 1 +
drivers/vfio/platform/vfio_platform.c | 1 +
drivers/vfio/vfio.h | 192 +++++++++++-
drivers/vfio/vfio_main.c | 244 +++++++++++++--
include/linux/iommufd.h | 6 +
include/linux/vfio.h | 40 ++-
include/uapi/linux/kvm.h | 16 +-
include/uapi/linux/vfio.h | 102 +++++++
virt/kvm/vfio.c | 141 ++++-----
24 files changed, 1348 insertions(+), 216 deletions(-)
create mode 100644 drivers/vfio/device_cdev.c
--
2.34.1
next reply other threads:[~2023-02-27 11:11 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-27 11:11 Yi Liu [this message]
2023-02-27 11:11 ` [PATCH v5 01/19] vfio: Allocate per device file structure Yi Liu
2023-02-27 18:46 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 02/19] vfio: Refine vfio file kAPIs for KVM Yi Liu
2023-02-27 18:46 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 03/19] vfio: Accept vfio device file in the KVM facing kAPI Yi Liu
2023-02-27 18:46 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 04/19] kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device fd Yi Liu
2023-02-27 18:47 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 05/19] kvm/vfio: Accept vfio device file from userspace Yi Liu
2023-02-27 18:47 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 06/19] vfio: Pass struct vfio_device_file * to vfio_device_open/close() Yi Liu
2023-02-27 18:47 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 07/19] vfio: Block device access via device fd until device is opened Yi Liu
2023-02-27 18:48 ` Jason Gunthorpe
2023-03-01 9:22 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 08/19] vfio/pci: Update comment around group_fd get in vfio_pci_ioctl_pci_hot_reset() Yi Liu
2023-02-27 18:48 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 09/19] vfio/pci: Allow passing zero-length fd array in VFIO_DEVICE_PCI_HOT_RESET Yi Liu
2023-02-27 18:22 ` Jason Gunthorpe
2023-02-28 2:31 ` Liu, Yi L
2023-03-02 6:07 ` Liu, Yi L
2023-03-02 9:55 ` Tian, Kevin
2023-03-02 12:35 ` Jason Gunthorpe
2023-03-02 14:20 ` Liu, Yi L
2023-03-03 6:36 ` Tian, Kevin
2023-03-03 16:55 ` Alex Williamson
2023-03-05 14:48 ` Liu, Yi L
2023-03-06 8:16 ` Tian, Kevin
2023-03-06 8:23 ` Tian, Kevin
2023-03-06 8:33 ` Liu, Yi L
2023-03-06 9:59 ` Liu, Yi L
2023-03-06 13:16 ` Jason Gunthorpe
2023-03-07 2:31 ` Tian, Kevin
2023-03-07 2:35 ` Liu, Yi L
2023-03-07 12:36 ` Jason Gunthorpe
2023-03-07 13:28 ` Liu, Yi L
2023-03-08 7:26 ` Tian, Kevin
2023-03-08 7:47 ` Liu, Yi L
2023-03-08 7:55 ` Tian, Kevin
2023-03-08 8:00 ` Liu, Yi L
2023-03-08 8:14 ` Tian, Kevin
2023-03-08 8:15 ` Liu, Yi L
2023-03-08 15:08 ` Jason Gunthorpe
2023-03-02 21:04 ` Alex Williamson
2023-02-27 11:11 ` [PATCH v5 10/19] vfio: Add infrastructure for bind_iommufd from userspace Yi Liu
2023-02-27 18:29 ` Jason Gunthorpe
2023-02-28 2:35 ` Liu, Yi L
2023-02-28 6:58 ` Liu, Yi L
2023-02-28 12:31 ` Jason Gunthorpe
2023-02-28 12:45 ` Liu, Yi L
2023-02-28 12:52 ` Jason Gunthorpe
2023-02-28 12:56 ` Liu, Yi L
2023-02-28 12:58 ` Jason Gunthorpe
2023-02-28 12:29 ` Jason Gunthorpe
2023-02-28 12:48 ` Liu, Yi L
2023-02-28 12:52 ` Jason Gunthorpe
2023-02-28 13:24 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 11/19] vfio-iommufd: Add detach_ioas support for physical VFIO devices Yi Liu
2023-02-27 18:44 ` Jason Gunthorpe
2023-02-28 2:57 ` Liu, Yi L
2023-02-28 12:33 ` Jason Gunthorpe
2023-02-28 12:43 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 12/19] vfio-iommufd: Add detach_ioas for emulated " Yi Liu
2023-02-27 18:45 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 13/19] vfio: Add cdev_device_open_cnt to vfio_group Yi Liu
2023-02-27 19:20 ` Jason Gunthorpe
2023-02-27 11:11 ` [PATCH v5 14/19] vfio: Make vfio_device_open() single open for device cdev path Yi Liu
2023-02-27 18:52 ` Jason Gunthorpe
2023-02-28 3:11 ` Liu, Yi L
2023-02-28 12:33 ` Jason Gunthorpe
2023-03-01 13:58 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 15/19] vfio: Add cdev for vfio_device Yi Liu
2023-02-27 18:55 ` Jason Gunthorpe
2023-02-28 3:47 ` Liu, Yi L
2023-02-27 19:06 ` Jason Gunthorpe
2023-02-28 3:59 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 16/19] vfio: Add VFIO_DEVICE_BIND_IOMMUFD Yi Liu
2023-02-27 19:19 ` Jason Gunthorpe
2023-02-28 4:08 ` Liu, Yi L
2023-03-01 9:19 ` Liu, Yi L
2023-03-01 17:46 ` Jason Gunthorpe
2023-03-02 4:09 ` Liu, Yi L
2023-03-03 6:57 ` Liu, Yi L
2023-03-03 7:23 ` Liu, Yi L
2023-03-07 6:38 ` Tian, Kevin
2023-03-07 12:37 ` Jason Gunthorpe
2023-03-07 13:03 ` Liu, Yi L
2023-03-08 7:17 ` Tian, Kevin
2023-03-10 2:39 ` Alexey Kardashevskiy
2023-03-10 5:49 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 17/19] vfio: Add VFIO_DEVICE_AT[DE]TACH_IOMMUFD_PT Yi Liu
2023-02-27 18:39 ` Jason Gunthorpe
2023-02-28 2:51 ` Liu, Yi L
2023-02-28 12:32 ` Jason Gunthorpe
2023-02-28 12:42 ` Liu, Yi L
2023-02-28 12:53 ` Jason Gunthorpe
2023-02-28 13:22 ` Liu, Yi L
2023-02-28 13:25 ` Jason Gunthorpe
2023-02-28 13:36 ` Liu, Yi L
2023-02-28 13:43 ` Jason Gunthorpe
2023-02-28 14:01 ` Liu, Yi L
2023-02-28 14:38 ` Jason Gunthorpe
2023-03-01 14:04 ` Liu, Yi L
2023-03-01 17:49 ` Jason Gunthorpe
2023-03-02 3:24 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 18/19] vfio: Compile group optionally Yi Liu
2023-02-27 19:20 ` Jason Gunthorpe
2023-02-28 3:14 ` Liu, Yi L
2023-02-28 6:00 ` Liu, Yi L
2023-02-28 12:36 ` Jason Gunthorpe
2023-03-01 13:59 ` Liu, Yi L
2023-02-27 11:11 ` [PATCH v5 19/19] docs: vfio: Add vfio device cdev description Yi Liu
2023-02-27 19:21 ` [PATCH v5 00/19] Add vfio_device cdev for iommufd support Jason Gunthorpe
2023-02-28 3:03 ` Liu, Yi L
2023-02-28 16:58 ` Xu, Terrence
2023-03-01 2:29 ` Nicolin Chen
2023-03-01 3:44 ` Liu, Yi L
2023-03-02 9:43 ` Shameerali Kolothum Thodi
2023-03-02 23:51 ` Nicolin Chen
2023-03-03 15:01 ` Shameerali Kolothum Thodi
2023-03-04 7:00 ` Nicolin Chen
2023-03-04 8:22 ` Liu, Yi L
2023-03-08 15:54 ` Shameerali Kolothum Thodi
2023-03-14 11:38 ` Shameerali Kolothum Thodi
2023-03-15 23:22 ` Nicolin Chen
2023-03-16 7:39 ` Liu, Yi L
2023-03-03 21:29 ` 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=20230227111135.61728-1-yi.l.liu@intel.com \
--to=yi.l.liu@intel.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@linux.intel.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=yi.y.sun@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).