mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 05:24:39 +01:00
dmaengine: altera-msgdma: cleanup after completing all descriptors
msgdma_chan_desc_cleanup iterates the done list for each completed
descriptor while we need to do it once after all descriptors are
completed.
This fixes a Sparse warning because we first take the lock in
msgdma_tasklet.
- Move locking to msgdma_chan_desc_cleanup.
- Move call to msgdma_chan_desc_cleanup outside of the critical section of
msgdma_tasklet.
Inspired by: commit 16ed0ef3e9 ("dmaengine: zynqmp_dma: cleanup after
completing all descriptors")
Signed-off-by: Olivier Dautricourt <olivierdautricourt@gmail.com>
Tested-by: Olivier Dautricourt <olivierdautricourt@gmail.com>
Suggested-by: Eric Schwarz <eas@sw-optimization.com>
Link: https://lore.kernel.org/r/20240608213216.25087-2-olivierdautricourt@gmail.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
261d3a85d9
commit
d3ddfab096
1 changed files with 6 additions and 1 deletions
|
|
@ -585,6 +585,8 @@ static void msgdma_chan_desc_cleanup(struct msgdma_device *mdev)
|
|||
struct msgdma_sw_desc *desc, *next;
|
||||
unsigned long irqflags;
|
||||
|
||||
spin_lock_irqsave(&mdev->lock, irqflags);
|
||||
|
||||
list_for_each_entry_safe(desc, next, &mdev->done_list, node) {
|
||||
struct dmaengine_desc_callback cb;
|
||||
|
||||
|
|
@ -600,6 +602,8 @@ static void msgdma_chan_desc_cleanup(struct msgdma_device *mdev)
|
|||
/* Run any dependencies, then free the descriptor */
|
||||
msgdma_free_descriptor(mdev, desc);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&mdev->lock, irqflags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -714,10 +718,11 @@ static void msgdma_tasklet(struct tasklet_struct *t)
|
|||
}
|
||||
|
||||
msgdma_complete_descriptor(mdev);
|
||||
msgdma_chan_desc_cleanup(mdev);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&mdev->lock, flags);
|
||||
|
||||
msgdma_chan_desc_cleanup(mdev);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue