* [PATCH] dma-direct: take dma-ranges/offsets into account in resource mapping
@ 2022-06-10 8:08 Serge Semin
2022-06-20 21:37 ` Serge Semin
0 siblings, 1 reply; 3+ messages in thread
From: Serge Semin @ 2022-06-10 8:08 UTC (permalink / raw)
To: Christoph Hellwig, Marek Szyprowski, Robin Murphy,
Vladimir Murzin
Cc: Serge Semin, Serge Semin, Alexey Malahov, Pavel Parkhomenko,
Manivannan Sadhasivam, Andrew Lunn, Sebastian Hesselbarth,
Gregory Clement, linux-arm-kernel, Srujana Challa, Arnaud Ebalard,
Boris Brezillon, linux-crypto, Vinod Koul, dmaengine, Shawn Guo,
Sascha Hauer, Li Yang, Geert Uytterhoeven, Magnus Damm,
linux-renesas-soc, Alex Deucher, Christian König,
Pan, Xinhui, David Airlie, Gerd Hoffmann, Tomasz Figa,
Oded Gabbay, Arnd Bergmann, Greg Kroah-Hartman,
Manivannan Sadhasivam, Andy Gross, Bjorn Andersson, linux-arm-msm,
Sunil Goutham, Linu Cherian, Geetha sowjanya, Jon Mason,
Dave Jiang, ntb, iommu, linux-kernel
A basic device-specific linear memory mapping was introduced back in
commit ("dma: Take into account dma_pfn_offset") as a single-valued offset
preserved in the device.dma_pfn_offset field, which was initialized for
instance by means of the "dma-ranges" DT property. Afterwards the
functionality was extended to support more than one device-specific region
defined in the device.dma_range_map list of maps. But all of these
improvements concerned a single pointer, page or sg DMA-mapping methods,
while the system resource mapping function turned to miss the
corresponding modification. Thus the dma_direct_map_resource() method now
just casts the CPU physical address to the device DMA address with no
dma-ranges-based mapping taking into account, which is obviously wrong.
Let's fix it by using the phys_to_dma_direct() method to get the
device-specific bus address from the passed memory resource for the case
of the directly mapped DMA.
Fixes: 25f1e1887088 ("dma: Take into account dma_pfn_offset")
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
---
After a long discussion with Christoph and Robin regarding this patch
here:
https://lore.kernel.org/lkml/20220324014836.19149-4-Sergey.Semin@baikalelectronics.ru
and here
https://lore.kernel.org/linux-pci/20220503225104.12108-2-Sergey.Semin@baikalelectronics.ru/
It was decided to consult with wider maintainers audience whether it's ok
to accept the change as is or a more sophisticated solution needs to be
found for the non-linear direct MMIO mapping.
Cc: Christoph Hellwig <hch@lst.de>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
file: arch/arm/mach-orion5x/board-dt.c
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Cc: Gregory Clement <gregory.clement@bootlin.com>
Cc: linux-arm-kernel@lists.infradead.org
file: drivers/crypto/marvell/cesa/cesa.c
Cc: Srujana Challa <schalla@marvell.com>
Cc: Arnaud Ebalard <arno@natisbad.org>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: linux-crypto@vger.kernel.org
file: drivers/dma/{fsl-edma-common.c,pl330.c,sh/rcar-dmac.c}
Cc: Vinod Koul <vkoul@kernel.org>
Cc: dmaengine@vger.kernel.org
file: arch/arm/boot/dts/{vfxxx.dtsi,ls1021a.dtsi,imx7ulp.dtsi,fsl-ls1043a.dtsi}
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Li Yang <leoyang.li@nxp.com>
Cc: linux-arm-kernel@lists.infradead.org
file: arch/arm/boot/dts/r8a77*.dtsi, arch/arm64/boot/dts/renesas/r8a77*.dtsi
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Magnus Damm <magnus.damm@gmail.com>
Cc: linux-renesas-soc@vger.kernel.org
file: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
file: drivers/gpu/drm/virtio/virtgpu_vram.c
Cc: David Airlie <airlied@linux.ie>
Cc: Gerd Hoffmann <kraxel@redhat.com>
file: drivers/media/common/videobuf2/videobuf2-dma-contig.c
Cc: Tomasz Figa <tfiga@chromium.org>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
file: drivers/misc/habanalabs/common/memory.c
Cc: Oded Gabbay <ogabbay@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
file: drivers/mtd/nand/raw/qcom_nandc.c
Cc: Manivannan Sadhasivam <mani@kernel.org>
file: arch/arm64/boot/dts/qcom/{ipq8074.dtsi,ipq6018.dtsi,qcom-sdx55.dtsi,qcom-ipq4019.dtsi,qcom-ipq8064.dtsi}
Cc: Andy Gross <agross@kernel.org>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: linux-arm-msm@vger.kernel.org
file: drivers/net/ethernet/marvell/octeontx2/af/rvu.c
Cc: Sunil Goutham <sgoutham@marvell.com>
Cc: Linu Cherian <lcherian@marvell.com>
Cc: Geetha sowjanya <gakula@marvell.com>
file: drivers/ntb/ntb_transport.c
Cc: Jon Mason <jdmason@kudzu.us>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: ntb@lists.linux.dev
---
kernel/dma/direct.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 9743c6ccce1a..bc06db74dfdb 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -497,7 +497,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
size_t size, enum dma_data_direction dir, unsigned long attrs)
{
- dma_addr_t dma_addr = paddr;
+ dma_addr_t dma_addr = phys_to_dma_direct(dev, paddr);
if (unlikely(!dma_capable(dev, dma_addr, size, false))) {
dev_err_once(dev,
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] dma-direct: take dma-ranges/offsets into account in resource mapping
2022-06-10 8:08 [PATCH] dma-direct: take dma-ranges/offsets into account in resource mapping Serge Semin
@ 2022-06-20 21:37 ` Serge Semin
2022-06-22 11:16 ` Christoph Hellwig
0 siblings, 1 reply; 3+ messages in thread
From: Serge Semin @ 2022-06-20 21:37 UTC (permalink / raw)
To: Serge Semin
Cc: Christoph Hellwig, Marek Szyprowski, Robin Murphy,
Vladimir Murzin, Alexey Malahov, Pavel Parkhomenko,
Manivannan Sadhasivam, Andrew Lunn, Sebastian Hesselbarth,
Gregory Clement, linux-arm-kernel, Srujana Challa, Arnaud Ebalard,
Boris Brezillon, linux-crypto, Vinod Koul, dmaengine, Shawn Guo,
Sascha Hauer, Li Yang, Geert Uytterhoeven, Magnus Damm,
linux-renesas-soc, Alex Deucher, Christian König,
Pan, Xinhui, David Airlie, Gerd Hoffmann, Tomasz Figa,
Oded Gabbay, Arnd Bergmann, Greg Kroah-Hartman,
Manivannan Sadhasivam, Andy Gross, Bjorn Andersson, linux-arm-msm,
Sunil Goutham, Linu Cherian, Geetha sowjanya, Jon Mason,
Dave Jiang, ntb, iommu, linux-kernel
Folks,
On Fri, Jun 10, 2022 at 11:08:02AM +0300, Serge Semin wrote:
> A basic device-specific linear memory mapping was introduced back in
> commit ("dma: Take into account dma_pfn_offset") as a single-valued offset
> preserved in the device.dma_pfn_offset field, which was initialized for
> instance by means of the "dma-ranges" DT property. Afterwards the
> functionality was extended to support more than one device-specific region
> defined in the device.dma_range_map list of maps. But all of these
> improvements concerned a single pointer, page or sg DMA-mapping methods,
> while the system resource mapping function turned to miss the
> corresponding modification. Thus the dma_direct_map_resource() method now
> just casts the CPU physical address to the device DMA address with no
> dma-ranges-based mapping taking into account, which is obviously wrong.
> Let's fix it by using the phys_to_dma_direct() method to get the
> device-specific bus address from the passed memory resource for the case
> of the directly mapped DMA.
So any comment on the suggest modification? Any notes against or for?
-Sergey
>
> Fixes: 25f1e1887088 ("dma: Take into account dma_pfn_offset")
> Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
>
> ---
>
> After a long discussion with Christoph and Robin regarding this patch
> here:
> https://lore.kernel.org/lkml/20220324014836.19149-4-Sergey.Semin@baikalelectronics.ru
> and here
> https://lore.kernel.org/linux-pci/20220503225104.12108-2-Sergey.Semin@baikalelectronics.ru/
> It was decided to consult with wider maintainers audience whether it's ok
> to accept the change as is or a more sophisticated solution needs to be
> found for the non-linear direct MMIO mapping.
>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Robin Murphy <robin.murphy@arm.com>
> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
>
> file: arch/arm/mach-orion5x/board-dt.c
> Cc: Andrew Lunn <andrew@lunn.ch>
> Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> Cc: Gregory Clement <gregory.clement@bootlin.com>
> Cc: linux-arm-kernel@lists.infradead.org
>
> file: drivers/crypto/marvell/cesa/cesa.c
> Cc: Srujana Challa <schalla@marvell.com>
> Cc: Arnaud Ebalard <arno@natisbad.org>
> Cc: Boris Brezillon <bbrezillon@kernel.org>
> Cc: linux-crypto@vger.kernel.org
>
> file: drivers/dma/{fsl-edma-common.c,pl330.c,sh/rcar-dmac.c}
> Cc: Vinod Koul <vkoul@kernel.org>
> Cc: dmaengine@vger.kernel.org
>
> file: arch/arm/boot/dts/{vfxxx.dtsi,ls1021a.dtsi,imx7ulp.dtsi,fsl-ls1043a.dtsi}
> Cc: Shawn Guo <shawnguo@kernel.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Li Yang <leoyang.li@nxp.com>
> Cc: linux-arm-kernel@lists.infradead.org
>
> file: arch/arm/boot/dts/r8a77*.dtsi, arch/arm64/boot/dts/renesas/r8a77*.dtsi
> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: Magnus Damm <magnus.damm@gmail.com>
> Cc: linux-renesas-soc@vger.kernel.org
>
> file: drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
>
> file: drivers/gpu/drm/virtio/virtgpu_vram.c
> Cc: David Airlie <airlied@linux.ie>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
>
> file: drivers/media/common/videobuf2/videobuf2-dma-contig.c
> Cc: Tomasz Figa <tfiga@chromium.org>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
>
> file: drivers/misc/habanalabs/common/memory.c
> Cc: Oded Gabbay <ogabbay@kernel.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>
> file: drivers/mtd/nand/raw/qcom_nandc.c
> Cc: Manivannan Sadhasivam <mani@kernel.org>
>
> file: arch/arm64/boot/dts/qcom/{ipq8074.dtsi,ipq6018.dtsi,qcom-sdx55.dtsi,qcom-ipq4019.dtsi,qcom-ipq8064.dtsi}
> Cc: Andy Gross <agross@kernel.org>
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: linux-arm-msm@vger.kernel.org
>
> file: drivers/net/ethernet/marvell/octeontx2/af/rvu.c
> Cc: Sunil Goutham <sgoutham@marvell.com>
> Cc: Linu Cherian <lcherian@marvell.com>
> Cc: Geetha sowjanya <gakula@marvell.com>
>
> file: drivers/ntb/ntb_transport.c
> Cc: Jon Mason <jdmason@kudzu.us>
> Cc: Dave Jiang <dave.jiang@intel.com>
> Cc: ntb@lists.linux.dev
> ---
> kernel/dma/direct.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
> index 9743c6ccce1a..bc06db74dfdb 100644
> --- a/kernel/dma/direct.c
> +++ b/kernel/dma/direct.c
> @@ -497,7 +497,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
> dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
> size_t size, enum dma_data_direction dir, unsigned long attrs)
> {
> - dma_addr_t dma_addr = paddr;
> + dma_addr_t dma_addr = phys_to_dma_direct(dev, paddr);
>
> if (unlikely(!dma_capable(dev, dma_addr, size, false))) {
> dev_err_once(dev,
> --
> 2.35.1
>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] dma-direct: take dma-ranges/offsets into account in resource mapping
2022-06-20 21:37 ` Serge Semin
@ 2022-06-22 11:16 ` Christoph Hellwig
0 siblings, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2022-06-22 11:16 UTC (permalink / raw)
To: Serge Semin
Cc: Serge Semin, Christoph Hellwig, Marek Szyprowski, Robin Murphy,
Vladimir Murzin, Alexey Malahov, Pavel Parkhomenko,
Manivannan Sadhasivam, Andrew Lunn, Sebastian Hesselbarth,
Gregory Clement, linux-arm-kernel, Srujana Challa, Arnaud Ebalard,
Boris Brezillon, linux-crypto, Vinod Koul, dmaengine, Shawn Guo,
Sascha Hauer, Li Yang, Geert Uytterhoeven, Magnus Damm,
linux-renesas-soc, Alex Deucher, Christian König,
Pan, Xinhui, David Airlie, Gerd Hoffmann, Tomasz Figa,
Oded Gabbay, Arnd Bergmann, Greg Kroah-Hartman,
Manivannan Sadhasivam, Andy Gross, Bjorn Andersson, linux-arm-msm,
Sunil Goutham, Linu Cherian, Geetha sowjanya, Jon Mason,
Dave Jiang, ntb, iommu, linux-kernel
I'd really like to hear something from the driver maintainers. The
cod change itself looks fine, we just need to make sure it does not
break any driver assumptions.
And I think at least for the PCIe P2P and NTB cases I fear it might
break them. The proper logic for those is in the p2p helpers, but
it seems like not everyone is using them.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-06-22 11:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-10 8:08 [PATCH] dma-direct: take dma-ranges/offsets into account in resource mapping Serge Semin
2022-06-20 21:37 ` Serge Semin
2022-06-22 11:16 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox