dmaengine: edma: No need save/restore interrupt flags during spin_lock in IRQ
authorJoel Fernandes <joelf@ti.com>
Thu, 17 Apr 2014 05:58:33 +0000 (00:58 -0500)
committerVinod Koul <vinod.koul@intel.com>
Wed, 23 Apr 2014 05:51:17 +0000 (11:21 +0530)
The vchan lock in edma_callback is acquired in hard interrupt context. As
interrupts are already disabled, there's no point in save/restoring interrupt
mask bit or cpsr flags.

Get rid of flags local variable and use spin_lock instead of spin_lock_irqsave.

Signed-off-by: Joel Fernandes <joelf@ti.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/edma.c

index 43f56a7d9d61b0751894158106b1a7e2e1a4f312..fa87fd52b0ad435a4c3a454c196839a8ab72ac6d 100644 (file)
@@ -682,7 +682,6 @@ static void edma_callback(unsigned ch_num, u16 ch_status, void *data)
        struct edma_chan *echan = data;
        struct device *dev = echan->vchan.chan.device->dev;
        struct edma_desc *edesc;
-       unsigned long flags;
        struct edmacc_param p;
 
        edesc = echan->edesc;
@@ -693,7 +692,7 @@ static void edma_callback(unsigned ch_num, u16 ch_status, void *data)
 
        switch (ch_status) {
        case EDMA_DMA_COMPLETE:
-               spin_lock_irqsave(&echan->vchan.lock, flags);
+               spin_lock(&echan->vchan.lock);
 
                if (edesc) {
                        if (edesc->cyclic) {
@@ -709,11 +708,11 @@ static void edma_callback(unsigned ch_num, u16 ch_status, void *data)
                        }
                }
 
-               spin_unlock_irqrestore(&echan->vchan.lock, flags);
+               spin_unlock(&echan->vchan.lock);
 
                break;
        case EDMA_DMA_CC_ERROR:
-               spin_lock_irqsave(&echan->vchan.lock, flags);
+               spin_lock(&echan->vchan.lock);
 
                edma_read_slot(EDMA_CHAN_SLOT(echan->slot[0]), &p);
 
@@ -744,7 +743,7 @@ static void edma_callback(unsigned ch_num, u16 ch_status, void *data)
                        edma_trigger_channel(echan->ch_num);
                }
 
-               spin_unlock_irqrestore(&echan->vchan.lock, flags);
+               spin_unlock(&echan->vchan.lock);
 
                break;
        default: