dmaengine.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] dmaengine: virt-dma: convert tasklet to BH workqueue for callback invocation
@ 2025-06-16 12:48 Alexander Kochetkov
  2025-06-16 12:48 ` [PATCH v2 1/2] " Alexander Kochetkov
  2025-06-16 12:48 ` [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform Alexander Kochetkov
  0 siblings, 2 replies; 14+ messages in thread
From: Alexander Kochetkov @ 2025-06-16 12:48 UTC (permalink / raw)
  To: Vinod Koul, dmaengine, linux-kernel
  Cc: Nishad Saraf, Lizhi Hou, Jacky Huang, Shan-Chun Hung,
	Florian Fainelli, Ray Jui, Scott Branden, Lars-Peter Clausen,
	Paul Cercueil, Eugeniy Paltsev, Manivannan Sadhasivam, Frank Li,
	Zhou Wang, Longfang Liu, Andy Shevchenko, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Keguang Zhang, Sean Wang,
	Matthias Brugger, AngeloGioacchino Del Regno, Andreas Färber,
	Daniel Mack, Haojian Zhuang, Robert Jarzmik, Paul Walmsley,
	Samuel Holland, Orson Zhai, Baolin Wang, Chunyan Zhang,
	Patrice Chotard, Amélie Delaunay, Maxime Coquelin,
	Alexandre Torgue, Chen-Yu Tsai, Jernej Skrabec, Laxman Dewangan,
	Jon Hunter, Thierry Reding, Peter Ujfalusi, Kunihiko Hayashi,
	Masami Hiramatsu, Dave Jiang, Amit Vadhavana,
	Uwe Kleine-König, Ulf Hansson, Md Sadre Alam,
	Alexander Kochetkov, Casey Connolly, Kees Cook, Fenghua Yu,
	Jyothi Kumar Seerapu

Hello!

Here is v2.

I've updated patch accoding to recomendations from Andy Shevchenko:
- where possible I placed #include <linux/interrupt.h> in correct position
  to keep include list ordered.

Also I provide patch file for Kconfig files. It allows to compile most of
virt-dma users on unsupported architecture. I've used ARM64 configuration
to compile kernel.

One driver (qcom_adm.o) is impossible to compile on ARM64, and that intended
behaviour. It has condition 'depends on (ARCH_QCOM || COMPILE_TEST) &&
!PHYS_ADDR_T_64BIT' preventing from building it on 64-bit architectures.
I've checked it doesn't touch virt-dma fields directly and contains
#include <linux/interrupt.h> already. It looks that it doesn't need any
changes. Anyway, I tried to compile it and only get the following errors:

/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_process_fc_descriptors':
/kernel-source/drivers/dma/qcom/qcom_adm.c:245:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  245 |                 src = &achan->slave.src_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c:251:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  251 |                 dst = &achan->slave.dst_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_process_non_fc_descriptors':
/kernel-source/drivers/dma/qcom/qcom_adm.c:309:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  309 |                 src = &achan->slave.src_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c:313:21: error: assignment to 'u32 *' 
{aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *' 
{aka 'long long unsigned int *'} [-Werror=incompatible-pointer-types]
  313 |                 dst = &achan->slave.dst_addr;
      |                     ^
/kernel-source/drivers/dma/qcom/qcom_adm.c: In function 'adm_dma_probe':
/kernel-source/drivers/dma/qcom/qcom_adm.c:77:41: warning: conversion from 
'long unsigned int' to 'u32' {aka 'unsigned int'} changes value from 
'18446744072371568648' to '2956984328' [-Woverflow]
   77 | #define ADM_CI_RANGE_START(x)           ((x) << 16)
/kernel-source/drivers/dma/qcom/qcom_adm.c:848:16: note: in expansion of 
macro 'ADM_CI_RANGE_START'
  848 |         writel(ADM_CI_RANGE_START(0x40) | ADM_CI_RANGE_END(0xb0) |


In order to detect all users of virt-dma, I did following.

I got all include files containing 'virt-dma.h' or 'struct virt_dma_chan'.

$ git grep -l -e virt-dma.h -e 'struct virt_dma_chan' -- '*.h'
drivers/dma/amd/ae4dma/ae4dma.h
drivers/dma/amd/ptdma/ptdma.h
drivers/dma/amd/qdma/qdma.h
drivers/dma/dw-axi-dmac/dw-axi-dmac.h
drivers/dma/dw-edma/dw-edma-core.h
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
drivers/dma/fsl-edma-common.h
drivers/dma/hsu/hsu.h
drivers/dma/idma64.h
drivers/dma/sf-pdma/sf-pdma.h
drivers/dma/st_fdma.h
drivers/dma/virt-dma.h

I got all include files containing all include files found in step 1:

$ git grep -l -e ae4dma.h -e ptdma.h -e qdma.h -e dw-axi-dmac.h \
              -e dw-edma-core.h -e dpaa2-qdma.h -e fsl-edma-common.h \
              -e hsu.h -e idma64.h -e sf-pdma.h -e st_fdma.h -e virt-dma.h \
              -e 'struct virt_dma_chan' -- '*.h'
drivers/dma/amd/ae4dma/ae4dma.h
drivers/dma/amd/ptdma/ptdma.h
drivers/dma/amd/qdma/qdma.h
drivers/dma/dw-axi-dmac/dw-axi-dmac.h
drivers/dma/dw-edma/dw-edma-core.h
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.h
drivers/dma/fsl-edma-common.h
drivers/dma/hsu/hsu.h
drivers/dma/idma64.h
drivers/dma/sf-pdma/sf-pdma.h
drivers/dma/st_fdma.h
drivers/dma/virt-dma.h
drivers/net/ethernet/mediatek/mtk_eth_soc.h
include/linux/dma/hsu.h

After that I got all users of virt dma:
$ git grep -l -e ae4dma.h -e ptdma.h -e qdma.h -e dw-axi-dmac.h \
              -e dw-edma-core.h -e dpaa2-qdma.h -e fsl-edma-common.h \
              -e hsu.h -e idma64.h -e sf-pdma.h -e st_fdma.h -e virt-dma.h \
              -e mtk_eth_soc.h -e 'struct virt_dma_chan' -- '*.c'

drivers/dma/amba-pl08x.c
drivers/dma/amd/ae4dma/ae4dma-dev.c
drivers/dma/amd/ae4dma/ae4dma-pci.c
drivers/dma/amd/ptdma/ptdma-debugfs.c
drivers/dma/amd/ptdma/ptdma-dev.c
drivers/dma/amd/ptdma/ptdma-dmaengine.c
drivers/dma/amd/ptdma/ptdma-pci.c
drivers/dma/amd/qdma/qdma-comm-regs.c
drivers/dma/amd/qdma/qdma.c
drivers/dma/arm-dma350.c
drivers/dma/at_hdmac.c
drivers/dma/bcm2835-dma.c
drivers/dma/dma-axi-dmac.c
drivers/dma/dma-jz4780.c
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
drivers/dma/dw-edma/dw-edma-core.c
drivers/dma/dw-edma/dw-edma-pcie.c
drivers/dma/dw-edma/dw-edma-v0-core.c
drivers/dma/dw-edma/dw-edma-v0-debugfs.c
drivers/dma/dw-edma/dw-hdma-v0-core.c
drivers/dma/dw-edma/dw-hdma-v0-debugfs.c
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.c
drivers/dma/fsl-edma-common.c
drivers/dma/fsl-edma-main.c
drivers/dma/fsl-edma-trace.c
drivers/dma/fsl-qdma.c
drivers/dma/hisi_dma.c
drivers/dma/hsu/hsu.c
drivers/dma/hsu/pci.c
drivers/dma/idma64.c
drivers/dma/img-mdc-dma.c
drivers/dma/imx-sdma.c
drivers/dma/k3dma.c
drivers/dma/lgm/lgm-dma.c
drivers/dma/loongson1-apb-dma.c
drivers/dma/loongson2-apb-dma.c
drivers/dma/mcf-edma-main.c
drivers/dma/mediatek/mtk-cqdma.c
drivers/dma/mediatek/mtk-hsdma.c
drivers/dma/mediatek/mtk-uart-apdma.c
drivers/dma/milbeaut-hdmac.c
drivers/dma/milbeaut-xdmac.c
drivers/dma/moxart-dma.c
drivers/dma/owl-dma.c
drivers/dma/pxa_dma.c
drivers/dma/qcom/bam_dma.c
drivers/dma/qcom/gpi.c
drivers/dma/qcom/qcom_adm.c
drivers/dma/sa11x0-dma.c
drivers/dma/sf-pdma/sf-pdma.c
drivers/dma/sh/rz-dmac.c
drivers/dma/sh/usb-dmac.c
drivers/dma/sprd-dma.c
drivers/dma/st_fdma.c
drivers/dma/stm32/stm32-dma.c
drivers/dma/stm32/stm32-dma3.c
drivers/dma/stm32/stm32-mdma.c
drivers/dma/sun4i-dma.c
drivers/dma/sun6i-dma.c
drivers/dma/tegra186-gpc-dma.c
drivers/dma/tegra210-adma.c
drivers/dma/ti/edma.c
drivers/dma/ti/k3-udma.c
drivers/dma/ti/omap-dma.c
drivers/dma/uniphier-mdmac.c
drivers/dma/uniphier-xdmac.c
drivers/dma/virt-dma.c
drivers/dma/xilinx/xdma.c
drivers/dma/xilinx/xilinx_dpdma.c
drivers/mfd/intel-lpss.c
drivers/net/ethernet/airoha/airoha_eth.c
drivers/net/ethernet/mediatek/mtk_eth_path.c
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mediatek/mtk_ppe.c
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.c
drivers/net/ethernet/mediatek/mtk_ppe_offload.c
drivers/net/ethernet/mediatek/mtk_wed.c
drivers/pci/controller/pcie-xilinx-dma-pl.c
drivers/tty/serial/8250/8250_mid.c

After that I compiled kernel with following options:
CONFIG_COMPILE_TEST=y
CONFIG_FORCE_PCI=y
CONFIG_PCI=y
CONFIG_PCI_MSI=y
CONFIG_AMD_QDMA=y
CONFIG_AMD_PTDMA=y
CONFIG_DW_AXI_DMAC=y
CONFIG_DW_EDMA=y
CONFIG_DW_EDMA_PCIE=y
CONFIG_INTEL_LDMA=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_MT6577=y
CONFIG_MTK_HSDMA=y
CONFIG_MTK_CQDMA=y
CONFIG_MTK_UART_APDMA=y
# CONFIG_QCOM_ADM=y - error: assignment to 'u32 *' {aka 'unsigned int *'} from incompatible pointer type 'phys_addr_t *'
CONFIG_QCOM_GPI_DMA=y
CONFIG_QCOM_BAM_DMA=y
CONFIG_SF_PDMA=y
CONFIG_STM32_DMA=y
CONFIG_STM32_MDMA=y
CONFIG_STM32_DMA3=y
CONFIG_DMA_OMAP=y
CONFIG_TI_EDMA=y
CONFIG_TI_MESSAGE_MANAGER=y
CONFIG_TI_SCI_PROTOCOL=y
CONFIG_TI_SCI_INTA_IRQCHIP=y
CONFIG_TI_K3_UDMA=y
CONFIG_XILINX_ZYNQMP_DPDMA=y
CONFIG_XILINX_XDMA=y
CONFIG_AMBA_PL08X=y
CONFIG_ARM_DMA350=y
CONFIG_FSL_EDMA=y
CONFIG_FSL_QDMA=y
CONFIG_MCF_EDMA=y
CONFIG_INTEL_IDMA64=y
CONFIG_DMA_SUN6I=y
CONFIG_DMA_SUN4I=y
CONFIG_AT_HDMAC=y
CONFIG_REMOTEPROC=y
CONFIG_ST_FDMA=y
CONFIG_K3_DMA=y
CONFIG_DMA_SA11X0=y
CONFIG_AXI_DMAC=y
CONFIG_IMG_MDC_DMA=y
CONFIG_UNIPHIER_XDMAC=y
CONFIG_UNIPHIER_MDMAC=y
CONFIG_LOONGSON1_APB_DMA=y
CONFIG_LOONGSON2_APB_DMA=y
CONFIG_DMA_BCM2835=y
CONFIG_TEGRA210_ADMA=y
CONFIG_TEGRA186_GPC_DMA=y
CONFIG_MOXART_DMA=y
CONFIG_DMA_JZ4780=y
CONFIG_IMX_SDMA=y
CONFIG_OWL_DMA=y
CONFIG_SPRD_DMA=y
CONFIG_MILBEAUT_XDMAC=y
CONFIG_MILBEAUT_HDMAC=y
CONFIG_HISI_DMA=y
CONFIG_FSL_MC_BUS=y
CONFIG_FSL_MC_DPIO=y
CONFIG_FSL_DPAA2_QDMA=y
CONFIG_RZ_DMAC=y
CONFIG_RENESAS_USB_DMAC=y
CONFIG_PXA_DMA=y
CONFIG_HSU_DMA=y
CONFIG_HSU_DMA_PCI=y
CONFIG_MFD_INTEL_LPSS=y
CONFIG_NET_AIROHA=y
CONFIG_NET_VENDOR_MEDIATEK=y
CONFIG_NET_MEDIATEK_SOC=y
CONFIG_NET_MEDIATEK_SOC_WED=y
CONFIG_PCIE_XILINX_DMA_PL=y
CONFIG_SERIAL_8250_MID=y
CONFIG_AMD_AE4DMA=y

After that I've used following script to check compilation (it used file
list obtained in previous step):
#!/bin/bash

for f in `cat files`; do
    f=`echo $f | sed 's/.c$/.o/'`
    test -f $f && echo $f: ok || echo $f: No such file or directory
done

It produced following output:
$ ./check
drivers/dma/amba-pl08x.o: ok
drivers/dma/amd/ae4dma/ae4dma-dev.o: ok
drivers/dma/amd/ae4dma/ae4dma-pci.o: ok
drivers/dma/amd/ptdma/ptdma-debugfs.o: ok
drivers/dma/amd/ptdma/ptdma-dev.o: ok
drivers/dma/amd/ptdma/ptdma-dmaengine.o: ok
drivers/dma/amd/ptdma/ptdma-pci.o: ok
drivers/dma/amd/qdma/qdma-comm-regs.o: ok
drivers/dma/amd/qdma/qdma.o: ok
drivers/dma/arm-dma350.o: ok
drivers/dma/at_hdmac.o: ok
drivers/dma/bcm2835-dma.o: ok
drivers/dma/dma-axi-dmac.o: ok
drivers/dma/dma-jz4780.o: ok
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.o: ok
drivers/dma/dw-edma/dw-edma-core.o: ok
drivers/dma/dw-edma/dw-edma-pcie.o: ok
drivers/dma/dw-edma/dw-edma-v0-core.o: ok
drivers/dma/dw-edma/dw-edma-v0-debugfs.o: ok
drivers/dma/dw-edma/dw-hdma-v0-core.o: ok
drivers/dma/dw-edma/dw-hdma-v0-debugfs.o: ok
drivers/dma/fsl-dpaa2-qdma/dpaa2-qdma.o: ok
drivers/dma/fsl-edma-common.o: ok
drivers/dma/fsl-edma-main.o: ok
drivers/dma/fsl-edma-trace.o: ok
drivers/dma/fsl-qdma.o: ok
drivers/dma/hisi_dma.o: ok
drivers/dma/hsu/hsu.o: ok
drivers/dma/hsu/pci.o: ok
drivers/dma/idma64.o: ok
drivers/dma/img-mdc-dma.o: ok
drivers/dma/imx-sdma.o: ok
drivers/dma/k3dma.o: ok
drivers/dma/lgm/lgm-dma.o: ok
drivers/dma/loongson1-apb-dma.o: ok
drivers/dma/loongson2-apb-dma.o: ok
drivers/dma/mcf-edma-main.o: ok
drivers/dma/mediatek/mtk-cqdma.o: ok
drivers/dma/mediatek/mtk-hsdma.o: ok
drivers/dma/mediatek/mtk-uart-apdma.o: ok
drivers/dma/milbeaut-hdmac.o: ok
drivers/dma/milbeaut-xdmac.o: ok
drivers/dma/moxart-dma.o: ok
drivers/dma/owl-dma.o: ok
drivers/dma/pxa_dma.o: ok
drivers/dma/qcom/bam_dma.o: ok
drivers/dma/qcom/gpi.o: ok
drivers/dma/qcom/qcom_adm.o: No such file or directory
drivers/dma/sa11x0-dma.o: ok
drivers/dma/sf-pdma/sf-pdma.o: ok
drivers/dma/sh/rz-dmac.o: ok
drivers/dma/sh/usb-dmac.o: ok
drivers/dma/sprd-dma.o: ok
drivers/dma/st_fdma.o: ok
drivers/dma/stm32/stm32-dma.o: ok
drivers/dma/stm32/stm32-dma3.o: ok
drivers/dma/stm32/stm32-mdma.o: ok
drivers/dma/sun4i-dma.o: ok
drivers/dma/sun6i-dma.o: ok
drivers/dma/tegra186-gpc-dma.o: ok
drivers/dma/tegra210-adma.o: ok
drivers/dma/ti/edma.o: ok
drivers/dma/ti/k3-udma.o: ok
drivers/dma/ti/omap-dma.o: ok
drivers/dma/uniphier-mdmac.o: ok
drivers/dma/uniphier-xdmac.o: ok
drivers/dma/virt-dma.o: ok
drivers/dma/xilinx/xdma.o: ok
drivers/dma/xilinx/xilinx_dpdma.o: ok
drivers/mfd/intel-lpss.o: ok
drivers/net/ethernet/airoha/airoha_eth.o: ok
drivers/net/ethernet/mediatek/mtk_eth_path.o: ok
drivers/net/ethernet/mediatek/mtk_eth_soc.o: ok
drivers/net/ethernet/mediatek/mtk_ppe.o: ok
drivers/net/ethernet/mediatek/mtk_ppe_debugfs.o: ok
drivers/net/ethernet/mediatek/mtk_ppe_offload.o: ok
drivers/net/ethernet/mediatek/mtk_wed.o: ok
drivers/pci/controller/pcie-xilinx-dma-pl.o: ok
drivers/tty/serial/8250/8250_mid.o: ok


Alexander Kochetkov (2):
  dmaengine: virt-dma: convert tasklet to BH workqueue for callback
    invocation
  Allow compile virt-dma users on ARM64 platform

 drivers/dma/Kconfig                           | 22 +++++++++----------
 drivers/dma/amd/Kconfig                       |  4 ++--
 drivers/dma/amd/qdma/qdma.c                   |  1 +
 drivers/dma/arm-dma350.c                      |  1 +
 drivers/dma/bcm2835-dma.c                     |  2 +-
 drivers/dma/dma-axi-dmac.c                    |  8 +++----
 drivers/dma/dma-jz4780.c                      |  2 +-
 .../dma/dw-axi-dmac/dw-axi-dmac-platform.c    |  2 +-
 drivers/dma/dw-edma/dw-edma-core.c            |  2 +-
 drivers/dma/fsl-edma-common.c                 |  2 +-
 drivers/dma/fsl-edma-common.h                 |  1 +
 drivers/dma/fsl-qdma.c                        |  3 ++-
 drivers/dma/hisi_dma.c                        |  2 +-
 drivers/dma/hsu/Kconfig                       |  4 ++--
 drivers/dma/hsu/hsu.c                         |  2 +-
 drivers/dma/idma64.c                          |  3 ++-
 drivers/dma/img-mdc-dma.c                     |  2 +-
 drivers/dma/imx-sdma.c                        |  2 +-
 drivers/dma/k3dma.c                           |  2 +-
 drivers/dma/loongson1-apb-dma.c               |  2 +-
 drivers/dma/mediatek/mtk-cqdma.c              |  2 +-
 drivers/dma/mediatek/mtk-hsdma.c              |  3 ++-
 drivers/dma/mediatek/mtk-uart-apdma.c         |  4 ++--
 drivers/dma/owl-dma.c                         |  2 +-
 drivers/dma/pxa_dma.c                         |  2 +-
 drivers/dma/qcom/Kconfig                      |  6 ++---
 drivers/dma/qcom/bam_dma.c                    |  4 ++--
 drivers/dma/qcom/gpi.c                        |  1 +
 drivers/dma/qcom/qcom_adm.c                   |  2 +-
 drivers/dma/sa11x0-dma.c                      |  2 +-
 drivers/dma/sf-pdma/sf-pdma.c                 |  3 ++-
 drivers/dma/sprd-dma.c                        |  2 +-
 drivers/dma/st_fdma.c                         |  2 +-
 drivers/dma/stm32/stm32-dma.c                 |  1 +
 drivers/dma/stm32/stm32-dma3.c                |  1 +
 drivers/dma/stm32/stm32-mdma.c                |  1 +
 drivers/dma/sun6i-dma.c                       |  2 +-
 drivers/dma/tegra186-gpc-dma.c                |  2 +-
 drivers/dma/tegra210-adma.c                   |  3 ++-
 drivers/dma/ti/Kconfig                        |  2 +-
 drivers/dma/ti/edma.c                         |  2 +-
 drivers/dma/ti/k3-udma.c                      | 10 ++++-----
 drivers/dma/ti/omap-dma.c                     |  2 +-
 drivers/dma/uniphier-xdmac.c                  |  1 +
 drivers/dma/virt-dma.c                        |  8 +++----
 drivers/dma/virt-dma.h                        | 10 ++++-----
 drivers/mfd/Kconfig                           |  2 +-
 47 files changed, 82 insertions(+), 69 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-08-25 17:40 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-16 12:48 [PATCH v2 0/2] dmaengine: virt-dma: convert tasklet to BH workqueue for callback invocation Alexander Kochetkov
2025-06-16 12:48 ` [PATCH v2 1/2] " Alexander Kochetkov
2025-06-23 10:39   ` Andy Shevchenko
2025-07-02 21:53     ` Ferry Toth
2025-06-30  8:50   ` Keguang Zhang
2025-06-30 11:07   ` Amelie Delaunay
2025-08-25 17:39   ` Alexander Kochetkov
2025-06-16 12:48 ` [PATCH v2 2/2] !!! TESTING ONLY !!! Allow compile virt-dma users on ARM64 platform Alexander Kochetkov
2025-06-17  9:30   ` kernel test robot
2025-06-17 10:16     ` Alexander Kochetkov
2025-06-17 11:13       ` Andy Shevchenko
2025-06-17 10:32   ` kernel test robot
2025-06-17 13:00   ` kernel test robot
2025-06-17 13:21   ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).