dmaengine: add cpu_relax() to busy-loop in dma_sync_wait()
authorBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Thu, 8 Nov 2012 10:02:07 +0000 (10:02 +0000)
committerVinod Koul <vinod.koul@intel.com>
Tue, 8 Jan 2013 06:05:11 +0000 (22:05 -0800)
Removal of the busy-loop from dma_sync_wait() is not a trivial
task so just add cpu_relax() to the loop for now.

Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Dan Williams <djbw@fb.com>
drivers/dma/dmaengine.c

index d37cf95987b64f22bf0705631886d0810bfa026c..242b8c0a3de8bfb3eea401f13067f3e05143397f 100644 (file)
@@ -267,7 +267,10 @@ enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie)
                        pr_err("%s: timeout!\n", __func__);
                        return DMA_ERROR;
                }
-       } while (status == DMA_IN_PROGRESS);
+               if (status != DMA_IN_PROGRESS)
+                       break;
+               cpu_relax();
+       } while (1);
 
        return status;
 }