]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] s390: pfault interrupt race
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Sat, 3 Sep 2005 22:58:02 +0000 (15:58 -0700)
committerLinus Torvalds <torvalds@evo.osdl.org>
Mon, 5 Sep 2005 07:06:28 +0000 (00:06 -0700)
commit2406d5e2b2f83ffdc05c215f774f248608ca67b9
tree37386fada73b07e6028b76ed58a9f59215f8de43
parent1555d08d75ac5f6673c28438385cff8068ad67ab
[PATCH] s390: pfault interrupt race

There is a race in pfault_interrupt.  That function gets called two times for
each pfault notification.  Once with a subcode of 0 to indicate that a real
page is not available and once with a subcode of 0x80 to indicate that the
page is present again.

Since the two external interrupts can be delivered on two different cpus the
order in which the two calls are made is unpredictable.  It is possible that
the subcode 0x80 interrupt is completed before the subcode 0x00 interrupt has
done the wake_up() call.

To avoid calling wake_up() on an already removed task structure proper task
structure reference counting is needed.  Increase the reference counter in the
subcode 0x00 interrupt before setting pfault_wait to zero and return the
reference after the wake_up call.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/s390/mm/fault.c