aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2009-03-26 15:24:10 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-03-26 15:24:14 +0100
commit87fa5af80cdd5053b27a546725948c2b74ec82b2 (patch)
tree1546f9e8ef711d5559638e7f9c570e2be242bb14 /drivers
parent[S390] cio/crw: add/fix locking (diff)
downloadlinux-dev-87fa5af80cdd5053b27a546725948c2b74ec82b2.tar.xz
linux-dev-87fa5af80cdd5053b27a546725948c2b74ec82b2.zip
[S390] cio: ensure single load of irq handler pointer
Add barrier to prevent compiler from reloading pointer to irq handler. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/cio/airq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/s390/cio/airq.c b/drivers/s390/cio/airq.c
index fe6cea15bbaf..d3850dc30e42 100644
--- a/drivers/s390/cio/airq.c
+++ b/drivers/s390/cio/airq.c
@@ -133,6 +133,8 @@ void do_adapter_IO(u8 isc)
while (word) {
if (word & INDICATOR_MASK) {
airq = airqs[isc][i];
+ /* Make sure gcc reads from airqs only once. */
+ barrier();
if (likely(airq))
airq->handler(&indicators[isc].byte[i],
airq->drv_data);