2015-07-30 10:05:28

by Joerg Roedel

[permalink] [raw]
Subject: [PATCH] iommu/amd: Allow non-ATS devices in IOMMUv2 domains

From: Joerg Roedel <[email protected]>

With the grouping of multi-function devices a non-ATS
capable device might also end up in the same domain as an
IOMMUv2 capable device.
So handle this situation gracefully and don't consider it a
bug anymore.

Signed-off-by: Joerg Roedel <[email protected]>
---
drivers/iommu/amd_iommu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index fa9508b..658ee39 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -3318,7 +3318,12 @@ static int __flush_pasid(struct protection_domain *domain, int pasid,
struct amd_iommu *iommu;
int qdep;

- BUG_ON(!dev_data->ats.enabled);
+ /*
+ There might be non-IOMMUv2 capable devices in an IOMMUv2
+ * domain.
+ */
+ if (!dev_data->ats.enabled)
+ continue;

qdep = dev_data->ats.qdep;
iommu = amd_iommu_rlookup_table[dev_data->devid];
--
1.9.1


2015-07-30 10:09:18

by Oded Gabbay

[permalink] [raw]
Subject: Re: [PATCH] iommu/amd: Allow non-ATS devices in IOMMUv2 domains

Joerg,
Why amdkfd's devices are considered a non-IOMMUv2 capable devices ?
After all, they contain the IOMMUv2 H/W and use it constantly for HSA.

ODed

On Thu, Jul 30, 2015 at 1:05 PM, Joerg Roedel <[email protected]> wrote:
> From: Joerg Roedel <[email protected]>
>
> With the grouping of multi-function devices a non-ATS
> capable device might also end up in the same domain as an
> IOMMUv2 capable device.
> So handle this situation gracefully and don't consider it a
> bug anymore.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> drivers/iommu/amd_iommu.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
> index fa9508b..658ee39 100644
> --- a/drivers/iommu/amd_iommu.c
> +++ b/drivers/iommu/amd_iommu.c
> @@ -3318,7 +3318,12 @@ static int __flush_pasid(struct protection_domain *domain, int pasid,
> struct amd_iommu *iommu;
> int qdep;
>
> - BUG_ON(!dev_data->ats.enabled);
> + /*
> + There might be non-IOMMUv2 capable devices in an IOMMUv2
> + * domain.
> + */
> + if (!dev_data->ats.enabled)
> + continue;
>
> qdep = dev_data->ats.qdep;
> iommu = amd_iommu_rlookup_table[dev_data->devid];
> --
> 1.9.1
>

2015-07-30 10:12:22

by Oded Gabbay

[permalink] [raw]
Subject: Re: [PATCH] iommu/amd: Allow non-ATS devices in IOMMUv2 domains

On Thu, Jul 30, 2015 at 1:05 PM, Joerg Roedel <[email protected]> wrote:
> From: Joerg Roedel <[email protected]>
>
> With the grouping of multi-function devices a non-ATS
> capable device might also end up in the same domain as an
> IOMMUv2 capable device.
> So handle this situation gracefully and don't consider it a
> bug anymore.
>
> Signed-off-by: Joerg Roedel <[email protected]>
> ---
> drivers/iommu/amd_iommu.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
> index fa9508b..658ee39 100644
> --- a/drivers/iommu/amd_iommu.c
> +++ b/drivers/iommu/amd_iommu.c
> @@ -3318,7 +3318,12 @@ static int __flush_pasid(struct protection_domain *domain, int pasid,
> struct amd_iommu *iommu;
> int qdep;
>
> - BUG_ON(!dev_data->ats.enabled);
> + /*
> + There might be non-IOMMUv2 capable devices in an IOMMUv2
> + * domain.
> + */
> + if (!dev_data->ats.enabled)
> + continue;
>
> qdep = dev_data->ats.qdep;
> iommu = amd_iommu_rlookup_table[dev_data->devid];
> --
> 1.9.1
>
This series, with the additional patch is:
Tested-by: "Oded Gabbay <[email protected]>"

2015-07-30 11:24:31

by Jörg Rödel

[permalink] [raw]
Subject: Re: [PATCH] iommu/amd: Allow non-ATS devices in IOMMUv2 domains

Hi Oded,

On Thu, Jul 30, 2015 at 01:08:46PM +0300, Oded Gabbay wrote:
> Why amdkfd's devices are considered a non-IOMMUv2 capable devices ?
> After all, they contain the IOMMUv2 H/W and use it constantly for HSA.

With 4.2 the AMD IOMMU driver relies on iommu groups from the iommu core
code. With that, all functions of a multi-function device will be in one
group (and have to be in one domain). This means that the audio device
which comes with every HSA GPU is in the same group, and this device
lacks the IOMMUv2 features.


Joerg