Add dynamic per-channel IRQ naming to make DMA interrupt identification
easier in /proc/interrupts and debugging tools.
Instead of all channels showing "eDMA", they now show:
- "eDMA-0" through "eDMA-15" for channels 0-15
- "eDMA-16" through "eDMA-55" for channels 16-55
- "eDMA-tx-56" for the shared channel 56-63 interrupt
- "eDMA-err" for the error interrupt
This aids debugging DMA issues by making it clear which channel's
interrupt is being serviced.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@yoseli.org>
---
drivers/dma/mcf-edma-main.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/drivers/dma/mcf-edma-main.c b/drivers/dma/mcf-edma-main.c
index f95114829d8006fe4558169888ff38037d7610de..8a7c1787adb1f66f3b6729903635b072218afad1 100644
--- a/drivers/dma/mcf-edma-main.c
+++ b/drivers/dma/mcf-edma-main.c
@@ -81,8 +81,12 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
if (!res)
return -1;
- for (ret = 0, i = res->start; i <= res->end; ++i)
- ret |= request_irq(i, mcf_edma_tx_handler, 0, "eDMA", mcf_edma);
+ for (ret = 0, i = res->start; i <= res->end; ++i) {
+ char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
+ "eDMA-%d", i - res->start);
+
+ ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
+ }
if (ret)
return ret;
@@ -91,15 +95,19 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
if (!res)
return -1;
- for (ret = 0, i = res->start; i <= res->end; ++i)
- ret |= request_irq(i, mcf_edma_tx_handler, 0, "eDMA", mcf_edma);
+ for (ret = 0, i = res->start; i <= res->end; ++i) {
+ char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
+ "eDMA-%d", 16 + i - res->start);
+
+ ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
+ }
if (ret)
return ret;
ret = platform_get_irq_byname(pdev, "edma-tx-56-63");
if (ret != -ENXIO) {
ret = request_irq(ret, mcf_edma_tx_handler,
- 0, "eDMA", mcf_edma);
+ 0, "eDMA-tx-56", mcf_edma);
if (ret)
return ret;
}
@@ -107,7 +115,7 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
ret = platform_get_irq_byname(pdev, "edma-err");
if (ret != -ENXIO) {
ret = request_irq(ret, mcf_edma_err_handler,
- 0, "eDMA", mcf_edma);
+ 0, "eDMA-err", mcf_edma);
if (ret)
return ret;
}
--
2.39.5
Hi Jean-Michel,
kernel test robot noticed the following build warnings:
[auto build test WARNING on d13f3ac64efb868d09cb2726b1e84929afe90235]
url: https://github.com/intel-lab-lkp/linux/commits/Jean-Michel-Hautbois/dma-fsl-edma-Add-write-barrier-after-TCD-descriptor-fill/20251124-205625
base: d13f3ac64efb868d09cb2726b1e84929afe90235
patch link: https://lore.kernel.org/r/20251124-dma-coldfire-v1-3-dc8f93185464%40yoseli.org
patch subject: [PATCH 3/7] dma: mcf-edma: Add per-channel IRQ naming for debugging
config: x86_64-buildonly-randconfig-004-20251125 (https://download.01.org/0day-ci/archive/20251125/202511251902.QUkQzBbn-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251125/202511251902.QUkQzBbn-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511251902.QUkQzBbn-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/dma/mcf-edma-main.c:86:18: warning: format specifies type 'int' but the argument has type 'resource_size_t' (aka 'unsigned long long') [-Wformat]
86 | "eDMA-%d", i - res->start);
| ~~ ^~~~~~~~~~~~~~
| %llu
drivers/dma/mcf-edma-main.c:100:18: warning: format specifies type 'int' but the argument has type 'resource_size_t' (aka 'unsigned long long') [-Wformat]
100 | "eDMA-%d", 16 + i - res->start);
| ~~ ^~~~~~~~~~~~~~~~~~~
| %llu
2 warnings generated.
vim +86 drivers/dma/mcf-edma-main.c
72
73 static int mcf_edma_irq_init(struct platform_device *pdev,
74 struct fsl_edma_engine *mcf_edma)
75 {
76 int ret = 0, i;
77 struct resource *res;
78
79 res = platform_get_resource_byname(pdev,
80 IORESOURCE_IRQ, "edma-tx-00-15");
81 if (!res)
82 return -1;
83
84 for (ret = 0, i = res->start; i <= res->end; ++i) {
85 char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
> 86 "eDMA-%d", i - res->start);
87
88 ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
89 }
90 if (ret)
91 return ret;
92
93 res = platform_get_resource_byname(pdev,
94 IORESOURCE_IRQ, "edma-tx-16-55");
95 if (!res)
96 return -1;
97
98 for (ret = 0, i = res->start; i <= res->end; ++i) {
99 char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
100 "eDMA-%d", 16 + i - res->start);
101
102 ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
103 }
104 if (ret)
105 return ret;
106
107 ret = platform_get_irq_byname(pdev, "edma-tx-56-63");
108 if (ret != -ENXIO) {
109 ret = request_irq(ret, mcf_edma_tx_handler,
110 0, "eDMA-tx-56", mcf_edma);
111 if (ret)
112 return ret;
113 }
114
115 ret = platform_get_irq_byname(pdev, "edma-err");
116 if (ret != -ENXIO) {
117 ret = request_irq(ret, mcf_edma_err_handler,
118 0, "eDMA-err", mcf_edma);
119 if (ret)
120 return ret;
121 }
122
123 return 0;
124 }
125
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Jean-Michel,
kernel test robot noticed the following build warnings:
[auto build test WARNING on d13f3ac64efb868d09cb2726b1e84929afe90235]
url: https://github.com/intel-lab-lkp/linux/commits/Jean-Michel-Hautbois/dma-fsl-edma-Add-write-barrier-after-TCD-descriptor-fill/20251124-205625
base: d13f3ac64efb868d09cb2726b1e84929afe90235
patch link: https://lore.kernel.org/r/20251124-dma-coldfire-v1-3-dc8f93185464%40yoseli.org
patch subject: [PATCH 3/7] dma: mcf-edma: Add per-channel IRQ naming for debugging
config: x86_64-buildonly-randconfig-002-20251125 (https://download.01.org/0day-ci/archive/20251125/202511251608.l7i5CNAr-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251125/202511251608.l7i5CNAr-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511251608.l7i5CNAr-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/dma/mcf-edma-main.c: In function 'mcf_edma_irq_init':
>> drivers/dma/mcf-edma-main.c:86:56: warning: format '%d' expects argument of type 'int', but argument 4 has type 'resource_size_t' {aka 'long long unsigned int'} [-Wformat=]
86 | "eDMA-%d", i - res->start);
| ~^ ~~~~~~~~~~~~~~
| | |
| int resource_size_t {aka long long unsigned int}
| %lld
drivers/dma/mcf-edma-main.c:100:56: warning: format '%d' expects argument of type 'int', but argument 4 has type 'resource_size_t' {aka 'long long unsigned int'} [-Wformat=]
100 | "eDMA-%d", 16 + i - res->start);
| ~^ ~~~~~~~~~~~~~~~~~~~
| | |
| int resource_size_t {aka long long unsigned int}
| %lld
vim +86 drivers/dma/mcf-edma-main.c
72
73 static int mcf_edma_irq_init(struct platform_device *pdev,
74 struct fsl_edma_engine *mcf_edma)
75 {
76 int ret = 0, i;
77 struct resource *res;
78
79 res = platform_get_resource_byname(pdev,
80 IORESOURCE_IRQ, "edma-tx-00-15");
81 if (!res)
82 return -1;
83
84 for (ret = 0, i = res->start; i <= res->end; ++i) {
85 char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
> 86 "eDMA-%d", i - res->start);
87
88 ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
89 }
90 if (ret)
91 return ret;
92
93 res = platform_get_resource_byname(pdev,
94 IORESOURCE_IRQ, "edma-tx-16-55");
95 if (!res)
96 return -1;
97
98 for (ret = 0, i = res->start; i <= res->end; ++i) {
99 char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
100 "eDMA-%d", 16 + i - res->start);
101
102 ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
103 }
104 if (ret)
105 return ret;
106
107 ret = platform_get_irq_byname(pdev, "edma-tx-56-63");
108 if (ret != -ENXIO) {
109 ret = request_irq(ret, mcf_edma_tx_handler,
110 0, "eDMA-tx-56", mcf_edma);
111 if (ret)
112 return ret;
113 }
114
115 ret = platform_get_irq_byname(pdev, "edma-err");
116 if (ret != -ENXIO) {
117 ret = request_irq(ret, mcf_edma_err_handler,
118 0, "eDMA-err", mcf_edma);
119 if (ret)
120 return ret;
121 }
122
123 return 0;
124 }
125
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Jean-Michel,
On Mon, 24 Nov 2025 at 13:52, Jean-Michel Hautbois
<jeanmichel.hautbois@yoseli.org> wrote:
> Add dynamic per-channel IRQ naming to make DMA interrupt identification
> easier in /proc/interrupts and debugging tools.
>
> Instead of all channels showing "eDMA", they now show:
> - "eDMA-0" through "eDMA-15" for channels 0-15
> - "eDMA-16" through "eDMA-55" for channels 16-55
> - "eDMA-tx-56" for the shared channel 56-63 interrupt
> - "eDMA-err" for the error interrupt
>
> This aids debugging DMA issues by making it clear which channel's
> interrupt is being serviced.
>
> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@yoseli.org>
Thanks for your patch!
> --- a/drivers/dma/mcf-edma-main.c
> +++ b/drivers/dma/mcf-edma-main.c
> @@ -81,8 +81,12 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
> if (!res)
> return -1;
>
> - for (ret = 0, i = res->start; i <= res->end; ++i)
> - ret |= request_irq(i, mcf_edma_tx_handler, 0, "eDMA", mcf_edma);
> + for (ret = 0, i = res->start; i <= res->end; ++i) {
> + char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
> + "eDMA-%d", i - res->start);
Can return NULL, so needs error handling.
> +
> + ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
> + }
> if (ret)
> return ret;
>
> @@ -91,15 +95,19 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
> if (!res)
> return -1;
>
> - for (ret = 0, i = res->start; i <= res->end; ++i)
> - ret |= request_irq(i, mcf_edma_tx_handler, 0, "eDMA", mcf_edma);
> + for (ret = 0, i = res->start; i <= res->end; ++i) {
> + char *irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL,
> + "eDMA-%d", 16 + i - res->start);
Likewise
> +
> + ret |= request_irq(i, mcf_edma_tx_handler, 0, irq_name, mcf_edma);
> + }
> if (ret)
> return ret;
>
> ret = platform_get_irq_byname(pdev, "edma-tx-56-63");
> if (ret != -ENXIO) {
> ret = request_irq(ret, mcf_edma_tx_handler,
> - 0, "eDMA", mcf_edma);
> + 0, "eDMA-tx-56", mcf_edma);
Fits on a single line.
> if (ret)
> return ret;
> }
> @@ -107,7 +115,7 @@ static int mcf_edma_irq_init(struct platform_device *pdev,
> ret = platform_get_irq_byname(pdev, "edma-err");
> if (ret != -ENXIO) {
> ret = request_irq(ret, mcf_edma_err_handler,
> - 0, "eDMA", mcf_edma);
> + 0, "eDMA-err", mcf_edma);
Likewise.
> if (ret)
> return ret;
> }
>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
© 2016 - 2025 Red Hat, Inc.