[v2,1/3] dmaengine: vchan: add vchan_chan_name() to get channel device name

Message ID 20260903-dma-chan_dev-rename-v2-1-0db305b6c716@nxp.com (mailing list archive)
State New
Headers
Series dmaengine: rename dma_chan::dev to dma_chan::chan_dev for clarity |

Commit Message

Frank Li Sept. 3, 2026, 8:53 p.m. UTC
From: Frank Li <Frank.Li@nxp.com>

Introduce vchan_chan_name() to obtain the DMA channel device name.

Use a dedicated helper instead of directly accessing dma_chan::dev
so callers remain unaffected by an upcoming rename of the struct member.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/dma/arm-dma350.c                     |  2 +-
 drivers/dma/loongson/loongson2-apb-cmc-dma.c |  2 +-
 drivers/dma/stm32/stm32-dma.c                |  2 +-
 drivers/dma/stm32/stm32-dma3.c               |  4 ++--
 drivers/dma/virt-dma.h                       | 11 +++++++++++
 5 files changed, 16 insertions(+), 5 deletions(-)
  

Comments

sashiko-bot@kernel.org Sept. 3, 2026, 9:03 p.m. UTC | #1
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:

Pre-existing issues:
- [High] This problem wasn't introduced by this patch, but there is a preexisting Use-After-Free of the channel name string in the IRQ handler registration on the probe error path.
--

commit 33984ca85ddf2f8f41c22000aad40c8fceb5f946
Author: Frank Li <Frank.Li@nxp.com>

dmaengine: vchan: add vchan_chan_name() to get channel device name

Introduce vchan_chan_name() to obtain the DMA channel device name.
Use a dedicated helper instead of directly accessing dma_chan::dev
so callers remain unaffected by an upcoming rename of the struct member.

[ ... ]

> diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
> index d3ad78562a140..3e8151e2ad75a 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);
> +				       vchan_chan_name(&chan->vchan), chan);

[Severity: High]
This isn't a bug introduced by this patch, but is there a preexisting
Use-After-Free of the channel name string in the IRQ handler registration on
the probe error path?

In stm32_dma_probe(), the driver successfully registers the DMA device using
dma_async_device_register(), then iteratively allocates devres-managed IRQs
using devm_request_irq() with the channel name pointer from vchan_chan_name().

If a subsequent operation fails (e.g. of_dma_controller_register()), the error
handling path manually calls dma_async_device_unregister(dd). This frees the
DMA device and its dynamically allocated channel name string immediately.

However, the devres-managed IRQs remain active until the probe function returns
and devres cleanup runs. During this window, the IRQ subsystem holds a dangling
pointer to the freed channel name.

Could this race window be triggered by unprivileged users concurrently reading
/proc/interrupts, or if an interrupt fires during this time?
  
Logan Gunthorpe Sept. 3, 2026, 10:30 p.m. UTC | #2
On 2026-09-03 2:53 p.m., Frank.Li@oss.nxp.com wrote:
> From: Frank Li <Frank.Li@nxp.com>
> 
> Introduce vchan_chan_name() to obtain the DMA channel device name.
> 
> Use a dedicated helper instead of directly accessing dma_chan::dev
> so callers remain unaffected by an upcoming rename of the struct member.
> 
> Signed-off-by: Frank Li <Frank.Li@nxp.com>

Makes sense to me:

Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
  
Amelie Delaunay Sept. 4, 2026, 8:35 a.m. UTC | #3
Hi Frank,

On 9/3/26 22:53, Frank.Li@oss.nxp.com wrote:
> From: Frank Li <Frank.Li@nxp.com>
> 
> Introduce vchan_chan_name() to obtain the DMA channel device name.
> 
> Use a dedicated helper instead of directly accessing dma_chan::dev
> so callers remain unaffected by an upcoming rename of the struct member.
> 
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
>   drivers/dma/arm-dma350.c                     |  2 +-
>   drivers/dma/loongson/loongson2-apb-cmc-dma.c |  2 +-
>   drivers/dma/stm32/stm32-dma.c                |  2 +-
>   drivers/dma/stm32/stm32-dma3.c               |  4 ++--

Could you move the driver updates from this patch to the next one? I 
don’t understand why the drivers above are modified here, while others 
are deferred to "[PATCH v2 2/3] dmaengine: use dma_chan_name() helper to 
get per-channel device name".

Regards,
Amelie

>   drivers/dma/virt-dma.h                       | 11 +++++++++++
>   5 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
> index 09403aca8bb06..52f5242ea3327 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);
> +			      vchan_chan_name(&dch->vc), dch);
>   	if (!ret)
>   		writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + CH_INTREN);
>   
> diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
> index 1c9a542edc859..2f1c8c4fd0654 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);
> +				       vchan_chan_name(&lchan->vchan), lchan);
>   		if (ret)
>   			return ret;
>   	}
> diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
> index d3ad78562a140..3e8151e2ad75a 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);
> +				       vchan_chan_name(&chan->vchan), 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..1ee1bd22703fb 100644
> --- a/drivers/dma/stm32/stm32-dma3.c
> +++ b/drivers/dma/stm32/stm32-dma3.c
> @@ -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);
> +				       vchan_chan_name(&chan->vchan), chan);
>   		if (ret) {
>   			dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
> -				      dev_name(chan2dev(chan)));
> +				      vchan_chan_name(&chan->vchan));
>   			goto err_clk_disable;
>   		}
>   	}
> diff --git a/drivers/dma/virt-dma.h b/drivers/dma/virt-dma.h
> index 59d9eabc8b674..dd023a3831209 100644
> --- a/drivers/dma/virt-dma.h
> +++ b/drivers/dma/virt-dma.h
> @@ -209,6 +209,17 @@ static inline void vchan_free_chan_resources(struct virt_dma_chan *vc)
>   	vchan_dma_desc_free_list(vc, &head);
>   }
>   
> +/**
> + * vchan_chan_name - Return vchan DMA channel device name
> + * @vc: virtual channel
> + *
> + * Return: The name of the DMA channel device
> + */
> +static inline const char *vchan_chan_name(struct virt_dma_chan *vc)
> +{
> +	return dma_chan_name(&vc->chan);
> +}
> +
>   /**
>    * vchan_synchronize() - synchronize callback execution to the current context
>    * @vc: virtual channel to synchronize
>
  
Andy Shevchenko Sept. 4, 2026, 9:08 a.m. UTC | #4
On Thu, Sep 03, 2026 at 04:53:11PM -0400, Frank.Li@oss.nxp.com wrote:

> Introduce vchan_chan_name() to obtain the DMA channel device name.
> 
> Use a dedicated helper instead of directly accessing dma_chan::dev
> so callers remain unaffected by an upcoming rename of the struct member.

LGTM,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

...

>  		ret = devm_request_irq(&pdev->dev, chan->irq,
>  				       stm32_dma_chan_irq, 0,
> -				       dev_name(chan2dev(chan)), chan);
> +				       vchan_chan_name(&chan->vchan), chan);
>  		if (ret) {
>  			dev_err(&pdev->dev,
>  				"request_irq failed with err %d channel %d\n",

This one...

> +++ b/drivers/dma/stm32/stm32-dma3.c

>  		ret = devm_request_irq(&pdev->dev, chan->irq, stm32_dma3_chan_irq, 0,
> -				       dev_name(chan2dev(chan)), chan);
> +				       vchan_chan_name(&chan->vchan), chan);
>  		if (ret) {
>  			dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
> -				      dev_name(chan2dev(chan)));
> +				      vchan_chan_name(&chan->vchan));
>  			goto err_clk_disable;

...and this one are duplicate messages as devm_request*irq() printsr
most of the information.

Not sure if there will be a patch to simply drop them.
  
Amelie Delaunay Sept. 4, 2026, 9:10 a.m. UTC | #5
On 9/4/26 10:35, Amelie Delaunay wrote:
> Hi Frank,
> 
> On 9/3/26 22:53, Frank.Li@oss.nxp.com wrote:
>> From: Frank Li <Frank.Li@nxp.com>
>>
>> Introduce vchan_chan_name() to obtain the DMA channel device name.
>>
>> Use a dedicated helper instead of directly accessing dma_chan::dev
>> so callers remain unaffected by an upcoming rename of the struct member.
>>
>> Signed-off-by: Frank Li <Frank.Li@nxp.com>
>> ---
>>   drivers/dma/arm-dma350.c                     |  2 +-
>>   drivers/dma/loongson/loongson2-apb-cmc-dma.c |  2 +-
>>   drivers/dma/stm32/stm32-dma.c                |  2 +-
>>   drivers/dma/stm32/stm32-dma3.c               |  4 ++--
> 
> Could you move the driver updates from this patch to the next one? I 
> don’t understand why the drivers above are modified here, while others 
> are deferred to "[PATCH v2 2/3] dmaengine: use dma_chan_name() helper to 
> get per-channel device name".
> 

Oh, okay — my bad. I've just looked at v1, and I now understand that you 
split the vchan_chan_name() and dma_chan_name() updates.
I didn’t catch that at first glance because your cover letter hasn’t 
changed between v1 and v2.
"1st patch: use the existing helper dma_chan_name() to reduce rename 
differences.
2nd patch: rename drivers/dma"

> Regards,
> Amelie
> 
>>   drivers/dma/virt-dma.h                       | 11 +++++++++++
>>   5 files changed, 16 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
>> index 09403aca8bb06..52f5242ea3327 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);
>> +                  vchan_chan_name(&dch->vc), dch);
>>       if (!ret)
>>           writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + 
>> CH_INTREN);
>> diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/ 
>> dma/loongson/loongson2-apb-cmc-dma.c
>> index 1c9a542edc859..2f1c8c4fd0654 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);
>> +                       vchan_chan_name(&lchan->vchan), lchan);
>>           if (ret)
>>               return ret;
>>       }
>> diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32- 
>> dma.c
>> index d3ad78562a140..3e8151e2ad75a 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);
>> +                       vchan_chan_name(&chan->vchan), 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..1ee1bd22703fb 100644
>> --- a/drivers/dma/stm32/stm32-dma3.c
>> +++ b/drivers/dma/stm32/stm32-dma3.c
>> @@ -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);
>> +                       vchan_chan_name(&chan->vchan), chan);
>>           if (ret) {
>>               dev_err_probe(&pdev->dev, ret, "Failed to request 
>> channel %s IRQ\n",
>> -                      dev_name(chan2dev(chan)));
>> +                      vchan_chan_name(&chan->vchan));
>>               goto err_clk_disable;
>>           }
>>       }
>> diff --git a/drivers/dma/virt-dma.h b/drivers/dma/virt-dma.h
>> index 59d9eabc8b674..dd023a3831209 100644
>> --- a/drivers/dma/virt-dma.h
>> +++ b/drivers/dma/virt-dma.h
>> @@ -209,6 +209,17 @@ static inline void 
>> vchan_free_chan_resources(struct virt_dma_chan *vc)
>>       vchan_dma_desc_free_list(vc, &head);
>>   }
>> +/**
>> + * vchan_chan_name - Return vchan DMA channel device name
>> + * @vc: virtual channel
>> + *
>> + * Return: The name of the DMA channel device
>> + */
>> +static inline const char *vchan_chan_name(struct virt_dma_chan *vc)
>> +{
>> +    return dma_chan_name(&vc->chan);
>> +}
>> +
>>   /**
>>    * vchan_synchronize() - synchronize callback execution to the 
>> current context
>>    * @vc: virtual channel to synchronize
>>
> 
> _______________________________________________
> Linux-stm32 mailing list
> Linux-stm32@st-md-mailman.stormreply.com
> https://st-md-mailman.stormreply.com/mailman/listinfo/linux-stm32
  
Amelie Delaunay Sept. 4, 2026, 9:26 a.m. UTC | #6
On 9/4/26 11:08, Andy Shevchenko wrote:
> On Thu, Sep 03, 2026 at 04:53:11PM -0400, Frank.Li@oss.nxp.com wrote:
> 
>> Introduce vchan_chan_name() to obtain the DMA channel device name.
>>
>> Use a dedicated helper instead of directly accessing dma_chan::dev
>> so callers remain unaffected by an upcoming rename of the struct member.
> 
> LGTM,
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
> ...
> 
>>   		ret = devm_request_irq(&pdev->dev, chan->irq,
>>   				       stm32_dma_chan_irq, 0,
>> -				       dev_name(chan2dev(chan)), chan);
>> +				       vchan_chan_name(&chan->vchan), chan);
>>   		if (ret) {
>>   			dev_err(&pdev->dev,
>>   				"request_irq failed with err %d channel %d\n",
> 
> This one...
> 
>> +++ b/drivers/dma/stm32/stm32-dma3.c
> 
>>   		ret = devm_request_irq(&pdev->dev, chan->irq, stm32_dma3_chan_irq, 0,
>> -				       dev_name(chan2dev(chan)), chan);
>> +				       vchan_chan_name(&chan->vchan), chan);
>>   		if (ret) {
>>   			dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
>> -				      dev_name(chan2dev(chan)));
>> +				      vchan_chan_name(&chan->vchan));
>>   			goto err_clk_disable;
> 
> ...and this one are duplicate messages as devm_request*irq() printsr
> most of the information.
> 
> Not sure if there will be a patch to simply drop them.
> 

It was the purpose of this series:
https://lore.kernel.org/dmaengine/20260709135846.97972-1-panchuang@vivo.com/
  
Andy Shevchenko Sept. 4, 2026, 11:38 a.m. UTC | #7
On Fri, Sep 04, 2026 at 11:26:37AM +0200, Amelie Delaunay wrote:
> On 9/4/26 11:08, Andy Shevchenko wrote:
> > On Thu, Sep 03, 2026 at 04:53:11PM -0400, Frank.Li@oss.nxp.com wrote:
> > 
> > > Introduce vchan_chan_name() to obtain the DMA channel device name.
> > > 
> > > Use a dedicated helper instead of directly accessing dma_chan::dev
> > > so callers remain unaffected by an upcoming rename of the struct member.
> > 
> > LGTM,
> > Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > 
> > ...
> > 
> > >   		ret = devm_request_irq(&pdev->dev, chan->irq,
> > >   				       stm32_dma_chan_irq, 0,
> > > -				       dev_name(chan2dev(chan)), chan);
> > > +				       vchan_chan_name(&chan->vchan), chan);
> > >   		if (ret) {
> > >   			dev_err(&pdev->dev,
> > >   				"request_irq failed with err %d channel %d\n",
> > 
> > This one...
> > 
> > > +++ b/drivers/dma/stm32/stm32-dma3.c
> > 
> > >   		ret = devm_request_irq(&pdev->dev, chan->irq, stm32_dma3_chan_irq, 0,
> > > -				       dev_name(chan2dev(chan)), chan);
> > > +				       vchan_chan_name(&chan->vchan), chan);
> > >   		if (ret) {
> > >   			dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
> > > -				      dev_name(chan2dev(chan)));
> > > +				      vchan_chan_name(&chan->vchan));
> > >   			goto err_clk_disable;
> > 
> > ...and this one are duplicate messages as devm_request*irq() printsr
> > most of the information.
> > 
> > Not sure if there will be a patch to simply drop them.
> 
> It was the purpose of this series:
> https://lore.kernel.org/dmaengine/20260709135846.97972-1-panchuang@vivo.com/

Yes, thanks. My point is (independently on who contributes that patch) that
the piece above may be an unneeded churn due to messages are going to be
removed. It all relies if that series (a.k.a. patch that removes messages)
goes first.
  
Frank Li Sept. 4, 2026, 2:21 p.m. UTC | #8
On Fri, Sep 04, 2026 at 11:10:54AM +0200, Amelie Delaunay wrote:
> On 9/4/26 10:35, Amelie Delaunay wrote:
> > Hi Frank,
> >
> > On 9/3/26 22:53, Frank.Li@oss.nxp.com wrote:
> > > From: Frank Li <Frank.Li@nxp.com>
> > >
> > > Introduce vchan_chan_name() to obtain the DMA channel device name.
> > >
> > > Use a dedicated helper instead of directly accessing dma_chan::dev
> > > so callers remain unaffected by an upcoming rename of the struct member.
> > >
> > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > ---
> > >   drivers/dma/arm-dma350.c                     |  2 +-
> > >   drivers/dma/loongson/loongson2-apb-cmc-dma.c |  2 +-
> > >   drivers/dma/stm32/stm32-dma.c                |  2 +-
> > >   drivers/dma/stm32/stm32-dma3.c               |  4 ++--
> >
> > Could you move the driver updates from this patch to the next one? I
> > don’t understand why the drivers above are modified here, while others
> > are deferred to "[PATCH v2 2/3] dmaengine: use dma_chan_name() helper to
> > get per-channel device name".
> >
>
> Oh, okay — my bad. I've just looked at v1, and I now understand that you
> split the vchan_chan_name() and dma_chan_name() updates.
> I didn’t catch that at first glance because your cover letter hasn’t changed
> between v1 and v2.
> "1st patch: use the existing helper dma_chan_name() to reduce rename
> differences.
> 2nd patch: rename drivers/dma"

B4 did not update it. Do you agree on this change?

Frank

>
> > Regards,
> > Amelie
> >
> > >   drivers/dma/virt-dma.h                       | 11 +++++++++++
> > >   5 files changed, 16 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
> > > index 09403aca8bb06..52f5242ea3327 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);
> > > +                  vchan_chan_name(&dch->vc), dch);
> > >       if (!ret)
> > >           writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base +
> > > CH_INTREN);
> > > diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/
> > > dma/loongson/loongson2-apb-cmc-dma.c
> > > index 1c9a542edc859..2f1c8c4fd0654 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);
> > > +                       vchan_chan_name(&lchan->vchan), lchan);
> > >           if (ret)
> > >               return ret;
> > >       }
> > > diff --git a/drivers/dma/stm32/stm32-dma.c
> > > b/drivers/dma/stm32/stm32- dma.c
> > > index d3ad78562a140..3e8151e2ad75a 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);
> > > +                       vchan_chan_name(&chan->vchan), 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..1ee1bd22703fb 100644
> > > --- a/drivers/dma/stm32/stm32-dma3.c
> > > +++ b/drivers/dma/stm32/stm32-dma3.c
> > > @@ -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);
> > > +                       vchan_chan_name(&chan->vchan), chan);
> > >           if (ret) {
> > >               dev_err_probe(&pdev->dev, ret, "Failed to request
> > > channel %s IRQ\n",
> > > -                      dev_name(chan2dev(chan)));
> > > +                      vchan_chan_name(&chan->vchan));
> > >               goto err_clk_disable;
> > >           }
> > >       }
> > > diff --git a/drivers/dma/virt-dma.h b/drivers/dma/virt-dma.h
> > > index 59d9eabc8b674..dd023a3831209 100644
> > > --- a/drivers/dma/virt-dma.h
> > > +++ b/drivers/dma/virt-dma.h
> > > @@ -209,6 +209,17 @@ static inline void
> > > vchan_free_chan_resources(struct virt_dma_chan *vc)
> > >       vchan_dma_desc_free_list(vc, &head);
> > >   }
> > > +/**
> > > + * vchan_chan_name - Return vchan DMA channel device name
> > > + * @vc: virtual channel
> > > + *
> > > + * Return: The name of the DMA channel device
> > > + */
> > > +static inline const char *vchan_chan_name(struct virt_dma_chan *vc)
> > > +{
> > > +    return dma_chan_name(&vc->chan);
> > > +}
> > > +
> > >   /**
> > >    * vchan_synchronize() - synchronize callback execution to the
> > > current context
> > >    * @vc: virtual channel to synchronize
> > >
> >
> > _______________________________________________
> > Linux-stm32 mailing list
> > Linux-stm32@st-md-mailman.stormreply.com
> > https://st-md-mailman.stormreply.com/mailman/listinfo/linux-stm32
>
  

Patch

diff --git a/drivers/dma/arm-dma350.c b/drivers/dma/arm-dma350.c
index 09403aca8bb06..52f5242ea3327 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);
+			      vchan_chan_name(&dch->vc), dch);
 	if (!ret)
 		writel_relaxed(CH_INTREN_DONE | CH_INTREN_ERR, dch->base + CH_INTREN);
 
diff --git a/drivers/dma/loongson/loongson2-apb-cmc-dma.c b/drivers/dma/loongson/loongson2-apb-cmc-dma.c
index 1c9a542edc859..2f1c8c4fd0654 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);
+				       vchan_chan_name(&lchan->vchan), lchan);
 		if (ret)
 			return ret;
 	}
diff --git a/drivers/dma/stm32/stm32-dma.c b/drivers/dma/stm32/stm32-dma.c
index d3ad78562a140..3e8151e2ad75a 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);
+				       vchan_chan_name(&chan->vchan), 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..1ee1bd22703fb 100644
--- a/drivers/dma/stm32/stm32-dma3.c
+++ b/drivers/dma/stm32/stm32-dma3.c
@@ -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);
+				       vchan_chan_name(&chan->vchan), chan);
 		if (ret) {
 			dev_err_probe(&pdev->dev, ret, "Failed to request channel %s IRQ\n",
-				      dev_name(chan2dev(chan)));
+				      vchan_chan_name(&chan->vchan));
 			goto err_clk_disable;
 		}
 	}
diff --git a/drivers/dma/virt-dma.h b/drivers/dma/virt-dma.h
index 59d9eabc8b674..dd023a3831209 100644
--- a/drivers/dma/virt-dma.h
+++ b/drivers/dma/virt-dma.h
@@ -209,6 +209,17 @@  static inline void vchan_free_chan_resources(struct virt_dma_chan *vc)
 	vchan_dma_desc_free_list(vc, &head);
 }
 
+/**
+ * vchan_chan_name - Return vchan DMA channel device name
+ * @vc: virtual channel
+ *
+ * Return: The name of the DMA channel device
+ */
+static inline const char *vchan_chan_name(struct virt_dma_chan *vc)
+{
+	return dma_chan_name(&vc->chan);
+}
+
 /**
  * vchan_synchronize() - synchronize callback execution to the current context
  * @vc: virtual channel to synchronize