From: Yi Liu <yi.l.liu@intel.com> To: alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com Cc: 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-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 00/14] Add vfio_device cdev for iommufd support Date: Mon, 6 Feb 2023 01:05:18 -0800 [thread overview] Message-ID: <20230206090532.95598-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_v2 (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=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/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 v2) Change log: v2: - 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 (14): 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: Make vfio_device_open() exclusive between group path and 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 | 40 ++- 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 | 240 ++++++++++++++ drivers/vfio/fsl-mc/vfio_fsl_mc.c | 1 + drivers/vfio/group.c | 117 +++---- drivers/vfio/iommufd.c | 81 +++-- .../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 | 156 ++++++++- drivers/vfio/vfio_main.c | 312 ++++++++++++++++-- include/linux/iommufd.h | 6 + include/linux/vfio.h | 24 +- include/uapi/linux/kvm.h | 16 +- include/uapi/linux/vfio.h | 86 +++++ virt/kvm/vfio.c | 141 ++++---- 24 files changed, 1057 insertions(+), 216 deletions(-) create mode 100644 drivers/vfio/device_cdev.c -- 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: Yi Liu <yi.l.liu@intel.com> To: alex.williamson@redhat.com, jgg@nvidia.com, kevin.tian@intel.com Cc: linux-s390@vger.kernel.org, yi.l.liu@intel.com, yi.y.sun@linux.intel.com, kvm@vger.kernel.org, mjrosato@linux.ibm.com, jasowang@redhat.com, cohuck@redhat.com, linux-kernel@vger.kernel.org, peterx@redhat.com, eric.auger@redhat.com, nicolinc@nvidia.com, shameerali.kolothum.thodi@huawei.com, suravee.suthikulpanit@amd.com, chao.p.peng@linux.intel.com, lulu@redhat.com, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Subject: [Intel-gfx] [PATCH v2 00/14] Add vfio_device cdev for iommufd support Date: Mon, 6 Feb 2023 01:05:18 -0800 [thread overview] Message-ID: <20230206090532.95598-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_v2 (config CONFIG_IOMMUFD=y CONFIG_VFIO_DEVICE_CDEV=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/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 v2) Change log: v2: - 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 (14): 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: Make vfio_device_open() exclusive between group path and 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 | 40 ++- 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 | 240 ++++++++++++++ drivers/vfio/fsl-mc/vfio_fsl_mc.c | 1 + drivers/vfio/group.c | 117 +++---- drivers/vfio/iommufd.c | 81 +++-- .../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 | 156 ++++++++- drivers/vfio/vfio_main.c | 312 ++++++++++++++++-- include/linux/iommufd.h | 6 + include/linux/vfio.h | 24 +- include/uapi/linux/kvm.h | 16 +- include/uapi/linux/vfio.h | 86 +++++ virt/kvm/vfio.c | 141 ++++---- 24 files changed, 1057 insertions(+), 216 deletions(-) create mode 100644 drivers/vfio/device_cdev.c -- 2.34.1
next reply other threads:[~2023-02-06 9:05 UTC|newest] Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-06 9:05 Yi Liu [this message] 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 00/14] Add vfio_device cdev for iommufd support Yi Liu 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 01/14] vfio: Allocate per device file structure Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 02/14] vfio: Refine vfio file kAPIs Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-06 9:05 ` [PATCH v2 03/14] vfio: Accept vfio device file in the driver facing kAPI Yi Liu 2023-02-06 9:05 ` [Intel-gfx] " Yi Liu 2023-02-07 3:25 ` Tian, Kevin 2023-02-07 3:25 ` [Intel-gfx] " Tian, Kevin 2023-02-06 9:05 ` [PATCH v2 04/14] kvm/vfio: Rename kvm_vfio_group to prepare for accepting vfio device fd Yi Liu 2023-02-06 9:05 ` [Intel-gfx] " Yi Liu 2023-02-06 9:05 ` [PATCH v2 05/14] kvm/vfio: Accept vfio device file from userspace Yi Liu 2023-02-06 9:05 ` [Intel-gfx] " Yi Liu 2023-02-07 3:36 ` Tian, Kevin 2023-02-07 3:36 ` [Intel-gfx] " Tian, Kevin 2023-02-07 8:39 ` Liu, Yi L 2023-02-07 8:39 ` [Intel-gfx] " Liu, Yi L 2023-02-06 9:05 ` [PATCH v2 06/14] vfio: Pass struct vfio_device_file * to vfio_device_open/close() Yi Liu 2023-02-06 9:05 ` [Intel-gfx] " Yi Liu 2023-02-07 3:42 ` Tian, Kevin 2023-02-07 3:42 ` [Intel-gfx] " Tian, Kevin 2023-02-06 9:05 ` [PATCH v2 07/14] vfio: Block device access via device fd until device is opened Yi Liu 2023-02-06 9:05 ` [Intel-gfx] " Yi Liu 2023-02-07 3:52 ` Tian, Kevin 2023-02-07 3:52 ` [Intel-gfx] " Tian, Kevin 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 08/14] vfio: Add infrastructure for bind_iommufd from userspace Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 3:56 ` [Intel-gfx] " Tian, Kevin 2023-02-07 3:56 ` Tian, Kevin 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 09/14] vfio-iommufd: Add detach_ioas support for physical VFIO devices Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 6:06 ` Tian, Kevin 2023-02-07 6:06 ` [Intel-gfx] " Tian, Kevin 2023-02-07 8:56 ` Liu, Yi L 2023-02-07 8:56 ` [Intel-gfx] " Liu, Yi L 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 10/14] vfio-iommufd: Add detach_ioas for emulated " Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 6:08 ` Tian, Kevin 2023-02-07 6:08 ` [Intel-gfx] " Tian, Kevin 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 11/14] vfio: Make vfio_device_open() exclusive between group path and device cdev path Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 6:24 ` Tian, Kevin 2023-02-07 6:24 ` [Intel-gfx] " Tian, Kevin 2023-02-07 8:54 ` Liu, Yi L 2023-02-07 8:54 ` [Intel-gfx] " Liu, Yi L 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 12/14] vfio: Add cdev for vfio_device Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 7:54 ` Tian, Kevin 2023-02-07 7:54 ` [Intel-gfx] " Tian, Kevin 2023-02-10 11:31 ` Joao Martins 2023-02-10 11:31 ` [Intel-gfx] " Joao Martins 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 13/14] vfio: Add ioctls for device cdev using iommufd Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-07 3:41 ` Yan Zhao 2023-02-07 3:41 ` [Intel-gfx] " Yan Zhao 2023-02-07 7:50 ` Liu, Yi L 2023-02-07 7:50 ` Liu, Yi L 2023-02-07 9:17 ` Tian, Kevin 2023-02-07 9:17 ` [Intel-gfx] " Tian, Kevin 2023-02-06 9:05 ` [Intel-gfx] [PATCH v2 14/14] vfio: Compile group optionally Yi Liu 2023-02-06 9:05 ` Yi Liu 2023-02-06 11:55 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Add vfio_device cdev for iommufd support Patchwork
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=20230206090532.95598-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=kevin.tian@intel.com \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@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=shameerali.kolothum.thodi@huawei.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: linkBe 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.