* Re: [PATCH 1/2] dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated
@ 2024-06-01 17:48 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-06-01 17:48 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20240531210152.1878443-1-Frank.Li@nxp.com>
References: <20240531210152.1878443-1-Frank.Li@nxp.com>
TO: Frank Li <Frank.Li@nxp.com>
TO: Vinod Koul <vkoul@kernel.org>
TO: "open list:FREESCALE eDMA DRIVER" <imx@lists.linux.dev>
TO: open list <linux-kernel@vger.kernel.org>
Hi Frank,
kernel test robot noticed the following build warnings:
[auto build test WARNING on vkoul-dmaengine/next]
[also build test WARNING on linus/master v6.10-rc1 next-20240531]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-edma-remove-redundant-idle-field-from-fsl_chan/20240601-050401
base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next
patch link: https://lore.kernel.org/r/20240531210152.1878443-1-Frank.Li%40nxp.com
patch subject: [PATCH 1/2] dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated
:::::: branch date: 21 hours ago
:::::: commit date: 21 hours ago
config: i386-randconfig-141-20240601 (https://download.01.org/0day-ci/archive/20240602/202406020102.cYYPfac7-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202406020102.cYYPfac7-lkp@intel.com/
New smatch warnings:
drivers/dma/fsl-edma-common.c:828 fsl_edma_alloc_chan_resources() warn: 'fsl_chan->clk' from clk_prepare_enable() not released on lines: 824.
Old smatch warnings:
drivers/dma/fsl-edma-common.c:439 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:439 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:441 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:441 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:442 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:442 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:444 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:444 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:445 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:445 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:447 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:447 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:448 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:448 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:450 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:450 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:451 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:451 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:452 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:452 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:454 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:454 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:460 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:460 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:475 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:475 fsl_edma_set_tcd_regs() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:495 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:495 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:496 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:496 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:498 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:498 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:500 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:500 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:517 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:517 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:518 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:518 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:520 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:520 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:521 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:521 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:523 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:523 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:525 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:525 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:542 fsl_edma_fill_tcd() warn: statement has no effect 31
drivers/dma/fsl-edma-common.c:542 fsl_edma_fill_tcd() warn: statement has no effect 31
vim +828 drivers/dma/fsl-edma-common.c
9d831528a6567d Angelo Dureghello 2018-08-19 804
9d831528a6567d Angelo Dureghello 2018-08-19 805 int fsl_edma_alloc_chan_resources(struct dma_chan *chan)
9d831528a6567d Angelo Dureghello 2018-08-19 806 {
9d831528a6567d Angelo Dureghello 2018-08-19 807 struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
cd750c6413ce8a Frank Li 2024-05-31 808 int ret;
9d831528a6567d Angelo Dureghello 2018-08-19 809
d8d4355861d874 Joy Zou 2024-03-23 810 if (fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_HAS_CHCLK)
d8d4355861d874 Joy Zou 2024-03-23 811 clk_prepare_enable(fsl_chan->clk);
d8d4355861d874 Joy Zou 2024-03-23 812
9d831528a6567d Angelo Dureghello 2018-08-19 813 fsl_chan->tcd_pool = dma_pool_create("tcd_pool", chan->device->dev,
de7d9cb3b064fd Frank Li 2023-12-21 814 fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_TCD64 ?
de7d9cb3b064fd Frank Li 2023-12-21 815 sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd),
9d831528a6567d Angelo Dureghello 2018-08-19 816 32, 0);
cd750c6413ce8a Frank Li 2024-05-31 817
cd750c6413ce8a Frank Li 2024-05-31 818 if (fsl_chan->txirq) {
cd750c6413ce8a Frank Li 2024-05-31 819 ret = request_irq(fsl_chan->txirq, fsl_chan->irq_handler, IRQF_SHARED,
cd750c6413ce8a Frank Li 2024-05-31 820 fsl_chan->chan_name, fsl_chan);
cd750c6413ce8a Frank Li 2024-05-31 821
cd750c6413ce8a Frank Li 2024-05-31 822 if (ret) {
cd750c6413ce8a Frank Li 2024-05-31 823 dma_pool_destroy(fsl_chan->tcd_pool);
cd750c6413ce8a Frank Li 2024-05-31 824 return ret;
cd750c6413ce8a Frank Li 2024-05-31 825 }
cd750c6413ce8a Frank Li 2024-05-31 826 }
cd750c6413ce8a Frank Li 2024-05-31 827
9d831528a6567d Angelo Dureghello 2018-08-19 @828 return 0;
9d831528a6567d Angelo Dureghello 2018-08-19 829 }
9d831528a6567d Angelo Dureghello 2018-08-19 830
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread* [PATCH 1/2] dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated
@ 2024-05-31 21:01 Frank Li
0 siblings, 0 replies; 2+ messages in thread
From: Frank Li @ 2024-05-31 21:01 UTC (permalink / raw)
To: Vinod Koul, open list:FREESCALE eDMA DRIVER,
open list:FREESCALE eDMA DRIVER, open list
The edma feature individual IRQs for each DMA channel at some devices.
Given the presence of numerous eDMA instances, each with multiple channels,
IRQ request during probe results in an extensive list at /proc/interrupts.
However, a significant portion of these channels remains unused by the
system.
Request irq only when a DMA client driver requests a DMA channel.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
drivers/dma/fsl-edma-common.c | 15 +++++++++++++++
drivers/dma/fsl-edma-common.h | 1 +
drivers/dma/fsl-edma-main.c | 29 +++++++++++++++--------------
3 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c
index ac04a2ce4fa1f..91a4c11b7cbfd 100644
--- a/drivers/dma/fsl-edma-common.c
+++ b/drivers/dma/fsl-edma-common.c
@@ -805,6 +805,7 @@ void fsl_edma_issue_pending(struct dma_chan *chan)
int fsl_edma_alloc_chan_resources(struct dma_chan *chan)
{
struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
+ int ret;
if (fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_HAS_CHCLK)
clk_prepare_enable(fsl_chan->clk);
@@ -813,6 +814,17 @@ int fsl_edma_alloc_chan_resources(struct dma_chan *chan)
fsl_edma_drvflags(fsl_chan) & FSL_EDMA_DRV_TCD64 ?
sizeof(struct fsl_edma_hw_tcd64) : sizeof(struct fsl_edma_hw_tcd),
32, 0);
+
+ if (fsl_chan->txirq) {
+ ret = request_irq(fsl_chan->txirq, fsl_chan->irq_handler, IRQF_SHARED,
+ fsl_chan->chan_name, fsl_chan);
+
+ if (ret) {
+ dma_pool_destroy(fsl_chan->tcd_pool);
+ return ret;
+ }
+ }
+
return 0;
}
@@ -832,6 +844,9 @@ void fsl_edma_free_chan_resources(struct dma_chan *chan)
fsl_edma_unprep_slave_dma(fsl_chan);
spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
+ if (fsl_chan->txirq)
+ free_irq(fsl_chan->txirq, fsl_chan);
+
vchan_dma_desc_free_list(&fsl_chan->vchan, &head);
dma_pool_destroy(fsl_chan->tcd_pool);
fsl_chan->tcd_pool = NULL;
diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
index dfbdcc922ceea..c5a766da02b88 100644
--- a/drivers/dma/fsl-edma-common.h
+++ b/drivers/dma/fsl-edma-common.h
@@ -172,6 +172,7 @@ struct fsl_edma_chan {
int priority;
int hw_chanid;
int txirq;
+ irqreturn_t (*irq_handler)(int irq, void *dev_id);
bool is_rxchan;
bool is_remote;
bool is_multi_fifo;
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c
index a1c3c4ed869c5..82ac56be2d832 100644
--- a/drivers/dma/fsl-edma-main.c
+++ b/drivers/dma/fsl-edma-main.c
@@ -65,6 +65,13 @@ static irqreturn_t fsl_edma3_tx_handler(int irq, void *dev_id)
return IRQ_HANDLED;
}
+static irqreturn_t fsl_edma2_tx_handler(int irq, void *devi_id)
+{
+ struct fsl_edma_chan *fsl_chan = devi_id;
+
+ return fsl_edma_tx_handler(irq, fsl_chan->edma);
+}
+
static irqreturn_t fsl_edma_err_handler(int irq, void *dev_id)
{
struct fsl_edma_engine *fsl_edma = dev_id;
@@ -228,7 +235,6 @@ fsl_edma_irq_init(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma
static int fsl_edma3_irq_init(struct platform_device *pdev, struct fsl_edma_engine *fsl_edma)
{
- int ret;
int i;
for (i = 0; i < fsl_edma->n_chans; i++) {
@@ -243,13 +249,7 @@ static int fsl_edma3_irq_init(struct platform_device *pdev, struct fsl_edma_engi
if (fsl_chan->txirq < 0)
return -EINVAL;
- ret = devm_request_irq(&pdev->dev, fsl_chan->txirq,
- fsl_edma3_tx_handler, IRQF_SHARED,
- fsl_chan->chan_name, fsl_chan);
- if (ret) {
- dev_err(&pdev->dev, "Can't register chan%d's IRQ.\n", i);
- return -EINVAL;
- }
+ fsl_chan->irq_handler = fsl_edma3_tx_handler;
}
return 0;
@@ -278,19 +278,20 @@ fsl_edma2_irq_init(struct platform_device *pdev,
*/
for (i = 0; i < count; i++) {
irq = platform_get_irq(pdev, i);
+ ret = 0;
if (irq < 0)
return -ENXIO;
/* The last IRQ is for eDMA err */
- if (i == count - 1)
+ if (i == count - 1) {
ret = devm_request_irq(&pdev->dev, irq,
fsl_edma_err_handler,
0, "eDMA2-ERR", fsl_edma);
- else
- ret = devm_request_irq(&pdev->dev, irq,
- fsl_edma_tx_handler, 0,
- fsl_edma->chans[i].chan_name,
- fsl_edma);
+ } else {
+ fsl_edma->chans[i].txirq = irq;
+ fsl_edma->chans[i].irq_handler = fsl_edma2_tx_handler;
+ }
+
if (ret)
return ret;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-06-01 17:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-01 17:48 [PATCH 1/2] dmaengine: fsl-edma: request per-channel IRQ only when channel is allocated kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2024-05-31 21:01 Frank Li
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.