[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <a2013d45-69d4-5c24-f833-a27e5ac20cb8@samsung.com>
Date: Mon, 4 Feb 2019 12:48:14 +0100
From: Marek Szyprowski <m.szyprowski@...sung.com>
To: Robin Murphy <robin.murphy@....com>,
iommu@...ts.linux-foundation.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Cc: hch@....de, treding@...dia.com, rmk+kernel@...linux.org.uk,
bskeggs@...hat.com, tjakobi@...h.uni-bielefeld.de,
b.zolnierkie@...sung.com
Subject: Re: [PATCH] ARM: dma-mapping: Clear DMA ops on teardown
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@...h.uni-bielefeld.de>
> Reported-by: Marek Szyprowski <m.szyprowski@...sung.com>
> Fixes: 1874619a7df4 "ARM: dma-mapping: Set proper DMA ops in arm_iommu_detach_device()"
> Tested-by: Tobias Jakobi <tjakobi@...h.uni-bielefeld.de>
> Signed-off-by: Robin Murphy <robin.murphy@....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
Powered by blists - more mailing lists