diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-04-28 14:19:51 -0500 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-04-30 10:32:15 +0530 |
commit | de135939716dcdc8a6ea62e9228feb2eec0fca11 (patch) | |
tree | af4c1aec22c4e52377ea47cdb88ba4da62d3577e /drivers/dma/edma.c | |
parent | b6205c39011e52e2f7983c3dba01ee51524ae29c (diff) | |
download | lwn-de135939716dcdc8a6ea62e9228feb2eec0fca11.tar.gz lwn-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/edma.c')
-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; |