* Re: [PATCH] ARM: dma-mapping: Clear DMA ops on teardown
2019-01-21 14:52 ` [PATCH] ARM: dma-mapping: Clear DMA ops on teardown Robin Murphy
@ 2019-01-21 15:34 ` Thierry Reding
2019-02-04 11:48 ` Marek Szyprowski
1 sibling, 0 replies; 3+ messages in thread
From: Thierry Reding @ 2019-01-21 15:34 UTC (permalink / raw)
To: Robin Murphy
Cc: iommu, linux-arm-kernel, linux-kernel, m.szyprowski, hch,
rmk+kernel, bskeggs, tjakobi, b.zolnierkie
[-- Attachment #1: Type: text/plain, Size: 1385 bytes --]
On Mon, Jan 21, 2019 at 02:52:16PM +0000, Robin Murphy wrote:
> Installing the appropriate non-IOMMU DMA ops in arm_iommu_detch_device()
> serves the case where IOMMU-aware drivers choose to control their own
> mapping but still make DMA API calls, however it also affects the case
> when the arch code itself tears down the mapping upon driver unbinding,
> where the ops now get left in place and can inhibit arch_setup_dma_ops()
> on subsequent re-probe attempts.
>
> Fix the latter case by making sure that arch_teardown_dma_ops() cleans
> up whenever the ops were automatically installed by its counterpart.
>
> Reported-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Fixes: 1874619a7df4 "ARM: dma-mapping: Set proper DMA ops in arm_iommu_detach_device()"
> Tested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Signed-off-by: Robin Murphy <robin.murphy@arm.com>
> ---
>
> Sorry for the delay - there was a giant email infrastructure cock-up just
> at the point I wanted to go back through my archive and double-check the
> discussion around the original commit...
>
> Robin.
>
> arch/arm/mm/dma-mapping.c | 2 ++
> 1 file changed, 2 insertions(+)
I had also tested your draft on Tegra last week and this looks
identical, so:
Tested-by: Thierry Reding <treding@nvidia.com>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ARM: dma-mapping: Clear DMA ops on teardown
2019-01-21 14:52 ` [PATCH] ARM: dma-mapping: Clear DMA ops on teardown Robin Murphy
2019-01-21 15:34 ` Thierry Reding
@ 2019-02-04 11:48 ` Marek Szyprowski
1 sibling, 0 replies; 3+ messages in thread
From: Marek Szyprowski @ 2019-02-04 11:48 UTC (permalink / raw)
To: Robin Murphy, iommu, linux-arm-kernel, linux-kernel
Cc: hch, treding, rmk+kernel, bskeggs, tjakobi, b.zolnierkie
Hi Robin,
On 2019-01-21 15:52, Robin Murphy wrote:
> Installing the appropriate non-IOMMU DMA ops in arm_iommu_detch_device()
> serves the case where IOMMU-aware drivers choose to control their own
> mapping but still make DMA API calls, however it also affects the case
> when the arch code itself tears down the mapping upon driver unbinding,
> where the ops now get left in place and can inhibit arch_setup_dma_ops()
> on subsequent re-probe attempts.
>
> Fix the latter case by making sure that arch_teardown_dma_ops() cleans
> up whenever the ops were automatically installed by its counterpart.
>
> Reported-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Fixes: 1874619a7df4 "ARM: dma-mapping: Set proper DMA ops in arm_iommu_detach_device()"
> Tested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
> Signed-off-by: Robin Murphy <robin.murphy@arm.com>
> ---
>
> Sorry for the delay - there was a giant email infrastructure cock-up just
> at the point I wanted to go back through my archive and double-check the
> discussion around the original commit...
No problem, could you also upload it to rmk's patch tracking system?
IMHO rmk's tree will be the best place to handle this fix.
> Robin.
>
> arch/arm/mm/dma-mapping.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
> index f1e2922e447c..1e3e08a1c456 100644
> --- a/arch/arm/mm/dma-mapping.c
> +++ b/arch/arm/mm/dma-mapping.c
> @@ -2390,4 +2390,6 @@ void arch_teardown_dma_ops(struct device *dev)
> return;
>
> arm_teardown_iommu_dma_ops(dev);
> + /* Let arch_setup_dma_ops() start again from scratch upon re-probe */
> + set_dma_ops(dev, NULL);
> }
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
^ permalink raw reply [flat|nested] 3+ messages in thread