Message ID | 1491568828-17146-1-git-send-email-joro@8bytes.org (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Fri, 2017-04-07 at 14:40 +0200, Joerg Roedel wrote: > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index 6736836..3bc9856 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c > @@ -4634,3 +4634,22 @@ static void quirk_no_aersid(struct pci_dev *pdev) > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2031, quirk_no_aersid); > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2032, quirk_no_aersid); > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2033, quirk_no_aersid); > + > +/* > + * Some devices have a broken ATS implementation causing IOMMU stalls. > + * Don't use ATS for those devices. > + */ > +static void quirk_disable_ats(struct pci_dev *pdev) > +{ > +#ifdef CONFIG_PCI_ATS > + /* > + * Set pdev->ats_cap = 0 to make pci_enable_ats() bail out > + * early. > + */ > + dev_info(&pdev->dev, "QUIRK: Disabling ATS"); > + pdev->ats_cap = 0; > +#endif > +} > + > +/* AMD Stoney platform GPU */ > +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_disable_ats); Why not put the #ifdef around *all* of the above?
On Fri, Apr 07, 2017 at 02:53:05PM +0200, David Woodhouse wrote: > On Fri, 2017-04-07 at 14:40 +0200, Joerg Roedel wrote: > > > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > > index 6736836..3bc9856 100644 > > --- a/drivers/pci/quirks.c > > +++ b/drivers/pci/quirks.c > > @@ -4634,3 +4634,22 @@ static void quirk_no_aersid(struct pci_dev *pdev) > > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2031, quirk_no_aersid); > > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2032, quirk_no_aersid); > > DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2033, quirk_no_aersid); > > + > > +/* > > + * Some devices have a broken ATS implementation causing IOMMU stalls. > > + * Don't use ATS for those devices. > > + */ > > +static void quirk_disable_ats(struct pci_dev *pdev) > > +{ > > +#ifdef CONFIG_PCI_ATS > > + /* > > + * Set pdev->ats_cap = 0 to make pci_enable_ats() bail out > > + * early. > > + */ > > + dev_info(&pdev->dev, "QUIRK: Disabling ATS"); > > + pdev->ats_cap = 0; > > +#endif > > +} > > + > > +/* AMD Stoney platform GPU */ > > +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_disable_ats); > > Why not put the #ifdef around *all* of the above? Good point, I'll change that.
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 6736836..3bc9856 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -4634,3 +4634,22 @@ static void quirk_no_aersid(struct pci_dev *pdev) DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2031, quirk_no_aersid); DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2032, quirk_no_aersid); DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2033, quirk_no_aersid); + +/* + * Some devices have a broken ATS implementation causing IOMMU stalls. + * Don't use ATS for those devices. + */ +static void quirk_disable_ats(struct pci_dev *pdev) +{ +#ifdef CONFIG_PCI_ATS + /* + * Set pdev->ats_cap = 0 to make pci_enable_ats() bail out + * early. + */ + dev_info(&pdev->dev, "QUIRK: Disabling ATS"); + pdev->ats_cap = 0; +#endif +} + +/* AMD Stoney platform GPU */ +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x98e4, quirk_disable_ats);