[S390] fix io_return critical section cleanup
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 9 Apr 2010 11:43:00 +0000 (13:43 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Fri, 9 Apr 2010 11:43:02 +0000 (13:43 +0200)
commit176b1803ce4690d0dd94e16f118dbd14af045034
tree92601341680bf89e42ed0073bd5086d16405356c
parent35ac734f72d846f250c0344913a91f954ea764c3
[S390] fix io_return critical section cleanup

If a machine check interrupts the io interrupt handler on one of the
instructions between io_return and io_leave the critical section
cleanup code will move the return psw to io_work_loop. By doing that
the switch from the asynchronous interrupt stack to the process stack
is skipped. If e.g. TIF_NEED_RESCHED is set things break because
the scheduler is called with the asynchronous interrupts stack.
Moving the psw back to io_return instead fixes the problem.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S