Hi,

This is a follow-up to the series [0] that adds an ATS control property
to vfio-pci and wires iommufd support reporting so vfio-pci can decide
whether to expose the ATS PCIe extended capability to the guest.

The new vfio-pci property is:
  ats=on|off|auto (default: auto)

Behavior:
- off: always masks ATS from guest view
- on: requires ATS support; fails realize if kernel reports no ATS
  support via IOMMU_HW_CAP_PCI_ATS_NOT_SUPPORTED
- auto: masks ATS only when kernel reports no ATS support via
        IOMMU_HW_CAP_PCI_ATS_NOT_SUPPORTED

To preserve machine compatibility for older machine types, this series adds:
  { "vfio-pci", "ats", "on" } to hw_compat_11_0.

Please note that no linux-headers sync patch is included in this series
because IOMMU_HW_CAP_PCI_ATS_NOT_SUPPORTED is already present in
linux-headers/linux/iommufd.h in the current base.

Testing:
Verified ATS capability visibility changes with vfio-pci ats=off/on/auto
on an NVIDIA Grace system:
- ats=on + ATS supported by kernel => propagate ATS extended cap to
  guest view
- ats=auto + ATS supported by kernel => propagate ATS extended cap to
  guest view
- ats=on + hiod_iommufd_support_ats modified to return false (mimic
  kernel-reported unsupported ATS) => realize failure
- ats=auto + hiod_iommufd_support_ats modified to return false (mimic
  kernel-reported unsupported ATS) => ATS masked
- ats=off => ATS masked
- ats=on + no ATS support in physical device => warning + no ATS ext cap

Changes from v1:
- Set ats_needed to false by default in
  vfio_pci_ats_requested_and_supported()
- Revise log prefix from "vfio" to "vfio-pci" in
  vfio_pci_ats_requested_and_supported()
- Squash compat update patch into patch for introducing ats property for
  bisectibility
- Revise comments and descriptions for support_ats(),
  vfio_pci_ats_requested_and_supported(), and vfio_pci_class_init() to
  be more generic, removing references to
  IOMMU_HW_CAP_PCI_ATS_NOT_SUPPORTED
- Emit a warning when ats=on and no ATS support in physical device

Changes from "Resolve AUTO properties" series:
- Split into separate patches for support_ats() handler introduction and
  iommufd implementation, "ats" property addition, and compat property fix
- Rebase on vfio-next
- Remove unnecessary includes for hw/vfio/pci.c
- Rename ats_need to ats_needed for vfio_pci_ats_requested_and_supported()
- Move the vfio_pci_ats_requested_and_supported() call to
  vfio_pci_add_capabilities() so we can propagate the Error **, and then pass
  ats_needed as a new input arg to vfio_add_ext_cap
- Fix indent error in vfio_add_ext_cap()
- Break and add a pcie_add_capability() call for the PASID case in
  vfio_add_ext_cap()
- Update comment about return value for support_ats()

Thanks,
Nathan

[0] 
https://lore.kernel.org/qemu-devel/[email protected]/

Nathan Chen (3):
  iommufd: Introduce handler for device ATS support
  vfio/pci: Add ats property
  vfio/pci: Warn when ats=on but host device lacks ATS cap

 hw/vfio/pci.h                      |  1 +
 include/system/host_iommu_device.h |  9 ++++
 backends/iommufd.c                 |  8 +++
 hw/core/machine.c                  |  1 +
 hw/vfio/pci.c                      | 81 ++++++++++++++++++++++++++++--
 5 files changed, 97 insertions(+), 3 deletions(-)

-- 
2.43.0


Reply via email to