Browse Source

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>
Tomi Valkeinen 11 years ago
parent
commit
e7e24df471
1 changed files with 2 additions and 0 deletions
  1. 2 0
      drivers/gpu/drm/omapdrm/omap_dmm_tiler.c

+ 2 - 0
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,