Only mark the channel as idle and start new transfers when the active list
is actually empty, ensuring proper channel state management and avoiding
spurious transfer attempts.
Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com>
Fixes: c0bba3a99f07 ("dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine")
---
drivers/dma/xilinx/xilinx_dma.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
index a34d8f0ceed8..9f416eae33d0 100644
--- a/drivers/dma/xilinx/xilinx_dma.c
+++ b/drivers/dma/xilinx/xilinx_dma.c
@@ -1914,8 +1914,10 @@ static irqreturn_t xilinx_dma_irq_handler(int irq, void *data)
XILINX_DMA_DMASR_DLY_CNT_IRQ)) {
spin_lock(&chan->lock);
xilinx_dma_complete_descriptor(chan);
- chan->idle = true;
- chan->start_transfer(chan);
+ if (list_empty(&chan->active_list)) {
+ chan->idle = true;
+ chan->start_transfer(chan);
+ }
spin_unlock(&chan->lock);
}
--
2.25.1
On Wed Sep 17, 2025 at 3:36 PM CEST, Suraj Gupta wrote: > Only mark the channel as idle and start new transfers when the active list > is actually empty, ensuring proper channel state management and avoiding > spurious transfer attempts. > > Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com> > Fixes: c0bba3a99f07 ("dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine") Tested-by: Folker Schwesinger <dev@folker-schwesinger.de> > --- > drivers/dma/xilinx/xilinx_dma.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c > index a34d8f0ceed8..9f416eae33d0 100644 > --- a/drivers/dma/xilinx/xilinx_dma.c > +++ b/drivers/dma/xilinx/xilinx_dma.c > @@ -1914,8 +1914,10 @@ static irqreturn_t xilinx_dma_irq_handler(int irq, void *data) > XILINX_DMA_DMASR_DLY_CNT_IRQ)) { > spin_lock(&chan->lock); > xilinx_dma_complete_descriptor(chan); > - chan->idle = true; > - chan->start_transfer(chan); > + if (list_empty(&chan->active_list)) { > + chan->idle = true; > + chan->start_transfer(chan); > + } > spin_unlock(&chan->lock); > } >
On Wed Sep 17, 2025 at 3:36 PM CEST, Suraj Gupta wrote: > Only mark the channel as idle and start new transfers when the active list > is actually empty, ensuring proper channel state management and avoiding > spurious transfer attempts. > > Signed-off-by: Suraj Gupta <suraj.gupta2@amd.com> > Fixes: c0bba3a99f07 ("dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine") Tested-by: Folker Schwesinger <dev@folker-schwesinger.de> > --- > drivers/dma/xilinx/xilinx_dma.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c > index a34d8f0ceed8..9f416eae33d0 100644 > --- a/drivers/dma/xilinx/xilinx_dma.c > +++ b/drivers/dma/xilinx/xilinx_dma.c > @@ -1914,8 +1914,10 @@ static irqreturn_t xilinx_dma_irq_handler(int irq, void *data) > XILINX_DMA_DMASR_DLY_CNT_IRQ)) { > spin_lock(&chan->lock); > xilinx_dma_complete_descriptor(chan); > - chan->idle = true; > - chan->start_transfer(chan); > + if (list_empty(&chan->active_list)) { > + chan->idle = true; > + chan->start_transfer(chan); > + } > spin_unlock(&chan->lock); > } >
© 2016 - 2025 Red Hat, Inc.