* [PATCH 0/2] dmaengine: rename dma_chan::dev to dma_chan::chan_dev for clarity
@ 2026-08-12 21:24 Frank.Li
2026-08-12 21:24 ` [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name Frank.Li
2026-08-12 21:24 ` [PATCH 2/2] dmaengine: add union chan_dev for dma_chan::dev for clarity Frank.Li
0 siblings, 2 replies; 4+ messages in thread
From: Frank.Li @ 2026-08-12 21:24 UTC (permalink / raw)
To: Jacky Huang, Shan-Chun Hung, Vinod Koul, Frank Li, Paul Cercueil,
Eugeniy Paltsev, Andy Shevchenko, Binbin Zhou, Patrice Chotard,
Amélie Delaunay, Maxime Coquelin, Alexandre Torgue,
Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
Thierry Reding, Jonathan Hunter, Ludovic Desroches, Viresh Kumar,
Keguang Zhang, Andreas Färber, Manivannan Sadhasivam,
Daniel Mack, Haojian Zhuang, Robert Jarzmik, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Kelvin Cao, Logan Gunthorpe,
Laxman Dewangan, Vignesh Raghavendra
Cc: linux-arm-kernel, dmaengine, linux-kernel, linux-mips,
linux-stm32, linux-trace-kernel, linux-tegra, linux-actions,
linux-sunxi, imx, Frank Li
The current dma_chan structure contains both "device" and "dev". So
chan->device->dev refers to the DMA engine device.
chan->dev->device refers to the per-channel device instance.
Their similar naming makes the distinction unclear and increases reader
confusion.
Add union dma_chan::chan_dev to make its purpose explicit and clearly
identify it as the per-channel device. After all user switch to chan_dev,
union and dma_chan::dev will be removed.
Update the kernel-doc accordingly. Besides its sysfs usage, the per-channel
device is also used by some DMA engine drivers for IOMMU mapping and
therefore deserves a more accurate description.
1st patch use existing helper dma_chan_name() to reduce rename difference.
2nd rename drivers/dma
Need following patch to clean other dma engineer driver, which is not
in drivers/dma
After complete all rename work, dma_chan::dev can be removed.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Frank Li (2):
dmaengine: use dma_chan_name() helper to get per-channel device name
dmaengine: add union chan_dev for dma_chan::dev for clarity
drivers/dma/arm-dma350.c | 2 +-
drivers/dma/at_hdmac.c | 2 +-
drivers/dma/at_xdmac.c | 2 +-
drivers/dma/dma-jz4780.c | 10 ++---
drivers/dma/dmaengine.c | 34 ++++++++---------
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 2 +-
drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 4 +-
drivers/dma/dw/core.c | 2 +-
drivers/dma/ep93xx_dma.c | 2 +-
drivers/dma/idma64.c | 4 +-
drivers/dma/loongson/loongson1-apb-dma.c | 2 +-
drivers/dma/loongson/loongson2-apb-cmc-dma.c | 4 +-
drivers/dma/loongson/loongson2-apb-dma.c | 4 +-
drivers/dma/mmp_pdma.c | 2 +-
drivers/dma/nbpfaxi.c | 2 +-
drivers/dma/owl-dma.c | 2 +-
drivers/dma/pch_dma.c | 2 +-
drivers/dma/pxa_dma.c | 52 +++++++++++++-------------
drivers/dma/st_fdma.c | 2 +-
drivers/dma/stm32/stm32-dma.c | 4 +-
drivers/dma/stm32/stm32-dma3.c | 8 ++--
drivers/dma/stm32/stm32-mdma.c | 4 +-
drivers/dma/sun6i-dma.c | 2 +-
drivers/dma/switchtec_dma.c | 14 +++----
drivers/dma/tegra186-gpc-dma.c | 4 +-
drivers/dma/tegra20-apb-dma.c | 2 +-
drivers/dma/ti/k3-udma.c | 6 +--
drivers/dma/timb_dma.c | 2 +-
include/linux/dmaengine.h | 18 ++++++---
include/trace/events/tegra_apb_dma.h | 6 +--
30 files changed, 107 insertions(+), 99 deletions(-)
---
base-commit: 28d012efb4327f9c75d5e042a7c91e9a542efa98
change-id: 20260812-dma-chan_dev-rename-66263ac5eac9
Best regards,
--
Frank Li <Frank.Li@nxp.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name
2026-08-12 21:24 [PATCH 0/2] dmaengine: rename dma_chan::dev to dma_chan::chan_dev for clarity Frank.Li
@ 2026-08-12 21:24 ` Frank.Li
2026-08-12 21:34 ` sashiko-bot
2026-08-12 21:24 ` [PATCH 2/2] dmaengine: add union chan_dev for dma_chan::dev for clarity Frank.Li
1 sibling, 1 reply; 4+ messages in thread
From: Frank.Li @ 2026-08-12 21:24 UTC (permalink / raw)
To: Jacky Huang, Shan-Chun Hung, Vinod Koul, Frank Li, Paul Cercueil,
Eugeniy Paltsev, Andy Shevchenko, Binbin Zhou, Patrice Chotard,
Amélie Delaunay, Maxime Coquelin, Alexandre Torgue,
Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
Thierry Reding, Jonathan Hunter, Ludovic Desroches, Viresh Kumar,
Keguang Zhang, Andreas Färber, Manivannan Sadhasivam,
Daniel Mack, Haojian Zhuang, Robert Jarzmik, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Kelvin Cao, Logan Gunthorpe,
Laxman Dewangan, Vignesh Raghavendra
Cc: linux-arm-kernel, dmaengine, linux-kernel, linux-mips,
linux-stm32, linux-trace-kernel, linux-tegra, linux-actions,
linux-sunxi, imx, Frank Li
From: Frank Li <Frank.Li@nxp.com>
Use the existing dma_chan_name() helper to obtain the per-channel device
name instead of open-coding: dev_name(chan->dev->device) /
dev_name(chan2dev())
Simplify the code and improve consistency.
No functional change intended.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/arm-dma350.c | 2 +-
drivers/dma/dma-jz4780.c | 2 +-
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 2 +-
drivers/dma/idma64.c | 2 +-
drivers/dma/loongson/loongson2-apb-cmc-dma.c | 2 +-
drivers/dma/loongson/loongson2-apb-dma.c | 2 +-
drivers/dma/mmp_pdma.c | 2 +-
drivers/dma/st_fdma.c | 2 +-
drivers/dma/stm32/stm32-dma.c | 2 +-
drivers/dma/stm32/stm32-dma3.c | 6 +++---
drivers/dma/stm32/stm32-mdma.c | 2 +-
include/trace/events/tegra_apb_dma.h | 6 +++---
12 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
index 09403aca8bb06..89673a5fca304 100644
--- a/drivers/dma/arm-dma350.c
+++ b/drivers/dma/arm-dma350.c
@@ -512,7 +512,7 @@ static int d350_alloc_chan_resources(struct dma_chan *chan)
{
struct d350_chan *dch = to_d350_chan(chan);
int ret = request_irq(dch->irq, d350_irq, IRQF_SHARED,
- dev_name(&dch->vc.chan.dev->device), dch);
+ dma_chan_name(&dch->vc.chan), dch);
if (!ret)
writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + CH_INTREN);
diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c
index 6070dfdb7114c..194649811d02b 100644
--- a/drivers/dma/dma-jz4780.c
+++ b/drivers/dma/dma-jz4780.c
@@ -760,7 +760,7 @@ static int jz4780_dma_alloc_chan_resources(struct dma_chan *chan)
{
struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
- jzchan->desc_pool = dma_pool_create(dev_name(&chan->dev->device),
+ jzchan->desc_pool = dma_pool_create(dma_chan_name(chan),
chan->device->dev,
JZ_DMA_DESC_BLOCK_SIZE,
PAGE_SIZE, 0);
diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
index eebed2474210d..d24902374f742 100644
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
@@ -531,7 +531,7 @@ static int dma_chan_alloc_chan_resources(struct dma_chan *dchan)
}
/* LLI address must be aligned to a 64-byte boundary */
- chan->desc_pool = dma_pool_create(dev_name(chan2dev(chan)),
+ chan->desc_pool = dma_pool_create(dma_chan_name(dchan),
chan->chip->dev,
sizeof(struct axi_dma_lli),
64, 0);
diff --git a/drivers/dma/idma64.c b/drivers/dma/idma64.c
index 5fcd1befc92da..6399fd5408be2 100644
--- a/drivers/dma/idma64.c
+++ b/drivers/dma/idma64.c
@@ -507,7 +507,7 @@ static int idma64_alloc_chan_resources(struct dma_chan *chan)
struct idma64_chan *idma64c = to_idma64_chan(chan);
/* Create a pool of consistent memory blocks for hardware descriptors */
- idma64c->pool = dma_pool_create(dev_name(chan2dev(chan)),
+ idma64c->pool = dma_pool_create(dma_chan_name(chan),
chan->device->dev,
sizeof(struct idma64_lli), 8, 0);
if (!idma64c->pool) {
diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
index 1c9a542edc859..f53f24b7f8ffe 100644
--- a/drivers/dma/loongson/loongson2-apb-cmc-dma.c
+++ b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
@@ -678,7 +678,7 @@ static int loongson2_cmc_dma_probe(struct platform_device *pdev)
return lchan->irq;
ret = devm_request_irq(dev, lchan->irq, loongson2_cmc_dma_chan_irq, IRQF_SHARED,
- dev_name(chan2dev(lchan)), lchan);
+ dma_chan_name(&lchan->vchan.chan), lchan);
if (ret)
return ret;
}
diff --git a/drivers/dma/loongson/loongson2-apb-dma.c b/drivers/dma/loongson/loongson2-apb-dma.c
index aceb069e71fca..7c3d7c3273955 100644
--- a/drivers/dma/loongson/loongson2-apb-dma.c
+++ b/drivers/dma/loongson/loongson2-apb-dma.c
@@ -282,7 +282,7 @@ static int ls2x_dma_alloc_chan_resources(struct dma_chan *chan)
struct ls2x_dma_chan *lchan = to_ldma_chan(chan);
/* Create a pool of consistent memory blocks for hardware descriptors */
- lchan->pool = dma_pool_create(dev_name(chan2dev(chan)),
+ lchan->pool = dma_pool_create(dma_chan_name(chan),
chan->device->dev, PAGE_SIZE,
__alignof__(struct ls2x_dma_hw_desc), 0);
if (!lchan->pool) {
diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c
index 386e85cd4882a..6b29e15b0616c 100644
--- a/drivers/dma/mmp_pdma.c
+++ b/drivers/dma/mmp_pdma.c
@@ -565,7 +565,7 @@ static int mmp_pdma_alloc_chan_resources(struct dma_chan *dchan)
if (chan->desc_pool)
return 1;
- chan->desc_pool = dma_pool_create(dev_name(&dchan->dev->device),
+ chan->desc_pool = dma_pool_create(dma_chan_name(dchan),
chan->dev,
sizeof(struct mmp_pdma_desc_sw),
__alignof__(struct mmp_pdma_desc_sw),
diff --git a/drivers/dma/st_fdma.c b/drivers/dma/st_fdma.c
index d9547017f3bd6..35dbff5f9f1ab 100644
--- a/drivers/dma/st_fdma.c
+++ b/drivers/dma/st_fdma.c
@@ -268,7 +268,7 @@ static int st_fdma_alloc_chan_res(struct dma_chan *chan)
struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
/* Create the dma pool for descriptor allocation */
- fchan->node_pool = dma_pool_create(dev_name(&chan->dev->device),
+ fchan->node_pool = dma_pool_create(dma_chan_name(chan),
fchan->fdev->dev,
sizeof(struct st_fdma_hw_node),
__alignof__(struct st_fdma_hw_node),
diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
index d3ad78562a140..4e3ecb6763036 100644
--- a/drivers/dma/stm32/stm32-dma.c
+++ b/drivers/dma/stm32/stm32-dma.c
@@ -1668,7 +1668,7 @@ static int stm32_dma_probe(struct platform_device *pdev)
ret = devm_request_irq(&pdev->dev, chan->irq,
stm32_dma_chan_irq, 0,
- dev_name(chan2dev(chan)), chan);
+ dma_chan_name(&chan->vchan.chan), chan);
if (ret) {
dev_err(&pdev->dev,
"request_irq failed with err %d channel %d\n",
diff --git a/drivers/dma/stm32/stm32-dma3.c b/drivers/dma/stm32/stm32-dma3.c
index 4724e7fa0008e..ab0fb05597363 100644
--- a/drivers/dma/stm32/stm32-dma3.c
+++ b/drivers/dma/stm32/stm32-dma3.c
@@ -1126,7 +1126,7 @@ static int stm32_dma3_alloc_chan_resources(struct dma_chan *c)
goto err_put_sync;
}
- chan->lli_pool = dmam_pool_create(dev_name(&c->dev->device), c->device->dev,
+ chan->lli_pool = dmam_pool_create(dma_chan_name(c), c->device->dev,
sizeof(struct stm32_dma3_hwdesc),
__alignof__(struct stm32_dma3_hwdesc), SZ_64K);
if (!chan->lli_pool) {
@@ -1892,10 +1892,10 @@ static int stm32_dma3_probe(struct platform_device *pdev)
chan->irq = ret;
ret = devm_request_irq(&pdev->dev, chan->irq, stm32_dma3_chan_irq, 0,
- dev_name(chan2dev(chan)), chan);
+ dma_chan_name(&chan->vchan.chan), chan);
if (ret) {
dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
- dev_name(chan2dev(chan)));
+ dma_chan_name(&chan->vchan.chan));
goto err_clk_disable;
}
}
diff --git a/drivers/dma/stm32/stm32-mdma.c b/drivers/dma/stm32/stm32-mdma.c
index e3bbdc9ee36ed..c274638e919c2 100644
--- a/drivers/dma/stm32/stm32-mdma.c
+++ b/drivers/dma/stm32/stm32-mdma.c
@@ -1484,7 +1484,7 @@ static int stm32_mdma_alloc_chan_resources(struct dma_chan *c)
struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
int ret;
- chan->desc_pool = dmam_pool_create(dev_name(&c->dev->device),
+ chan->desc_pool = dmam_pool_create(dma_chan_name(c),
c->device->dev,
sizeof(struct stm32_mdma_hwdesc),
__alignof__(struct stm32_mdma_hwdesc),
diff --git a/include/trace/events/tegra_apb_dma.h b/include/trace/events/tegra_apb_dma.h
index 6d9f5075baa3e..c38117c127ef3 100644
--- a/include/trace/events/tegra_apb_dma.h
+++ b/include/trace/events/tegra_apb_dma.h
@@ -11,7 +11,7 @@ TRACE_EVENT(tegra_dma_tx_status,
TP_PROTO(struct dma_chan *dc, dma_cookie_t cookie, struct dma_tx_state *state),
TP_ARGS(dc, cookie, state),
TP_STRUCT__entry(
- __string(chan, dev_name(&dc->dev->device))
+ __string(chan, dma_chan_name(dc))
__field(dma_cookie_t, cookie)
__field(__u32, residue)
),
@@ -28,7 +28,7 @@ TRACE_EVENT(tegra_dma_complete_cb,
TP_PROTO(struct dma_chan *dc, int count, void *ptr),
TP_ARGS(dc, count, ptr),
TP_STRUCT__entry(
- __string(chan, dev_name(&dc->dev->device))
+ __string(chan, dma_chan_name(dc))
__field(int, count)
__field(void *, ptr)
),
@@ -45,7 +45,7 @@ TRACE_EVENT(tegra_dma_isr,
TP_PROTO(struct dma_chan *dc, int irq),
TP_ARGS(dc, irq),
TP_STRUCT__entry(
- __string(chan, dev_name(&dc->dev->device))
+ __string(chan, dma_chan_name(dc))
__field(int, irq)
),
TP_fast_assign(
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] dmaengine: add union chan_dev for dma_chan::dev for clarity
2026-08-12 21:24 [PATCH 0/2] dmaengine: rename dma_chan::dev to dma_chan::chan_dev for clarity Frank.Li
2026-08-12 21:24 ` [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name Frank.Li
@ 2026-08-12 21:24 ` Frank.Li
1 sibling, 0 replies; 4+ messages in thread
From: Frank.Li @ 2026-08-12 21:24 UTC (permalink / raw)
To: Jacky Huang, Shan-Chun Hung, Vinod Koul, Frank Li, Paul Cercueil,
Eugeniy Paltsev, Andy Shevchenko, Binbin Zhou, Patrice Chotard,
Amélie Delaunay, Maxime Coquelin, Alexandre Torgue,
Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
Thierry Reding, Jonathan Hunter, Ludovic Desroches, Viresh Kumar,
Keguang Zhang, Andreas Färber, Manivannan Sadhasivam,
Daniel Mack, Haojian Zhuang, Robert Jarzmik, Chen-Yu Tsai,
Jernej Skrabec, Samuel Holland, Kelvin Cao, Logan Gunthorpe,
Laxman Dewangan, Vignesh Raghavendra
Cc: linux-arm-kernel, dmaengine, linux-kernel, linux-mips,
linux-stm32, linux-trace-kernel, linux-tegra, linux-actions,
linux-sunxi, imx, Frank Li
From: Frank Li <Frank.Li@nxp.com>
The current dma_chan structure contains both "device" and "dev". So
chan->device->dev refers to the DMA engine device.
chan->dev->device refers to the per-channel device instance.
Their similar naming makes the distinction unclear and increases reader
confusion.
Add union dma_chan::chan_dev to make its purpose explicit and clearly
identify it as the per-channel device. After all user switch to chan_dev,
union and dma_chan::dev will be removed.
Update the kernel-doc accordingly. Besides its sysfs usage, the per-channel
device is also used by some DMA engine drivers for IOMMU mapping and
therefore deserves a more accurate description.
No functional change intended.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
there are other user use it outside drivers/dma/ directory.
---
drivers/dma/at_hdmac.c | 2 +-
drivers/dma/at_xdmac.c | 2 +-
drivers/dma/dma-jz4780.c | 8 ++---
drivers/dma/dmaengine.c | 34 +++++++++---------
drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 4 +--
drivers/dma/dw/core.c | 2 +-
drivers/dma/ep93xx_dma.c | 2 +-
drivers/dma/idma64.c | 2 +-
drivers/dma/loongson/loongson1-apb-dma.c | 2 +-
drivers/dma/loongson/loongson2-apb-cmc-dma.c | 2 +-
drivers/dma/loongson/loongson2-apb-dma.c | 2 +-
drivers/dma/nbpfaxi.c | 2 +-
drivers/dma/owl-dma.c | 2 +-
drivers/dma/pch_dma.c | 2 +-
drivers/dma/pxa_dma.c | 52 ++++++++++++++--------------
drivers/dma/stm32/stm32-dma.c | 2 +-
drivers/dma/stm32/stm32-dma3.c | 2 +-
drivers/dma/stm32/stm32-mdma.c | 2 +-
drivers/dma/sun6i-dma.c | 2 +-
drivers/dma/switchtec_dma.c | 14 ++++----
drivers/dma/tegra186-gpc-dma.c | 4 +--
drivers/dma/tegra20-apb-dma.c | 2 +-
drivers/dma/ti/k3-udma.c | 6 ++--
drivers/dma/timb_dma.c | 2 +-
include/linux/dmaengine.h | 18 +++++++---
25 files changed, 91 insertions(+), 83 deletions(-)
diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index e5b30a57c477a..63c72f80d9a02 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -383,7 +383,7 @@ static inline struct at_dma *to_at_dma(struct dma_device *ddev)
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
#if defined(VERBOSE_DEBUG)
diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c
index 901971e8bae69..30ec996845ce7 100644
--- a/drivers/dma/at_xdmac.c
+++ b/drivers/dma/at_xdmac.c
@@ -326,7 +326,7 @@ static inline struct at_xdmac_chan *to_at_xdmac_chan(struct dma_chan *dchan)
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static inline struct at_xdmac *to_at_xdmac(struct dma_device *ddev)
diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c
index 194649811d02b..c48a46b2bbbf2 100644
--- a/drivers/dma/dma-jz4780.c
+++ b/drivers/dma/dma-jz4780.c
@@ -687,12 +687,12 @@ static bool jz4780_dma_chan_irq(struct jz4780_dma_dev *jzdma,
jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0);
if (dcs & JZ_DMA_DCS_AR) {
- dev_warn(&jzchan->vchan.chan.dev->device,
+ dev_warn(&jzchan->vchan.chan.chan_dev->device,
"address error (DCS=0x%x)\n", dcs);
}
if (dcs & JZ_DMA_DCS_HLT) {
- dev_warn(&jzchan->vchan.chan.dev->device,
+ dev_warn(&jzchan->vchan.chan.chan_dev->device,
"channel halt (DCS=0x%x)\n", dcs);
}
@@ -721,7 +721,7 @@ static bool jz4780_dma_chan_irq(struct jz4780_dma_dev *jzdma,
}
}
} else {
- dev_err(&jzchan->vchan.chan.dev->device,
+ dev_err(&jzchan->vchan.chan.chan_dev->device,
"channel IRQ with no active transfer\n");
}
@@ -765,7 +765,7 @@ static int jz4780_dma_alloc_chan_resources(struct dma_chan *chan)
JZ_DMA_DESC_BLOCK_SIZE,
PAGE_SIZE, 0);
if (!jzchan->desc_pool) {
- dev_err(&chan->dev->device,
+ dev_err(&chan->chan_dev->device,
"failed to allocate descriptor pool\n");
return -ENOMEM;
}
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 6ffd8bd82154a..c00641366c4dc 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -868,10 +868,10 @@ struct dma_chan *dma_request_chan(struct device *dev, const char *name)
return chan;
chan->slave = dev;
- if (sysfs_create_link(&chan->dev->device.kobj, &dev->kobj,
+ if (sysfs_create_link(&chan->chan_dev->device.kobj, &dev->kobj,
DMA_SLAVE_NAME))
dev_warn(dev, "Cannot create DMA %s symlink\n", DMA_SLAVE_NAME);
- if (sysfs_create_link(&dev->kobj, &chan->dev->device.kobj, chan->name))
+ if (sysfs_create_link(&dev->kobj, &chan->chan_dev->device.kobj, chan->name))
dev_warn(dev, "Cannot create DMA %s symlink\n", chan->name);
return chan;
@@ -917,7 +917,7 @@ void dma_release_channel(struct dma_chan *chan)
dma_chan_put(chan);
if (chan->slave) {
- sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
+ sysfs_remove_link(&chan->chan_dev->device.kobj, DMA_SLAVE_NAME);
sysfs_remove_link(&chan->slave->kobj, chan->name);
kfree(chan->name);
chan->name = NULL;
@@ -1083,8 +1083,8 @@ static int __dma_async_device_channel_register(struct dma_device *device,
chan->local = alloc_percpu(typeof(*chan->local));
if (!chan->local)
return -ENOMEM;
- chan->dev = kzalloc_obj(*chan->dev);
- if (!chan->dev) {
+ chan->chan_dev = kzalloc_obj(*chan->chan_dev);
+ if (!chan->chan_dev) {
rc = -ENOMEM;
goto err_free_local;
}
@@ -1101,17 +1101,17 @@ static int __dma_async_device_channel_register(struct dma_device *device,
goto err_free_dev;
}
- chan->dev->device.class = &dma_devclass;
- chan->dev->device.parent = device->dev;
- chan->dev->chan = chan;
- chan->dev->dev_id = device->dev_id;
+ chan->chan_dev->device.class = &dma_devclass;
+ chan->chan_dev->device.parent = device->dev;
+ chan->chan_dev->chan = chan;
+ chan->chan_dev->dev_id = device->dev_id;
spin_lock_init(&chan->lock);
if (!name)
- dev_set_name(&chan->dev->device, "dma%dchan%d", device->dev_id, chan->chan_id);
+ dev_set_name(&chan->chan_dev->device, "dma%dchan%d", device->dev_id, chan->chan_id);
else
- dev_set_name(&chan->dev->device, "%s", name);
- rc = device_register(&chan->dev->device);
+ dev_set_name(&chan->chan_dev->device, "%s", name);
+ rc = device_register(&chan->chan_dev->device);
if (rc)
goto err_out_ida;
chan->client_count = 0;
@@ -1122,7 +1122,7 @@ static int __dma_async_device_channel_register(struct dma_device *device,
err_out_ida:
ida_free(&device->chan_ida, chan->chan_id);
err_free_dev:
- kfree(chan->dev);
+ kfree(chan->chan_dev);
err_free_local:
free_percpu(chan->local);
chan->local = NULL;
@@ -1155,10 +1155,10 @@ static void __dma_async_device_channel_unregister(struct dma_device *device,
__func__, chan->client_count);
mutex_lock(&dma_list_mutex);
device->chancnt--;
- chan->dev->chan = NULL;
+ chan->chan_dev->chan = NULL;
mutex_unlock(&dma_list_mutex);
ida_free(&device->chan_ida, chan->chan_id);
- device_unregister(&chan->dev->device);
+ device_unregister(&chan->chan_dev->device);
free_percpu(chan->local);
}
@@ -1290,9 +1290,9 @@ int dma_async_device_register(struct dma_device *device)
if (chan->local == NULL)
continue;
mutex_lock(&dma_list_mutex);
- chan->dev->chan = NULL;
+ chan->chan_dev->chan = NULL;
mutex_unlock(&dma_list_mutex);
- device_unregister(&chan->dev->device);
+ device_unregister(&chan->chan_dev->device);
free_percpu(chan->local);
}
return rc;
diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h
index 67cc199e24d1f..ccfd09c06807b 100644
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h
@@ -121,12 +121,12 @@ struct axi_dma_chan_config {
static inline struct device *dchan2dev(struct dma_chan *dchan)
{
- return &dchan->dev->device;
+ return &dchan->chan_dev->device;
}
static inline struct device *chan2dev(struct axi_dma_chan *chan)
{
- return &chan->vc.chan.dev->device;
+ return &chan->vc.chan.chan_dev->device;
}
static inline struct axi_dma_desc *vd_to_axi_desc(struct virt_dma_desc *vd)
diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
index dd75f97a33b3d..d5618c128121f 100644
--- a/drivers/dma/dw/core.c
+++ b/drivers/dma/dw/core.c
@@ -43,7 +43,7 @@
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static struct dw_desc *dwc_first_active(struct dw_dma_chan *dwc)
diff --git a/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c
index 311e55a97ba9f..977ab12c793e9 100644
--- a/drivers/dma/ep93xx_dma.c
+++ b/drivers/dma/ep93xx_dma.c
@@ -252,7 +252,7 @@ struct ep93xx_edma_data {
static inline struct device *chan2dev(struct ep93xx_dma_chan *edmac)
{
- return &edmac->chan.dev->device;
+ return &edmac->chan.chan_dev->device;
}
static struct ep93xx_dma_chan *to_ep93xx_dma_chan(struct dma_chan *chan)
diff --git a/drivers/dma/idma64.c b/drivers/dma/idma64.c
index 6399fd5408be2..6fdc0d50964ad 100644
--- a/drivers/dma/idma64.c
+++ b/drivers/dma/idma64.c
@@ -27,7 +27,7 @@
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
/* ---------------------------------------------------------------------- */
diff --git a/drivers/dma/loongson/loongson1-apb-dma.c b/drivers/dma/loongson/loongson1-apb-dma.c
index 89786cbd20ab5..03c8081e4b9a9 100644
--- a/drivers/dma/loongson/loongson1-apb-dma.c
+++ b/drivers/dma/loongson/loongson1-apb-dma.c
@@ -91,7 +91,7 @@ static irqreturn_t ls1x_dma_irq_handler(int irq, void *data);
static inline struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static inline int ls1x_dma_query(struct ls1x_dma_chan *chan,
diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
index f53f24b7f8ffe..dbb85b72003e1 100644
--- a/drivers/dma/loongson/loongson2-apb-cmc-dma.c
+++ b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
@@ -136,7 +136,7 @@ static struct loongson2_cmc_dma_desc *to_lmdma_desc(struct virt_dma_desc *vdesc)
static struct device *chan2dev(struct loongson2_cmc_dma_chan *lchan)
{
- return &lchan->vchan.chan.dev->device;
+ return &lchan->vchan.chan.chan_dev->device;
}
static u32 loongson2_cmc_dma_read(struct loongson2_cmc_dma_dev *lddev, u32 reg, u32 id)
diff --git a/drivers/dma/loongson/loongson2-apb-dma.c b/drivers/dma/loongson/loongson2-apb-dma.c
index 7c3d7c3273955..94f4364fbfb56 100644
--- a/drivers/dma/loongson/loongson2-apb-dma.c
+++ b/drivers/dma/loongson/loongson2-apb-dma.c
@@ -163,7 +163,7 @@ static inline struct ls2x_dma_priv *to_ldma_priv(struct dma_device *ddev)
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static void ls2x_dma_desc_free(struct virt_dma_desc *vdesc)
diff --git a/drivers/dma/nbpfaxi.c b/drivers/dma/nbpfaxi.c
index 05d7321629cc8..4dd87cafc5e0a 100644
--- a/drivers/dma/nbpfaxi.c
+++ b/drivers/dma/nbpfaxi.c
@@ -1202,7 +1202,7 @@ static irqreturn_t nbpf_chan_irq(int irq, void *dev)
nbpf_status_ack(chan);
- dev_dbg(&chan->dma_chan.dev->device, "%s()\n", __func__);
+ dev_dbg(&chan->dma_chan.chan_dev->device, "%s()\n", __func__);
spin_lock(&chan->lock);
desc = chan->running;
diff --git a/drivers/dma/owl-dma.c b/drivers/dma/owl-dma.c
index 7c80572fc71d1..ab7531a3a89c9 100644
--- a/drivers/dma/owl-dma.c
+++ b/drivers/dma/owl-dma.c
@@ -294,7 +294,7 @@ static inline struct owl_dma *to_owl_dma(struct dma_device *dd)
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static inline struct owl_dma_vchan *to_owl_vchan(struct dma_chan *chan)
diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
index bf805f1024f64..69d60b587c2bb 100644
--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -152,7 +152,7 @@ static inline struct pch_dma *to_pd(struct dma_device *ddev)
static inline struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static inline
diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c
index fa2ee0b3e09f8..5398b47fec370 100644
--- a/drivers/dma/pxa_dma.c
+++ b/drivers/dma/pxa_dma.c
@@ -149,7 +149,7 @@ struct pxad_device {
({ \
u32 _v; \
_v = readl_relaxed((phy)->base + _reg((phy)->idx)); \
- dev_vdbg(&phy->vchan->vc.chan.dev->device, \
+ dev_vdbg(&phy->vchan->vc.chan.chan_dev->device, \
"%s(): readl(%s): 0x%08x\n", __func__, #_reg, \
_v); \
_v; \
@@ -157,14 +157,14 @@ struct pxad_device {
#define phy_writel(phy, val, _reg) \
do { \
writel((val), (phy)->base + _reg((phy)->idx)); \
- dev_vdbg(&phy->vchan->vc.chan.dev->device, \
+ dev_vdbg(&phy->vchan->vc.chan.chan_dev->device, \
"%s(): writel(0x%08x, %s)\n", \
__func__, (u32)(val), #_reg); \
} while (0)
#define phy_writel_relaxed(phy, val, _reg) \
do { \
writel_relaxed((val), (phy)->base + _reg((phy)->idx)); \
- dev_vdbg(&phy->vchan->vc.chan.dev->device, \
+ dev_vdbg(&phy->vchan->vc.chan.chan_dev->device, \
"%s(): writel_relaxed(0x%08x, %s)\n", \
__func__, (u32)(val), #_reg); \
} while (0)
@@ -396,7 +396,7 @@ static struct pxad_phy *lookup_phy(struct pxad_chan *pchan)
out_unlock:
spin_unlock_irqrestore(&pdev->phy_lock, flags);
- dev_dbg(&pchan->vc.chan.dev->device,
+ dev_dbg(&pchan->vc.chan.chan_dev->device,
"%s(): phy=%p(%d)\n", __func__, found,
found ? found->idx : -1);
@@ -409,7 +409,7 @@ static void pxad_free_phy(struct pxad_chan *chan)
unsigned long flags;
u32 reg;
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): freeing\n", __func__);
if (!chan->phy)
return;
@@ -454,7 +454,7 @@ static void phy_enable(struct pxad_phy *phy, bool misaligned)
if (!phy->vchan)
return;
- dev_dbg(&phy->vchan->vc.chan.dev->device,
+ dev_dbg(&phy->vchan->vc.chan.chan_dev->device,
"%s(); phy=%p(%d) misaligned=%d\n", __func__,
phy, phy->idx, misaligned);
@@ -483,7 +483,7 @@ static void phy_disable(struct pxad_phy *phy)
return;
dcsr = phy_readl_relaxed(phy, DCSR);
- dev_dbg(&phy->vchan->vc.chan.dev->device,
+ dev_dbg(&phy->vchan->vc.chan.chan_dev->device,
"%s(): phy=%p(%d)\n", __func__, phy, phy->idx);
phy_writel(phy, dcsr & ~PXA_DCSR_RUN & ~PXA_DCSR_STOPIRQEN, DCSR);
}
@@ -491,12 +491,12 @@ static void phy_disable(struct pxad_phy *phy)
static void pxad_launch_chan(struct pxad_chan *chan,
struct pxad_desc_sw *desc)
{
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): desc=%p\n", __func__, desc);
if (!chan->phy) {
chan->phy = lookup_phy(chan);
if (!chan->phy) {
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): no free dma channel\n", __func__);
return;
}
@@ -592,7 +592,7 @@ static unsigned int clear_chan_irq(struct pxad_phy *phy)
dcsr = phy_readl_relaxed(phy, DCSR);
phy_writel(phy, dcsr, DCSR);
if ((dcsr & PXA_DCSR_BUSERR) && (phy->vchan))
- dev_warn(&phy->vchan->vc.chan.dev->device,
+ dev_warn(&phy->vchan->vc.chan.chan_dev->device,
"%s(chan=%p): PXA_DCSR_BUSERR\n",
__func__, &phy->vchan);
@@ -617,7 +617,7 @@ static irqreturn_t pxad_chan_handler(int irq, void *dev_id)
spin_lock(&chan->vc.lock);
list_for_each_entry_safe(vd, tmp, &chan->vc.desc_issued, node) {
vd_completed = is_desc_completed(vd);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): checking txd %p[%x]: completed=%d dcsr=0x%x\n",
__func__, vd, vd->tx.cookie, vd_completed,
dcsr);
@@ -640,7 +640,7 @@ static irqreturn_t pxad_chan_handler(int irq, void *dev_id)
}
if (!chan->bus_error && dcsr & PXA_DCSR_STOPSTATE) {
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): channel stopped, submitted_empty=%d issued_empty=%d",
__func__,
list_empty(&chan->vc.desc_submitted),
@@ -694,7 +694,7 @@ static int pxad_alloc_chan_resources(struct dma_chan *dchan)
__alignof__(struct pxad_desc_hw),
0);
if (!chan->desc_pool) {
- dev_err(&chan->vc.chan.dev->device,
+ dev_err(&chan->vc.chan.chan_dev->device,
"%s(): unable to allocate descriptor pool\n",
__func__);
return -ENOMEM;
@@ -749,7 +749,7 @@ pxad_alloc_desc(struct pxad_chan *chan, unsigned int nb_hw_desc)
for (i = 0; i < nb_hw_desc; i++) {
desc = dma_pool_alloc(sw_desc->desc_pool, GFP_NOWAIT, &dma);
if (!desc) {
- dev_err(&chan->vc.chan.dev->device,
+ dev_err(&chan->vc.chan.chan_dev->device,
"%s(): Couldn't allocate the %dth hw_desc from dma_pool %p\n",
__func__, i, sw_desc->desc_pool);
goto err;
@@ -786,7 +786,7 @@ static dma_cookie_t pxad_tx_submit(struct dma_async_tx_descriptor *tx)
if (list_empty(&vc->desc_submitted) && pxad_try_hotchain(vc, vd)) {
list_move_tail(&vd->node, &vc->desc_issued);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): txd %p[%x]: submitted (hot linked)\n",
__func__, vd, cookie);
goto out;
@@ -809,7 +809,7 @@ static dma_cookie_t pxad_tx_submit(struct dma_async_tx_descriptor *tx)
else
vd_chained = NULL;
}
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): txd %p[%x]: submitted (%s linked)\n",
__func__, vd, cookie, vd_chained ? "cold" : "not");
list_move_tail(&vd->node, &vc->desc_submitted);
@@ -832,7 +832,7 @@ static void pxad_issue_pending(struct dma_chan *dchan)
vd_first = list_first_entry(&chan->vc.desc_submitted,
struct virt_dma_desc, node);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): txd %p[%x]", __func__, vd_first, vd_first->tx.cookie);
vchan_issue_pending(&chan->vc);
@@ -852,7 +852,7 @@ pxad_tx_prep(struct virt_dma_chan *vc, struct virt_dma_desc *vd,
INIT_LIST_HEAD(&vd->node);
tx = vchan_tx_prep(vc, vd, tx_flags);
tx->tx_submit = pxad_tx_submit;
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): vc=%p txd=%p[%x] flags=0x%lx\n", __func__,
vc, vd, vd->tx.cookie,
tx_flags);
@@ -891,7 +891,7 @@ static void pxad_get_config(struct pxad_chan *chan,
*dcmd |= PXA_DCMD_BURST32 | PXA_DCMD_INCTRGADDR |
PXA_DCMD_INCSRCADDR;
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): dev_addr=0x%x maxburst=%d width=%d dir=%d\n",
__func__, dev_addr, maxburst, width, dir);
@@ -925,7 +925,7 @@ pxad_prep_memcpy(struct dma_chan *dchan,
if (!dchan || !len)
return NULL;
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): dma_dst=0x%lx dma_src=0x%lx len=%zu flags=%lx\n",
__func__, (unsigned long)dma_dst, (unsigned long)dma_src,
len, flags);
@@ -974,7 +974,7 @@ pxad_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl,
return NULL;
pxad_get_config(chan, dir, &dcmd, &dsadr, &dtadr);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): dir=%d flags=%lx\n", __func__, dir, flags);
nb_desc = sg_nents_for_dma(sgl, sg_len, PDMA_MAX_DESC_BYTES);
@@ -1021,7 +1021,7 @@ pxad_prep_dma_cyclic(struct dma_chan *dchan,
if (!dchan || !len || !period_len)
return NULL;
if ((dir != DMA_DEV_TO_MEM) && (dir != DMA_MEM_TO_DEV)) {
- dev_err(&chan->vc.chan.dev->device,
+ dev_err(&chan->vc.chan.chan_dev->device,
"Unsupported direction for cyclic DMA\n");
return NULL;
}
@@ -1032,7 +1032,7 @@ pxad_prep_dma_cyclic(struct dma_chan *dchan,
pxad_get_config(chan, dir, &dcmd, &dsadr, &dtadr);
dcmd |= PXA_DCMD_ENDIRQEN | (PXA_DCMD_LENGTH & period_len);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): buf_addr=0x%lx len=%zu period=%zu dir=%d flags=%lx\n",
__func__, (unsigned long)buf_addr, len, period_len, dir, flags);
@@ -1080,14 +1080,14 @@ static int pxad_terminate_all(struct dma_chan *dchan)
struct pxad_phy *phy;
LIST_HEAD(head);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): vchan %p: terminate all\n", __func__, &chan->vc);
spin_lock_irqsave(&chan->vc.lock, flags);
vchan_get_all_descriptors(&chan->vc, &head);
list_for_each_entry(vd, &head, node) {
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): cancelling txd %p[%x] (completed=%d)", __func__,
vd, vd->tx.cookie, is_desc_completed(vd));
}
@@ -1177,7 +1177,7 @@ static unsigned int pxad_residue(struct pxad_chan *chan,
out:
spin_unlock_irqrestore(&chan->vc.lock, flags);
- dev_dbg(&chan->vc.chan.dev->device,
+ dev_dbg(&chan->vc.chan.chan_dev->device,
"%s(): txd %p[%x] sw_desc=%p: %d\n",
__func__, vd, cookie, sw_desc, residue);
return residue;
diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
index 4e3ecb6763036..5fceed6fd8265 100644
--- a/drivers/dma/stm32/stm32-dma.c
+++ b/drivers/dma/stm32/stm32-dma.c
@@ -250,7 +250,7 @@ static struct stm32_dma_desc *to_stm32_dma_desc(struct virt_dma_desc *vdesc)
static struct device *chan2dev(struct stm32_dma_chan *chan)
{
- return &chan->vchan.chan.dev->device;
+ return &chan->vchan.chan.chan_dev->device;
}
static u32 stm32_dma_read(struct stm32_dma_device *dmadev, u32 reg)
diff --git a/drivers/dma/stm32/stm32-dma3.c b/drivers/dma/stm32/stm32-dma3.c
index ab0fb05597363..81db3b33cabf6 100644
--- a/drivers/dma/stm32/stm32-dma3.c
+++ b/drivers/dma/stm32/stm32-dma3.c
@@ -330,7 +330,7 @@ static inline struct stm32_dma3_swdesc *to_stm32_dma3_swdesc(struct virt_dma_des
static struct device *chan2dev(struct stm32_dma3_chan *chan)
{
- return &chan->vchan.chan.dev->device;
+ return &chan->vchan.chan.chan_dev->device;
}
static struct device *ddata2dev(struct stm32_dma3_ddata *ddata)
diff --git a/drivers/dma/stm32/stm32-mdma.c b/drivers/dma/stm32/stm32-mdma.c
index c274638e919c2..a7ab77e4ebbcb 100644
--- a/drivers/dma/stm32/stm32-mdma.c
+++ b/drivers/dma/stm32/stm32-mdma.c
@@ -278,7 +278,7 @@ static struct stm32_mdma_desc *to_stm32_mdma_desc(struct virt_dma_desc *vdesc)
static struct device *chan2dev(struct stm32_mdma_chan *chan)
{
- return &chan->vchan.chan.dev->device;
+ return &chan->vchan.chan.chan_dev->device;
}
static struct device *mdma2dev(struct stm32_mdma_device *mdma_dev)
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c
index f47a326dd7ffa..0fa640557fb07 100644
--- a/drivers/dma/sun6i-dma.c
+++ b/drivers/dma/sun6i-dma.c
@@ -215,7 +215,7 @@ struct sun6i_dma_dev {
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static inline struct sun6i_dma_dev *to_sun6i_dma_dev(struct dma_device *d)
diff --git a/drivers/dma/switchtec_dma.c b/drivers/dma/switchtec_dma.c
index c133535d37656..ebb734f807a3b 100644
--- a/drivers/dma/switchtec_dma.c
+++ b/drivers/dma/switchtec_dma.c
@@ -406,7 +406,7 @@ static int disable_channel(struct switchtec_dma_chan *swdma_chan)
static void
switchtec_dma_cleanup_completed(struct switchtec_dma_chan *swdma_chan)
{
- struct device *chan_dev = &swdma_chan->dma_chan.dev->device;
+ struct device *chan_dev = &swdma_chan->dma_chan.chan_dev->device;
struct switchtec_dma_desc *desc;
struct switchtec_dma_hw_ce *ce;
struct dmaengine_result res;
@@ -851,7 +851,7 @@ static irqreturn_t switchtec_dma_chan_status_isr(int irq, void *dma)
list_for_each_entry(chan, &dma_dev->channels, device_node) {
swdma_chan = container_of(chan, struct switchtec_dma_chan,
dma_chan);
- chan_dev = &swdma_chan->dma_chan.dev->device;
+ chan_dev = &swdma_chan->dma_chan.chan_dev->device;
chan_hw = swdma_chan->mmio_chan_hw;
rcu_read_lock();
@@ -1009,19 +1009,19 @@ static int switchtec_dma_alloc_chan_resources(struct dma_chan *chan)
perf_cfg = readl(&swdma_chan->mmio_chan_fw->perf_cfg);
rcu_read_unlock();
- dev_dbg(&chan->dev->device, "Burst Size: 0x%x\n",
+ dev_dbg(&chan->chan_dev->device, "Burst Size: 0x%x\n",
FIELD_GET(PERF_BURST_SIZE_MASK, perf_cfg));
- dev_dbg(&chan->dev->device, "Burst Scale: 0x%x\n",
+ dev_dbg(&chan->chan_dev->device, "Burst Scale: 0x%x\n",
FIELD_GET(PERF_BURST_SCALE_MASK, perf_cfg));
- dev_dbg(&chan->dev->device, "Interval: 0x%x\n",
+ dev_dbg(&chan->chan_dev->device, "Interval: 0x%x\n",
FIELD_GET(PERF_INTERVAL_MASK, perf_cfg));
- dev_dbg(&chan->dev->device, "Arb Weight: 0x%x\n",
+ dev_dbg(&chan->chan_dev->device, "Arb Weight: 0x%x\n",
FIELD_GET(PERF_ARB_WEIGHT_MASK, perf_cfg));
- dev_dbg(&chan->dev->device, "MRRS: 0x%x\n",
+ dev_dbg(&chan->chan_dev->device, "MRRS: 0x%x\n",
FIELD_GET(PERF_MRRS_MASK, perf_cfg));
return SWITCHTEC_DMA_SQ_SIZE;
diff --git a/drivers/dma/tegra186-gpc-dma.c b/drivers/dma/tegra186-gpc-dma.c
index 64cedef1050ae..e36111e8a76dc 100644
--- a/drivers/dma/tegra186-gpc-dma.c
+++ b/drivers/dma/tegra186-gpc-dma.c
@@ -1537,7 +1537,7 @@ static int tegra_dma_probe(struct platform_device *pdev)
* the channels available and registered for the DMA device are used.
*/
list_for_each_entry(chan, &tdma->dma_dev.channels, device_node) {
- chdev = &chan->dev->device;
+ chdev = &chan->chan_dev->device;
tdc = to_tegra_dma_chan(chan);
if (use_iommu_map) {
@@ -1554,7 +1554,7 @@ static int tegra_dma_probe(struct platform_device *pdev)
return dev_err_probe(chdev, -EINVAL,
"Failed to get stream ID for channel %d\n", tdc->id);
- chan->dev->chan_dma_dev = true;
+ chan->chan_dev->chan_dma_dev = true;
}
/* program stream-id for this channel */
diff --git a/drivers/dma/tegra20-apb-dma.c b/drivers/dma/tegra20-apb-dma.c
index 640b8a218c9ad..33811e7ee6552 100644
--- a/drivers/dma/tegra20-apb-dma.c
+++ b/drivers/dma/tegra20-apb-dma.c
@@ -256,7 +256,7 @@ txd_to_tegra_dma_desc(struct dma_async_tx_descriptor *td)
static inline struct device *tdc2dev(struct tegra_dma_channel *tdc)
{
- return &tdc->dma_chan.dev->device;
+ return &tdc->dma_chan.chan_dev->device;
}
static dma_cookie_t tegra_dma_tx_submit(struct dma_async_tx_descriptor *tx);
diff --git a/drivers/dma/ti/k3-udma.c b/drivers/dma/ti/k3-udma.c
index fb21e0df5ab7b..4fa6e81ff5a86 100644
--- a/drivers/dma/ti/k3-udma.c
+++ b/drivers/dma/ti/k3-udma.c
@@ -422,16 +422,16 @@ static int navss_psil_unpair(struct udma_dev *ud, u32 src_thread,
static void k3_configure_chan_coherency(struct dma_chan *chan, u32 asel)
{
- struct device *chan_dev = &chan->dev->device;
+ struct device *chan_dev = &chan->chan_dev->device;
if (asel == 0) {
/* No special handling for the channel */
- chan->dev->chan_dma_dev = false;
+ chan->chan_dev->chan_dma_dev = false;
dev_clear_dma_coherent(chan_dev);
chan_dev->dma_parms = NULL;
} else if (asel == 14 || asel == 15) {
- chan->dev->chan_dma_dev = true;
+ chan->chan_dev->chan_dma_dev = true;
dev_set_dma_coherent(chan_dev);
dma_coerce_mask_and_coherent(chan_dev, DMA_BIT_MASK(48));
diff --git a/drivers/dma/timb_dma.c b/drivers/dma/timb_dma.c
index 4fc5119854ec1..f414e41d90013 100644
--- a/drivers/dma/timb_dma.c
+++ b/drivers/dma/timb_dma.c
@@ -93,7 +93,7 @@ struct timb_dma {
static struct device *chan2dev(struct dma_chan *chan)
{
- return &chan->dev->device;
+ return &chan->chan_dev->device;
}
static struct device *chan2dmadev(struct dma_chan *chan)
{
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index fe33a20abc614..0fcec3f21390b 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -325,7 +325,8 @@ struct dma_router {
* @lock: protect between config and prepare transfer when driver have not
* implemented callback device_prep_config_sg().
* @chan_id: channel ID for sysfs
- * @dev: class device for sysfs
+ * @chan_dev: class channel device for sysfs, some device use it for per-channel
+ * iommu mapping.
* @name: backlink name for sysfs
* @dbg_client_name: slave name for debugfs in format:
* dev_name(requester's dev):channel name, for example: "2b00000.mcasp:tx"
@@ -351,7 +352,14 @@ struct dma_chan {
/* sysfs */
int chan_id;
- struct dma_chan_dev *dev;
+ union {
+ struct dma_chan_dev *chan_dev;
+ /*
+ * please use chan_dev, dev will be removed after all user
+ switch to chan_dev
+ */
+ struct dma_chan_dev *dev;
+ };
const char *name;
#ifdef CONFIG_DEBUG_FS
char *dbg_client_name;
@@ -532,7 +540,7 @@ struct dma_slave_caps {
static inline const char *dma_chan_name(struct dma_chan *chan)
{
- return dev_name(&chan->dev->device);
+ return dev_name(&chan->chan_dev->device);
}
/**
@@ -1805,8 +1813,8 @@ dmaengine_get_direction_text(enum dma_transfer_direction dir)
static inline struct device *dmaengine_get_dma_device(struct dma_chan *chan)
{
- if (chan->dev->chan_dma_dev)
- return &chan->dev->device;
+ if (chan->chan_dev->chan_dma_dev)
+ return &chan->chan_dev->device;
return chan->device->dev;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name
2026-08-12 21:24 ` [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name Frank.Li
@ 2026-08-12 21:34 ` sashiko-bot
0 siblings, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-08-12 21:34 UTC (permalink / raw)
To: Frank.Li; +Cc: imx, Frank.Li, vkoul, linux-trace-kernel, linux-sunxi, dmaengine
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Probe error path prematurely frees DMA channel structures and disables clocks before devm-managed IRQs are freed, leading to a Use-After-Free and potential bus hang.
--
--- Patch [1]: [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name ---
commit 77ba32b52a0d71c14db9e5276f81ba0fa2896131
Author: Frank Li <Frank.Li@nxp.com>
dmaengine: use dma_chan_name() helper to get per-channel device name
This patch uses the existing dma_chan_name() helper to obtain the
per-channel device name instead of open-coding it. This simplifies the
code and improves consistency.
[ ... ]
> diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
> index d3ad78562a140..4e3ecb6763036 100644
> --- a/drivers/dma/stm32/stm32-dma.c
> +++ b/drivers/dma/stm32/stm32-dma.c
> @@ -1668,7 +1668,7 @@ static int stm32_dma_probe(struct platform_device *pdev)
>
> ret = devm_request_irq(&pdev->dev, chan->irq,
> stm32_dma_chan_irq, 0,
> - dev_name(chan2dev(chan)), chan);
> + dma_chan_name(&chan->vchan.chan), chan);
[Severity: High]
This is a pre-existing issue and was not introduced by the patch under
review, but doesn't the error path in stm32_dma_probe() in
drivers/dma/stm32/stm32-dma.c prematurely free DMA channel structures and
disable clocks before the devm-managed IRQs are freed?
In stm32_dma_probe(), IRQs are requested using devm_request_irq() and
passed dma_chan_name(&chan->vchan.chan) as the action name.
If a subsequent initialization step fails, the error path manually calls
dma_async_device_unregister(dd):
err_unregister:
dma_async_device_unregister(dd);
clk_free:
clk_disable_unprepare(dmadev->clk);
return ret;
This frees the channel device structures, including the embedded name
string, and clk_disable_unprepare(dmadev->clk) stops the hardware clock.
Because the IRQs are devres-managed, they remain active until the probe
function returns and the devres framework unwinds. During this window, if
/proc/interrupts is read, the kernel accesses the freed action->name
string, potentially triggering a Use-After-Free.
Furthermore, if a spurious interrupt fires during this window, the handler
stm32_dma_chan_irq() will read hardware registers with the device clock
disabled, which could trigger a Data Abort kernel panic.
> if (ret) {
> dev_err(&pdev->dev,
> "request_irq failed with err %d channel %d\n",
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812-dma-chan_dev-rename-v1-0-a67131f7d5c2@nxp.com?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-08-12 21:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 21:24 [PATCH 0/2] dmaengine: rename dma_chan::dev to dma_chan::chan_dev for clarity Frank.Li
2026-08-12 21:24 ` [PATCH 1/2] dmaengine: use dma_chan_name() helper to get per-channel device name Frank.Li
2026-08-12 21:34 ` sashiko-bot
2026-08-12 21:24 ` [PATCH 2/2] dmaengine: add union chan_dev for dma_chan::dev for clarity Frank.Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox