[S390] Improve notify_page_fault implementation.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 7 Dec 2009 11:51:44 +0000 (12:51 +0100)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 7 Dec 2009 11:51:33 +0000 (12:51 +0100)
notify_page_fault does a preempt_disable/preempt_enable for each
fault generated by a kernel access to user space. If kprobes
is not active that is unnecessary since the interrupts are not
reenabled yet. To play safe repeat the kprobe_running check after
preempt_disable().

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/mm/fault.c

index 77108e3..fd72c26 100644 (file)
 extern int sysctl_userprocess_debug;
 #endif
 
-#ifdef CONFIG_KPROBES
-static inline int notify_page_fault(struct pt_regs *regs, long err)
+static inline int notify_page_fault(struct pt_regs *regs)
 {
        int ret = 0;
 
+#ifdef CONFIG_KPROBES
        /* kprobe_running() needs smp_processor_id() */
        if (!user_mode(regs)) {
                preempt_disable();
@@ -64,15 +64,9 @@ static inline int notify_page_fault(struct pt_regs *regs, long err)
                        ret = 1;
                preempt_enable();
        }
-
+#endif
        return ret;
 }
-#else
-static inline int notify_page_fault(struct pt_regs *regs, long err)
-{
-       return 0;
-}
-#endif
 
 
 /*
@@ -274,7 +268,7 @@ do_exception(struct pt_regs *regs, unsigned long error_code, int write,
        int si_code;
        int fault;
 
-       if (notify_page_fault(regs, error_code))
+       if (notify_page_fault(regs))
                return;
 
        tsk = current;