mbox series

[v4,0/4] vfio-pci support pasid attach/detach

Message ID 20241104132732.16759-1-yi.l.liu@intel.com (mailing list archive)
Headers show
Series vfio-pci support pasid attach/detach | expand

Message

Yi Liu Nov. 4, 2024, 1:27 p.m. UTC
This adds the pasid attach/detach uAPIs for userspace to attach/detach
a PASID of a device to/from a given ioas/hwpt. Only vfio-pci driver is
enabled in this series. After this series, PASID-capable devices bound
with vfio-pci can report PASID capability to userspace and VM to enable
PASID usages like Shared Virtual Addressing (SVA).

Based on the discussion about reporting the vPASID to VM [1], it's agreed
that we will let the userspace VMM to synthesize the vPASID capability.
The VMM needs to figure out a hole to put the vPASID cap. This includes
the hidden bits handling for some devices. While, it's up to the userspace,
it's not the focus of this series.

This series first adds the helpers for pasid attach in vfio core and then
extends the device cdev attach/detach ioctls for pasid attach/detach. In the
end of this series, the IOMMU_GET_HW_INFO ioctl is extended to report the
PCI PASID capability to the userspace. Userspace should check this before
using any PASID related uAPIs provided by VFIO, which is the agreement in [2].
This series depends on the iommufd pasid attach/detach series [3].

The completed code can be found at [4], tested with a hacky Qemu branch [5].

[1] https://lore.kernel.org/kvm/BN9PR11MB5276318969A212AD0649C7BE8CBE2@BN9PR11MB5276.namprd11.prod.outlook.com/
[2] https://lore.kernel.org/kvm/4f2daf50-a5ad-4599-ab59-bcfc008688d8@intel.com/
[3] https://lore.kernel.org/linux-iommu/20240912131255.13305-1-yi.l.liu@intel.com/
[4] https://github.com/yiliu1765/iommufd/tree/iommufd_pasid
[5] https://github.com/yiliu1765/qemu/tree/wip/zhenzhong/iommufd_nesting_rfcv2-test-pasid

Change log:

v4:
 - Add acked-by for the ida patch from Matthew
 - Add r-b from Kevin and Jason on patch 01, 02 and 04 of v3
 - Add common code to copy user data for the user struct with new fields
 - Extend the VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT to support pasid, patch 03
   is updated per this change. Hence drop r-b of it. (Kevin, Alex)
 - Add t-b from Zhangfei for patch 4 of v3
 - Nits from Vasant

v3: https://lore.kernel.org/linux-iommu/20240912131729.14951-1-yi.l.liu@intel.com/
 - Misc enhancement on patch 01 of v2 (Alex, Jason)
 - Add Jason's r-b to patch 03 of v2
 - Drop the logic that report PASID via VFIO_DEVICE_FEATURE ioctl
 - Extend IOMMU_GET_HW_INFO to report PASID support (Kevin, Jason, Alex)

v2: https://lore.kernel.org/kvm/20240412082121.33382-1-yi.l.liu@intel.com/
 - Use IDA to track if PASID is attached or not in VFIO. (Jason)
 - Fix the issue of calling pasid_at[de]tach_ioas callback unconditionally (Alex)
 - Fix the wrong data copy in vfio_df_ioctl_pasid_detach_pt() (Zhenzhong)
 - Minor tweaks in comments (Kevin)

v1: https://lore.kernel.org/kvm/20231127063909.129153-1-yi.l.liu@intel.com/
 - Report PASID capability via VFIO_DEVICE_FEATURE (Alex)

rfc: https://lore.kernel.org/linux-iommu/20230926093121.18676-1-yi.l.liu@intel.com/

Regards,
	Yi Liu

Yi Liu (4):
  ida: Add ida_find_first_range()
  vfio-iommufd: Support pasid [at|de]tach for physical VFIO devices
  vfio: VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT support pasid
  iommufd: Extend IOMMU_GET_HW_INFO to report PASID capability

 drivers/iommu/iommufd/device.c | 24 +++++++++++-
 drivers/pci/ats.c              | 33 ++++++++++++++++
 drivers/vfio/device_cdev.c     | 62 +++++++++++++++++++++---------
 drivers/vfio/iommufd.c         | 50 ++++++++++++++++++++++++
 drivers/vfio/pci/vfio_pci.c    |  2 +
 drivers/vfio/vfio.h            | 18 +++++++++
 drivers/vfio/vfio_main.c       | 55 ++++++++++++++++++++++++++
 include/linux/idr.h            | 11 ++++++
 include/linux/pci-ats.h        |  3 ++
 include/linux/vfio.h           | 11 ++++++
 include/uapi/linux/iommufd.h   | 14 ++++++-
 include/uapi/linux/vfio.h      | 29 +++++++++-----
 lib/idr.c                      | 67 ++++++++++++++++++++++++++++++++
 lib/test_ida.c                 | 70 ++++++++++++++++++++++++++++++++++
 14 files changed, 419 insertions(+), 30 deletions(-)

Comments

Yi Liu Nov. 4, 2024, 1:41 p.m. UTC | #1
On 2024/11/4 21:27, Yi Liu wrote:
> This adds the pasid attach/detach uAPIs for userspace to attach/detach
> a PASID of a device to/from a given ioas/hwpt. Only vfio-pci driver is
> enabled in this series. After this series, PASID-capable devices bound
> with vfio-pci can report PASID capability to userspace and VM to enable
> PASID usages like Shared Virtual Addressing (SVA).
> 
> Based on the discussion about reporting the vPASID to VM [1], it's agreed
> that we will let the userspace VMM to synthesize the vPASID capability.
> The VMM needs to figure out a hole to put the vPASID cap. This includes
> the hidden bits handling for some devices. While, it's up to the userspace,
> it's not the focus of this series.
> 
> This series first adds the helpers for pasid attach in vfio core and then
> extends the device cdev attach/detach ioctls for pasid attach/detach. In the
> end of this series, the IOMMU_GET_HW_INFO ioctl is extended to report the
> PCI PASID capability to the userspace. Userspace should check this before
> using any PASID related uAPIs provided by VFIO, which is the agreement in [2].
> This series depends on the iommufd pasid attach/detach series [3].
> 
> The completed code can be found at [4], tested with a hacky Qemu branch [5].
> 
> [1] https://lore.kernel.org/kvm/BN9PR11MB5276318969A212AD0649C7BE8CBE2@BN9PR11MB5276.namprd11.prod.outlook.com/
> [2] https://lore.kernel.org/kvm/4f2daf50-a5ad-4599-ab59-bcfc008688d8@intel.com/
> [3] https://lore.kernel.org/linux-iommu/20240912131255.13305-1-yi.l.liu@intel.com/

correct the latest link.

https://lore.kernel.org/linux-iommu/20241104132513.15890-1-yi.l.liu@intel.com/

> [4] https://github.com/yiliu1765/iommufd/tree/iommufd_pasid
> [5] https://github.com/yiliu1765/qemu/tree/wip/zhenzhong/iommufd_nesting_rfcv2-test-pasid
> 
> Change log:
> 
> v4:
>   - Add acked-by for the ida patch from Matthew
>   - Add r-b from Kevin and Jason on patch 01, 02 and 04 of v3
>   - Add common code to copy user data for the user struct with new fields
>   - Extend the VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT to support pasid, patch 03
>     is updated per this change. Hence drop r-b of it. (Kevin, Alex)
>   - Add t-b from Zhangfei for patch 4 of v3
>   - Nits from Vasant
> 
> v3: https://lore.kernel.org/linux-iommu/20240912131729.14951-1-yi.l.liu@intel.com/
>   - Misc enhancement on patch 01 of v2 (Alex, Jason)
>   - Add Jason's r-b to patch 03 of v2
>   - Drop the logic that report PASID via VFIO_DEVICE_FEATURE ioctl
>   - Extend IOMMU_GET_HW_INFO to report PASID support (Kevin, Jason, Alex)
> 
> v2: https://lore.kernel.org/kvm/20240412082121.33382-1-yi.l.liu@intel.com/
>   - Use IDA to track if PASID is attached or not in VFIO. (Jason)
>   - Fix the issue of calling pasid_at[de]tach_ioas callback unconditionally (Alex)
>   - Fix the wrong data copy in vfio_df_ioctl_pasid_detach_pt() (Zhenzhong)
>   - Minor tweaks in comments (Kevin)
> 
> v1: https://lore.kernel.org/kvm/20231127063909.129153-1-yi.l.liu@intel.com/
>   - Report PASID capability via VFIO_DEVICE_FEATURE (Alex)
> 
> rfc: https://lore.kernel.org/linux-iommu/20230926093121.18676-1-yi.l.liu@intel.com/
> 
> Regards,
> 	Yi Liu
> 
> Yi Liu (4):
>    ida: Add ida_find_first_range()
>    vfio-iommufd: Support pasid [at|de]tach for physical VFIO devices
>    vfio: VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT support pasid
>    iommufd: Extend IOMMU_GET_HW_INFO to report PASID capability
> 
>   drivers/iommu/iommufd/device.c | 24 +++++++++++-
>   drivers/pci/ats.c              | 33 ++++++++++++++++
>   drivers/vfio/device_cdev.c     | 62 +++++++++++++++++++++---------
>   drivers/vfio/iommufd.c         | 50 ++++++++++++++++++++++++
>   drivers/vfio/pci/vfio_pci.c    |  2 +
>   drivers/vfio/vfio.h            | 18 +++++++++
>   drivers/vfio/vfio_main.c       | 55 ++++++++++++++++++++++++++
>   include/linux/idr.h            | 11 ++++++
>   include/linux/pci-ats.h        |  3 ++
>   include/linux/vfio.h           | 11 ++++++
>   include/uapi/linux/iommufd.h   | 14 ++++++-
>   include/uapi/linux/vfio.h      | 29 +++++++++-----
>   lib/idr.c                      | 67 ++++++++++++++++++++++++++++++++
>   lib/test_ida.c                 | 70 ++++++++++++++++++++++++++++++++++
>   14 files changed, 419 insertions(+), 30 deletions(-)
>