dmaengine: edma: Check the current decriptor first in tx_status()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 28 Apr 2014 19:19:51 +0000 (14:19 -0500)
committerVinod Koul <vinod.koul@intel.com>
Wed, 30 Apr 2014 05:02:15 +0000 (10:32 +0530)
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>
drivers/dma/edma.c

index 30cbbde523648d83ad9fdf74a609a19790d900f9..cfc267e819eb703b58300e3907fdd804c7911ba2 100644 (file)
@@ -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;