[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250616124934.141782-1-al.kochet@gmail.com>
Date: Mon, 16 Jun 2025 12:48:02 +0000
From: Alexander Kochetkov <al.kochet@...il.com>
To: Vinod Koul <vkoul@...nel.org>,
dmaengine@...r.kernel.org,
linux-kernel@...r.kernel.org
Cc: Nishad Saraf <nishads@....com>,
Lizhi Hou <lizhi.hou@....com>,
Jacky Huang <ychuang3@...oton.com>,
Shan-Chun Hung <schung@...oton.com>,
Florian Fainelli <florian.fainelli@...adcom.com>,
Ray Jui <rjui@...adcom.com>,
Scott Branden <sbranden@...adcom.com>,
Lars-Peter Clausen <lars@...afoo.de>,
Paul Cercueil <paul@...pouillou.net>,
Eugeniy Paltsev <Eugeniy.Paltsev@...opsys.com>,
Manivannan Sadhasivam <mani@...nel.org>,
Frank Li <Frank.Li@....com>,
Zhou Wang <wangzhou1@...ilicon.com>,
Longfang Liu <liulongfang@...wei.com>,
Andy Shevchenko <andy@...nel.org>,
Shawn Guo <shawnguo@...nel.org>,
Sascha Hauer <s.hauer@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>,
Keguang Zhang <keguang.zhang@...il.com>,
Sean Wang <sean.wang@...iatek.com>,
Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
Andreas Färber <afaerber@...e.de>,
Daniel Mack <daniel@...que.org>,
Haojian Zhuang <haojian.zhuang@...il.com>,
Robert Jarzmik <robert.jarzmik@...e.fr>,
Paul Walmsley <paul.walmsley@...ive.com>,
Samuel Holland <samuel.holland@...ive.com>,
Orson Zhai <orsonzhai@...il.com>,
Baolin Wang <baolin.wang@...ux.alibaba.com>,
Chunyan Zhang <zhang.lyra@...il.com>,
Patrice Chotard <patrice.chotard@...s.st.com>,
Amélie Delaunay <amelie.delaunay@...s.st.com>,
Maxime Coquelin <mcoquelin.stm32@...il.com>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
Chen-Yu Tsai <wens@...e.org>,
Jernej Skrabec <jernej.skrabec@...il.com>,
Laxman Dewangan <ldewangan@...dia.com>,
Jon Hunter <jonathanh@...dia.com>,
Thierry Reding <thierry.reding@...il.com>,
Peter Ujfalusi <peter.ujfalusi@...il.com>,
Kunihiko Hayashi <hayashi.kunihiko@...ionext.com>,
Masami Hiramatsu <mhiramat@...nel.org>,
Dave Jiang <dave.jiang@...el.com>,
Amit Vadhavana <av2082000@...il.com>,
Uwe Kleine-König <u.kleine-koenig@...libre.com>,
Ulf Hansson <ulf.hansson@...aro.org>,
Md Sadre Alam <quic_mdalam@...cinc.com>,
Alexander Kochetkov <al.kochet@...il.com>,
Casey Connolly <casey.connolly@...aro.org>,
Kees Cook <kees@...nel.org>,
Fenghua Yu <fenghua.yu@...el.com>,
Jyothi Kumar Seerapu <quic_jseerapu@...cinc.com>
Subject: [PATCH v2 0/2] dmaengine: virt-dma: convert tasklet to BH workqueue for callback invocation
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
Powered by blists - more mailing lists