Message ID | 20230718135551.6592-1-yi.l.liu@intel.com (mailing list archive) |
---|---|
Headers | show |
Series | Add vfio_device cdev for iommufd support | expand |
On Tue, Jul 18, 2023 at 06:55:25AM -0700, 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. After this, adds a mechanism for > blocking device access before iommufd bind. Then refactors the vfio to be > able to handle cdev paths (e.g. iommufd binding, no-iommufd, [de]attach ioas). > This refactor includes making the device_open exclusive between the group > and the cdev path, only allow single device open in cdev path; vfio-iommufd > code is also refactored to support cdev. e.g. split the vfio_iommufd_bind() > into two steps. Eventually, adds the cdev support for vfio device and the > new ioctls, then makes group infrastructure optional as it is not needed > when vfio device cdev is compiled. > > This series is based on some preparation works done to vfio emulated devices[2] > and vfio pci hot reset enhancements[3]. Per discussion[4], this series does not > support cdev for physical devices that do not have IOMMU. Such devices only > have group-centric user APIs. > > This series is a prerequisite for iommu nesting for vfio device[5] [6]. > > The complete code can be found in below branch, simple tests done to the > legacy group path and the cdev path. QEMU changes are in upstreaming[7] > and the complete code can be found at[8] > > https://github.com/yiliu1765/iommufd/tree/vfio_device_cdev_v15 > (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y) Alex, if you are still good with this lets make this into a shared branch, do you want to do it or would you like a PR from me? Thanks, Jason
On Tue, 18 Jul 2023 13:57:46 -0300 Jason Gunthorpe <jgg@nvidia.com> wrote: > On Tue, Jul 18, 2023 at 06:55:25AM -0700, 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. After this, adds a mechanism for > > blocking device access before iommufd bind. Then refactors the vfio to be > > able to handle cdev paths (e.g. iommufd binding, no-iommufd, [de]attach ioas). > > This refactor includes making the device_open exclusive between the group > > and the cdev path, only allow single device open in cdev path; vfio-iommufd > > code is also refactored to support cdev. e.g. split the vfio_iommufd_bind() > > into two steps. Eventually, adds the cdev support for vfio device and the > > new ioctls, then makes group infrastructure optional as it is not needed > > when vfio device cdev is compiled. > > > > This series is based on some preparation works done to vfio emulated devices[2] > > and vfio pci hot reset enhancements[3]. Per discussion[4], this series does not > > support cdev for physical devices that do not have IOMMU. Such devices only > > have group-centric user APIs. > > > > This series is a prerequisite for iommu nesting for vfio device[5] [6]. > > > > The complete code can be found in below branch, simple tests done to the > > legacy group path and the cdev path. QEMU changes are in upstreaming[7] > > and the complete code can be found at[8] > > > > https://github.com/yiliu1765/iommufd/tree/vfio_device_cdev_v15 > > (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y) > > Alex, if you are still good with this lets make this into a shared > branch, do you want to do it or would you like a PR from me? Sorry, was out much of last week. Yes, my intent would be to put this both in a shared branch and my next branch for v6.6. Given this is mostly vfio, it seems like it'd make sense for me to provide that branch but I may not get to it until tomorrow. Thanks, Alex
On Mon, 24 Jul 2023 13:09:22 -0600 Alex Williamson <alex.williamson@redhat.com> wrote: > On Tue, 18 Jul 2023 13:57:46 -0300 > Jason Gunthorpe <jgg@nvidia.com> wrote: > > > On Tue, Jul 18, 2023 at 06:55:25AM -0700, 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. After this, adds a mechanism for > > > blocking device access before iommufd bind. Then refactors the vfio to be > > > able to handle cdev paths (e.g. iommufd binding, no-iommufd, [de]attach ioas). > > > This refactor includes making the device_open exclusive between the group > > > and the cdev path, only allow single device open in cdev path; vfio-iommufd > > > code is also refactored to support cdev. e.g. split the vfio_iommufd_bind() > > > into two steps. Eventually, adds the cdev support for vfio device and the > > > new ioctls, then makes group infrastructure optional as it is not needed > > > when vfio device cdev is compiled. > > > > > > This series is based on some preparation works done to vfio emulated devices[2] > > > and vfio pci hot reset enhancements[3]. Per discussion[4], this series does not > > > support cdev for physical devices that do not have IOMMU. Such devices only > > > have group-centric user APIs. > > > > > > This series is a prerequisite for iommu nesting for vfio device[5] [6]. > > > > > > The complete code can be found in below branch, simple tests done to the > > > legacy group path and the cdev path. QEMU changes are in upstreaming[7] > > > and the complete code can be found at[8] > > > > > > https://github.com/yiliu1765/iommufd/tree/vfio_device_cdev_v15 > > > (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y) > > > > Alex, if you are still good with this lets make this into a shared > > branch, do you want to do it or would you like a PR from me? > > Sorry, was out much of last week. Yes, my intent would be to put this > both in a shared branch and my next branch for v6.6. Given this is > mostly vfio, it seems like it'd make sense for me to provide that > branch but I may not get to it until tomorrow. Thanks, Both series are applied to my next branch for v6.6 and I've also published them to the v6.6/vfio/cdev branch[1]. Thanks for all the work and collaboration on this effort! Alex [1]https://github.com/awilliam/linux-vfio/tree/v6.6/vfio/cdev
On Tue, Jul 25, 2023 at 12:00:09PM -0600, Alex Williamson wrote: > On Mon, 24 Jul 2023 13:09:22 -0600 > Alex Williamson <alex.williamson@redhat.com> wrote: > > > On Tue, 18 Jul 2023 13:57:46 -0300 > > Jason Gunthorpe <jgg@nvidia.com> wrote: > > > > > On Tue, Jul 18, 2023 at 06:55:25AM -0700, 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. After this, adds a mechanism for > > > > blocking device access before iommufd bind. Then refactors the vfio to be > > > > able to handle cdev paths (e.g. iommufd binding, no-iommufd, [de]attach ioas). > > > > This refactor includes making the device_open exclusive between the group > > > > and the cdev path, only allow single device open in cdev path; vfio-iommufd > > > > code is also refactored to support cdev. e.g. split the vfio_iommufd_bind() > > > > into two steps. Eventually, adds the cdev support for vfio device and the > > > > new ioctls, then makes group infrastructure optional as it is not needed > > > > when vfio device cdev is compiled. > > > > > > > > This series is based on some preparation works done to vfio emulated devices[2] > > > > and vfio pci hot reset enhancements[3]. Per discussion[4], this series does not > > > > support cdev for physical devices that do not have IOMMU. Such devices only > > > > have group-centric user APIs. > > > > > > > > This series is a prerequisite for iommu nesting for vfio device[5] [6]. > > > > > > > > The complete code can be found in below branch, simple tests done to the > > > > legacy group path and the cdev path. QEMU changes are in upstreaming[7] > > > > and the complete code can be found at[8] > > > > > > > > https://github.com/yiliu1765/iommufd/tree/vfio_device_cdev_v15 > > > > (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=y) > > > > > > Alex, if you are still good with this lets make this into a shared > > > branch, do you want to do it or would you like a PR from me? > > > > Sorry, was out much of last week. Yes, my intent would be to put this > > both in a shared branch and my next branch for v6.6. Given this is > > mostly vfio, it seems like it'd make sense for me to provide that > > branch but I may not get to it until tomorrow. Thanks, > > Both series are applied to my next branch for v6.6 and I've also > published them to the v6.6/vfio/cdev branch[1]. Thanks for all the > work and collaboration on this effort! Great, I pulled it and merged the next series Thanks, Jason