mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-03 06:16:43 +07:00
dmaengine: PL08x: start next descriptor from irq context
Rather than waiting for the tasklet to run, we can start the next descriptor from interrupt context, as soon as we know that the previous descriptor has completed. Acked-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
ea1605612c
commit
c33b644cb3
@ -1671,10 +1671,7 @@ static void pl08x_tasklet(unsigned long data)
|
||||
spin_lock_irqsave(&plchan->lock, flags);
|
||||
list_splice_tail_init(&plchan->done_list, &head);
|
||||
|
||||
/* If a new descriptor is queued, set it up plchan->at is NULL here */
|
||||
if (!list_empty(&plchan->issued_list)) {
|
||||
pl08x_start_next_txd(plchan);
|
||||
} else if (!list_empty(&plchan->pend_list) || plchan->phychan_hold) {
|
||||
if (plchan->at || !list_empty(&plchan->pend_list) || plchan->phychan_hold) {
|
||||
/*
|
||||
* This channel is still in use - we have a new txd being
|
||||
* prepared and will soon be queued. Don't give up the
|
||||
@ -1786,6 +1783,10 @@ static irqreturn_t pl08x_irq(int irq, void *dev)
|
||||
pl08x_release_mux(plchan);
|
||||
dma_cookie_complete(&tx->tx);
|
||||
list_add_tail(&tx->node, &plchan->done_list);
|
||||
|
||||
/* And start the next descriptor */
|
||||
if (!list_empty(&plchan->issued_list))
|
||||
pl08x_start_next_txd(plchan);
|
||||
}
|
||||
spin_unlock(&plchan->lock);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user