Re: [RFC 00/12] Add vfio_device cdev for iommufd support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2022/12/19 16:47, Yi Liu wrote:
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_rfcv1
(config CONFIG_IOMMUFD=y)

[1] https://lore.kernel.org/kvm/BN9PR11MB5433B1E4AE5B0480369F97178C189@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
[2] https://github.com/yiliu1765/iommufd/tree/wip/iommufd-v6.1-rc3-nesting
[3] https://github.com/yiliu1765/qemu/tree/wip/qemu-iommufd-6.1-rc3

a ping in case of this series is "buried" deeply. :-)

Regards,
	Yi Liu

Yi Liu (12):
   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 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                     | 108 +++++-
  drivers/vfio/vfio_main.c                | 492 ++++++++++++++++++++++--
  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                         | 143 +++----
  13 files changed, 891 insertions(+), 228 deletions(-)


--
Regards,
Yi Liu



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux