mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 07:04:24 +00:00
iommu/vt-d: Move pfsid and ats_qdep calculation to device probe path
They should be part of the per-device iommu private data initialization. Reviewed-by: Jacob Pan <jacob.jun.pan@linux.intel.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Link: https://lore.kernel.org/r/20230324120234.313643-5-baolu.lu@linux.intel.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
3d4c7cc3d1
commit
5ae4008055
1 changed files with 11 additions and 15 deletions
|
@ -1406,20 +1406,6 @@ static void iommu_enable_pci_caps(struct device_domain_info *info)
|
|||
return;
|
||||
|
||||
pdev = to_pci_dev(info->dev);
|
||||
/* For IOMMU that supports device IOTLB throttling (DIT), we assign
|
||||
* PFSID to the invalidation desc of a VF such that IOMMU HW can gauge
|
||||
* queue depth at PF level. If DIT is not set, PFSID will be treated as
|
||||
* reserved, which should be set to 0.
|
||||
*/
|
||||
if (!ecap_dit(info->iommu->ecap))
|
||||
info->pfsid = 0;
|
||||
else {
|
||||
struct pci_dev *pf_pdev;
|
||||
|
||||
/* pdev will be returned if device is not a vf */
|
||||
pf_pdev = pci_physfn(pdev);
|
||||
info->pfsid = pci_dev_id(pf_pdev);
|
||||
}
|
||||
|
||||
/* The PCIe spec, in its wisdom, declares that the behaviour of
|
||||
the device if you enable PASID support after ATS support is
|
||||
|
@ -1438,7 +1424,6 @@ static void iommu_enable_pci_caps(struct device_domain_info *info)
|
|||
!pci_enable_ats(pdev, VTD_PAGE_SHIFT)) {
|
||||
info->ats_enabled = 1;
|
||||
domain_update_iotlb(info->domain);
|
||||
info->ats_qdep = pci_ats_queue_depth(pdev);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4521,6 +4506,17 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev)
|
|||
dmar_ats_supported(pdev, iommu)) {
|
||||
info->ats_supported = 1;
|
||||
info->dtlb_extra_inval = dev_needs_extra_dtlb_flush(pdev);
|
||||
|
||||
/*
|
||||
* For IOMMU that supports device IOTLB throttling
|
||||
* (DIT), we assign PFSID to the invalidation desc
|
||||
* of a VF such that IOMMU HW can gauge queue depth
|
||||
* at PF level. If DIT is not set, PFSID will be
|
||||
* treated as reserved, which should be set to 0.
|
||||
*/
|
||||
if (ecap_dit(iommu->ecap))
|
||||
info->pfsid = pci_dev_id(pci_physfn(pdev));
|
||||
info->ats_qdep = pci_ats_queue_depth(pdev);
|
||||
}
|
||||
if (sm_supported(iommu)) {
|
||||
if (pasid_supported(iommu)) {
|
||||
|
|
Loading…
Reference in a new issue