lkml.org 
[lkml]   [2020]   [Jul]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 1/1] PCI/ATS: Check PRI supported on the PF device when SRIOV is enabled
    From
    Date
    On 7/24/20 6:37 AM, Ashok Raj wrote:
    > PASID and PRI capabilities are only enumerated in PF devices. VF devices
    > do not enumerate these capabilites. IOMMU drivers also need to enumerate
    > them before enabling features in the IOMMU. Extending the same support as
    > PASID feature discovery (pci_pasid_features) for PRI.
    >
    > Fixes: b16d0cb9e2fc ("iommu/vt-d: Always enable PASID/PRI PCI capabilities before ATS")
    > Signed-off-by: Ashok Raj <ashok.raj@intel.com>
    >
    > To: Bjorn Helgaas <bhelgaas@google.com>
    > To: Joerg Roedel <joro@8bytes.com>
    > To: Lu Baolu <baolu.lu@intel.com>

    Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>

    Best regards,
    baolu

    > Cc: stable@vger.kernel.org
    > Cc: linux-pci@vger.kernel.org
    > Cc: linux-kernel@vger.kernel.org
    > Cc: Ashok Raj <ashok.raj@intel.com>
    > Cc: iommu@lists.linux-foundation.org
    > ---
    > v3: Added Fixes tag
    > v2: Fixed build failure reported from lkp when CONFIG_PRI=n
    >
    > drivers/iommu/intel/iommu.c | 2 +-
    > drivers/pci/ats.c | 13 +++++++++++++
    > include/linux/pci-ats.h | 4 ++++
    > 3 files changed, 18 insertions(+), 1 deletion(-)
    >
    > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
    > index d759e7234e98..276452f5e6a7 100644
    > --- a/drivers/iommu/intel/iommu.c
    > +++ b/drivers/iommu/intel/iommu.c
    > @@ -2560,7 +2560,7 @@ static struct dmar_domain *dmar_insert_one_dev_info(struct intel_iommu *iommu,
    > }
    >
    > if (info->ats_supported && ecap_prs(iommu->ecap) &&
    > - pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_PRI))
    > + pci_pri_supported(pdev))
    > info->pri_supported = 1;
    > }
    > }
    > diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c
    > index b761c1f72f67..2e6cf0c700f7 100644
    > --- a/drivers/pci/ats.c
    > +++ b/drivers/pci/ats.c
    > @@ -325,6 +325,19 @@ int pci_prg_resp_pasid_required(struct pci_dev *pdev)
    >
    > return pdev->pasid_required;
    > }
    > +
    > +/**
    > + * pci_pri_supported - Check if PRI is supported.
    > + * @pdev: PCI device structure
    > + *
    > + * Returns true if PRI capability is present, false otherwise.
    > + */
    > +bool pci_pri_supported(struct pci_dev *pdev)
    > +{
    > + /* VFs share the PF PRI configuration */
    > + return !!(pci_physfn(pdev)->pri_cap);
    > +}
    > +EXPORT_SYMBOL_GPL(pci_pri_supported);
    > #endif /* CONFIG_PCI_PRI */
    >
    > #ifdef CONFIG_PCI_PASID
    > diff --git a/include/linux/pci-ats.h b/include/linux/pci-ats.h
    > index f75c307f346d..df54cd5b15db 100644
    > --- a/include/linux/pci-ats.h
    > +++ b/include/linux/pci-ats.h
    > @@ -28,6 +28,10 @@ int pci_enable_pri(struct pci_dev *pdev, u32 reqs);
    > void pci_disable_pri(struct pci_dev *pdev);
    > int pci_reset_pri(struct pci_dev *pdev);
    > int pci_prg_resp_pasid_required(struct pci_dev *pdev);
    > +bool pci_pri_supported(struct pci_dev *pdev);
    > +#else
    > +static inline bool pci_pri_supported(struct pci_dev *pdev)
    > +{ return false; }
    > #endif /* CONFIG_PCI_PRI */
    >
    > #ifdef CONFIG_PCI_PASID
    >

    \
     
     \ /
      Last update: 2020-07-24 04:37    [W:2.597 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site