[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <BN6PR12MB1652414344196BA60520B828F7320@BN6PR12MB1652.namprd12.prod.outlook.com>
Date: Tue, 28 Mar 2017 20:18:26 +0000
From: "Deucher, Alexander" <Alexander.Deucher@....com>
To: 'Joerg Roedel' <joro@...tes.org>,
Bjorn Helgaas <bhelgaas@...gle.com>
CC: "linux-pci@...r.kernel.org" <linux-pci@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
Joerg Roedel <jroedel@...e.de>,
Daniel Drake <drake@...lessm.com>,
"Nath, Arindam" <Arindam.Nath@....com>
Subject: RE: [PATCH] PCI: Blacklist AMD Stoney GPU devices for ATS
> -----Original Message-----
> From: Joerg Roedel [mailto:joro@...tes.org]
> Sent: Tuesday, March 28, 2017 8:17 AM
> To: Bjorn Helgaas
> Cc: linux-pci@...r.kernel.org; linux-kernel@...r.kernel.org; Joerg Roedel;
> Daniel Drake; Deucher, Alexander
> Subject: [PATCH] PCI: Blacklist AMD Stoney GPU devices for ATS
>
> From: Joerg Roedel <jroedel@...e.de>
>
> ATS is broken on these devices. Under invalidation load, the
> GPU does not reply to invalidations anymore, causing
> Completion-wait loop timeouts on the AMD IOMMU driver side.
> Fix it by not enabling ATS on these devices.
>
> Note that below mentioned commit is not broken, it just
> triggers the issue because it might cause invalidation
> storms on devices.
>
> Fixes: b1516a14657a ('iommu/amd: Implement flush queue')
> Reported-by: Daniel Drake <drake@...lessm.com>
> Cc: Daniel Drake <drake@...lessm.com>
> Cc: Alexander Deucher <Alexander.Deucher@....com>
> Signed-off-by: Joerg Roedel <jroedel@...e.de>
Did you see Arindam's patch from yesterday[1]? Not sure which is the proper fix, maybe both?
Alex
[1] - https://lists.freedesktop.org/archives/amd-gfx/2017-March/006862.html
> ---
> drivers/pci/ats.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c
> index eeb9fb2..711bdb2 100644
> --- a/drivers/pci/ats.c
> +++ b/drivers/pci/ats.c
> @@ -17,10 +17,18 @@
>
> #include "pci.h"
>
> +static const struct pci_device_id broken_ats_tbl[] = {
> + { PCI_DEVICE(PCI_VENDOR_ID_AMD, 0x98e4) }, /* AMD Stoney GPU
> part */
> + { 0 }
> +};
> +
> void pci_ats_init(struct pci_dev *dev)
> {
> int pos;
>
> + if (pci_match_id(broken_ats_tbl, dev))
> + return;
> +
> pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ATS);
> if (!pos)
> return;
> --
> 1.9.1
Powered by blists - more mailing lists