dw_dmac: Calling dwc_scan_descriptors from dwc_tx_status() after taking lock
authorViresh Kumar <viresh.kumar@st.com>
Thu, 3 Mar 2011 10:17:17 +0000 (15:47 +0530)
committerVinod Koul <vinod.koul@intel.com>
Sun, 6 Mar 2011 19:42:27 +0000 (01:12 +0530)
Lock must be taken before calling dwc_scan_descriptors, as this may
access/modify shared data and queues. dwc_tx_status wasn't taking lock before
calling this routine. This patch add code that takes lock before calling
dwc_scan_descriptors.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/dw_dmac.c

index 942b50f57f21ea8407f20f52440a1d3ee3add15f..2b0d5e99ae7148d56335ad7fda9db186202ac3cc 100644 (file)
@@ -836,7 +836,9 @@ dwc_tx_status(struct dma_chan *chan,
 
        ret = dma_async_is_complete(cookie, last_complete, last_used);
        if (ret != DMA_SUCCESS) {
+               spin_lock_bh(&dwc->lock);
                dwc_scan_descriptors(to_dw_dma(chan->device), dwc);
+               spin_unlock_bh(&dwc->lock);
 
                last_complete = dwc->completed;
                last_used = chan->cookie;