diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-04-28 21:19:51 +0200 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-04-30 07:02:15 +0200 |
commit | de135939716dcdc8a6ea62e9228feb2eec0fca11 (patch) | |
tree | af4c1aec22c4e52377ea47cdb88ba4da62d3577e /drivers/dma | |
parent | dmaengine: edma: Sanitize residue reporting (diff) | |
download | linux-de135939716dcdc8a6ea62e9228feb2eec0fca11.tar.xz linux-de135939716dcdc8a6ea62e9228feb2eec0fca11.zip |
dmaengine: edma: Check the current decriptor first in tx_status()
It's likely that the caller investigates the status of a currently
active descriptor. Make that simple check first and only rumage in the
vchan list if that fails.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Joel Fernandes <joelf@ti.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/edma.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c index 30cbbde52364..cfc267e819eb 100644 --- a/drivers/dma/edma.c +++ b/drivers/dma/edma.c @@ -852,11 +852,10 @@ static enum dma_status edma_tx_status(struct dma_chan *chan, return ret; spin_lock_irqsave(&echan->vchan.lock, flags); - vdesc = vchan_find_desc(&echan->vchan, cookie); - if (vdesc) - txstate->residue = to_edma_desc(&vdesc->tx)->residue; - else if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) + if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) txstate->residue = echan->edesc->residue; + else if ((vdesc = vchan_find_desc(&echan->vchan, cookie))) + txstate->residue = to_edma_desc(&vdesc->tx)->residue; spin_unlock_irqrestore(&echan->vchan.lock, flags); return ret; |