From: James S. <jsi...@us...> - 2001-12-26 17:28:14
|
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 */ |