aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2014-11-10 12:23:01 +0200
committerTomi Valkeinen <tomi.valkeinen@ti.com>2015-03-24 13:50:56 +0200
commite7e24df4715906ad25041b0a4ca613186d4cf849 (patch)
tree493a5c35ea01aa408ee6ba47b428c337c33c15dd
parentdrm/omap: fix plane's channel selection (diff)
downloadwireguard-linux-e7e24df4715906ad25041b0a4ca613186d4cf849.tar.xz
wireguard-linux-e7e24df4715906ad25041b0a4ca613186d4cf849.zip
drm/omap: tiler: fix race condition with engine->async
The tiler irq handler uses engine->async value, but the code that sets engine->async and enables the interrupt does not have a barrier. This may cause the irq handler to see the old value of engine->async, causing memory corruption. Reported-by: Harinarayan Bhatta <harinarayan@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to '')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_dmm_tiler.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
index f06243b3d3c0..a1a824db1dd6 100644
--- a/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
+++ b/drivers/gpu/drm/omapdrm/omap_dmm_tiler.c
@@ -273,6 +273,8 @@ static int dmm_txn_commit(struct dmm_txn *txn, bool wait)
/* mark whether it is async to denote list management in IRQ handler */
engine->async = wait ? false : true;
+ /* verify that the irq handler sees the 'async' value */
+ smp_mb();
/* kick reload */
writel(engine->refill_pa,