From: Yi Liu <yi.l.liu@intel.com>
To: alex.williamson@redhat.com, jgg@nvidia.com
Cc: kevin.tian@intel.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,
suravee.suthikulpanit@amd.com
Subject: [PATCH 00/13] Add vfio_device cdev for iommufd support
Date: Tue, 17 Jan 2023 05:49:29 -0800 [thread overview]
Message-ID: <20230117134942.101112-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 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 base for further support 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_v1
(config CONFIG_IOMMUFD=y)
[1] https://lore.kernel.org/kvm/BN9PR11MB5433B1E4AE5B0480369F97178C189@BN9PR11MB5433.namprd11.prod.outlook.com/
[2] https://github.com/yiliu1765/iommufd/tree/wip/iommufd-v6.2-rc4-nesting
[3] https://github.com/yiliu1765/qemu/tree/wip/qemu-iommufd-6.2-rc4 (need further cleanup)
Change log:
v1:
- 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 (13):
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: Provide struct kvm_device_ops::release() insted of
::destroy()
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 and attach
vfio: Make vfio_device_open() exclusive between group path and device
cdev path
vfio: Add cdev for vfio_device
vfio: Add ioctls for device cdev iommufd
vfio: Compile group optionally
Documentation/virt/kvm/devices/vfio.rst | 32 +-
drivers/vfio/Kconfig | 17 +
drivers/vfio/Makefile | 3 +-
drivers/vfio/group.c | 131 +++---
drivers/vfio/iommufd.c | 79 +++-
drivers/vfio/pci/vfio_pci_core.c | 4 +-
drivers/vfio/vfio.h | 109 ++++-
drivers/vfio/vfio_main.c | 506 ++++++++++++++++++++++--
include/linux/vfio.h | 21 +-
include/uapi/linux/iommufd.h | 2 +
include/uapi/linux/kvm.h | 23 +-
include/uapi/linux/vfio.h | 64 +++
virt/kvm/vfio.c | 145 +++----
13 files changed, 909 insertions(+), 227 deletions(-)
--
2.34.1
next reply other threads:[~2023-01-17 13:50 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-17 13:49 Yi Liu [this message]
2023-01-17 13:49 ` [PATCH 01/13] vfio: Allocate per device file structure Yi Liu
2023-01-18 8:37 ` Tian, Kevin
2023-01-18 13:28 ` Eric Auger
2023-01-17 13:49 ` [PATCH 02/13] vfio: Refine vfio file kAPIs Yi Liu
2023-01-18 8:42 ` Tian, Kevin
2023-01-18 14:37 ` Eric Auger
2023-01-29 13:32 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 03/13] vfio: Accept vfio device file in the driver facing kAPI Yi Liu
2023-01-18 8:45 ` Tian, Kevin
2023-01-18 16:11 ` Eric Auger
2023-01-30 9:47 ` Liu, Yi L
2023-01-30 18:02 ` Jason Gunthorpe
2023-01-17 13:49 ` [PATCH 04/13] kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device fd Yi Liu
2023-01-18 8:47 ` Tian, Kevin
2023-01-18 16:33 ` Eric Auger
2023-01-17 13:49 ` [PATCH 05/13] kvm/vfio: Provide struct kvm_device_ops::release() insted of ::destroy() Yi Liu
2023-01-18 8:56 ` Tian, Kevin
2023-01-19 9:12 ` Eric Auger
2023-01-19 9:30 ` Tian, Kevin
2023-01-20 3:52 ` Liu, Yi L
2023-01-19 19:07 ` Jason Gunthorpe
2023-01-19 20:04 ` Alex Williamson
2023-01-20 13:03 ` Liu, Yi L
2023-01-20 14:00 ` Liu, Yi L
2023-01-20 14:33 ` Jason Gunthorpe
2023-01-20 15:09 ` Liu, Yi L
2023-01-20 15:11 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 06/13] kvm/vfio: Accept vfio device file from userspace Yi Liu
2023-01-18 9:18 ` Tian, Kevin
2023-01-19 9:35 ` Eric Auger
2023-01-30 7:36 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 07/13] vfio: Pass struct vfio_device_file * to vfio_device_open/close() Yi Liu
2023-01-18 9:27 ` Tian, Kevin
2023-01-19 11:01 ` Eric Auger
2023-01-19 20:35 ` Alex Williamson
2023-01-30 9:38 ` Liu, Yi L
2023-01-30 9:38 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 08/13] vfio: Block device access via device fd until device is opened Yi Liu
2023-01-18 9:35 ` Tian, Kevin
2023-01-18 13:52 ` Jason Gunthorpe
2023-01-19 3:42 ` Tian, Kevin
2023-01-19 3:43 ` Liu, Yi L
2023-01-19 14:00 ` Eric Auger
2023-01-30 10:41 ` Liu, Yi L
2023-01-19 20:47 ` Alex Williamson
2023-01-30 10:48 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 09/13] vfio: Add infrastructure for bind_iommufd and attach Yi Liu
2023-01-19 9:45 ` Tian, Kevin
2023-01-30 13:52 ` Liu, Yi L
2023-01-19 23:05 ` Alex Williamson
2023-01-30 13:55 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 10/13] vfio: Make vfio_device_open() exclusive between group path and device cdev path Yi Liu
2023-01-19 9:55 ` Tian, Kevin
2023-01-30 11:59 ` Liu, Yi L
2023-01-19 23:51 ` Alex Williamson
2023-01-30 12:14 ` Liu, Yi L
2023-02-02 5:34 ` Liu, Yi L
2023-02-03 17:41 ` Jason Gunthorpe
2023-02-06 4:30 ` Liu, Yi L
2023-02-06 10:09 ` Tian, Kevin
2023-02-06 15:10 ` Jason Gunthorpe
2023-02-06 15:51 ` Liu, Yi L
2023-02-07 0:35 ` Tian, Kevin
2023-02-07 13:12 ` Jason Gunthorpe
2023-02-07 13:19 ` Liu, Yi L
2023-02-07 13:20 ` Jason Gunthorpe
2023-02-07 13:23 ` Liu, Yi L
2023-02-07 13:27 ` Jason Gunthorpe
2023-02-07 13:55 ` Liu, Yi L
2023-02-08 4:23 ` Tian, Kevin
2023-02-08 12:41 ` Jason Gunthorpe
2023-01-17 13:49 ` [PATCH 11/13] vfio: Add cdev for vfio_device Yi Liu
2023-01-20 7:26 ` Tian, Kevin
2023-01-31 6:17 ` Liu, Yi L
2023-01-24 20:44 ` Jason Gunthorpe
2023-01-17 13:49 ` [PATCH 12/13] vfio: Add ioctls for device cdev iommufd Yi Liu
2023-01-20 8:03 ` Tian, Kevin
2023-02-06 9:07 ` Liu, Yi L
2023-01-17 13:49 ` [PATCH 13/13] vfio: Compile group optionally Yi Liu
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=20230117134942.101112-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=jasowang@redhat.com \
--cc=jgg@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=mjrosato@linux.ibm.com \
--cc=nicolinc@nvidia.com \
--cc=peterx@redhat.com \
--cc=suravee.suthikulpanit@amd.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 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.