Update of /cvsroot/linuxconsole/ruby/linux/arch/s390x/mm
In directory usw-pr-cvs1:/tmp/cvs-serv5113/arch/s390x/mm
Modified Files:
fault.c
Log Message:
Synced to 2.5.0. Don't use. The default 2.5.0 has a nasty bug in it.
Index: fault.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/arch/s390x/mm/fault.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- fault.c 2001/10/29 00:10:58 1.2
+++ fault.c 2001/12/26 17:28:11 1.3
@@ -131,14 +131,17 @@
/*
* Check whether we have a user MM in the first place.
*/
- if (in_interrupt() || !mm)
+ if (in_interrupt() || !mm || !(regs->psw.mask & _PSW_IO_MASK_BIT))
goto no_context;
/*
* When we get here, the fault happened in the current
- * task's user address space, so we search the VMAs
+ * task's user address space, so we can switch on the
+ * interrupts again and then search the VMAs
*/
+ __sti();
+
down_read(&mm->mmap_sem);
vma = find_vma(mm, address);
@@ -391,6 +394,13 @@
*/
tsk = (struct task_struct *)
(*((unsigned long *) __LC_PFAULT_INTPARM) - THREAD_SIZE);
+
+ /*
+ * We got all needed information from the lowcore and can
+ * now safely switch on interrupts.
+ */
+ if (regs->psw.mask & PSW_PROBLEM_STATE)
+ __sti();
if (subcode & 0x0080) {
/* signal bit is set -> a page has been swapped in by VM */
|