[PATCH] iommu: Allow ATS to work on VFs when the PF uses IDENTITY
Baolu Lu
baolu.lu at linux.intel.com
Sun Aug 11 19:20:32 PDT 2024
On 8/8/24 2:19 AM, Jason Gunthorpe wrote:
> PCI ATS has a global Smallest Translation Unit field that is located in
> the PF but shared by all of the VFs.
>
> The expectation is that the STU will be set to the root port's global STU
> capability which is driven by the IO page table configuration of the iommu
> HW. Today it becomes set when the iommu driver first enables ATS.
>
> Thus, to enable ATS on the VF, the PF must have already had the correct
> STU programmed, even if ATS is off on the PF.
>
> Unfortunately the PF only programs the STU when the PF enables ATS. The
> iommu drivers tend to leave ATS disabled when IDENTITY translation is
> being used.
>
> Thus we can get into a state where the PF is setup to use IDENTITY with
> the DMA API while the VF would like to use VFIO with a PAGING domain and
> have ATS turned on. This fails because the PF never loaded a PAGING domain
> and so it never setup the STU, and the VF can't do it.
>
> The simplest solution is to have the iommu driver set the ATS STU when it
> probes the device. This way the ATS STU is loaded immediately at boot time
> to all PFs and there is no issue when a VF comes to use it.
>
> Add a new call pci_prepare_ats() which should be called by iommu drivers
> in their probe_device() op for every PCI device if the iommu driver
> supports ATS. This will setup the STU based on whatever page size
> capability the iommu HW has.
>
> Signed-off-by: Jason Gunthorpe<jgg at nvidia.com>
> ---
> drivers/iommu/amd/iommu.c | 3 ++
> drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 6 ++++
> drivers/iommu/intel/iommu.c | 1 +
> drivers/pci/ats.c | 33 +++++++++++++++++++++
> include/linux/pci-ats.h | 1 +
> 5 files changed, 44 insertions(+)
For Intel VT-d,
Reviewed-by: Lu Baolu <baolu.lu at linux.intel.com>
Thanks,
baolu
More information about the linux-arm-kernel
mailing list