s390/fault: merge report_user_fault implementations
[cascardo/linux.git] / arch / s390 / mm / fault.c
index 791a414..64b3ad1 100644 (file)
@@ -183,6 +183,8 @@ static void dump_fault_info(struct pt_regs *regs)
 {
        unsigned long asce;
 
+       pr_alert("Failing address: %016lx TEID: %016lx\n",
+                regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long);
        pr_alert("Fault in ");
        switch (regs->int_parm_long & 3) {
        case 3:
@@ -218,7 +220,9 @@ static void dump_fault_info(struct pt_regs *regs)
        dump_pagetable(asce, regs->int_parm_long & __FAIL_ADDR_MASK);
 }
 
-static inline void report_user_fault(struct pt_regs *regs, long signr)
+int show_unhandled_signals = 1;
+
+void report_user_fault(struct pt_regs *regs, long signr, int is_mm_fault)
 {
        if ((task_pid_nr(current) > 1) && !show_unhandled_signals)
                return;
@@ -230,9 +234,8 @@ static inline void report_user_fault(struct pt_regs *regs, long signr)
               regs->int_code & 0xffff, regs->int_code >> 17);
        print_vma_addr(KERN_CONT "in ", regs->psw.addr);
        printk(KERN_CONT "\n");
-       printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n",
-              regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long);
-       dump_fault_info(regs);
+       if (is_mm_fault)
+               dump_fault_info(regs);
        show_regs(regs);
 }
 
@@ -244,7 +247,7 @@ static noinline void do_sigsegv(struct pt_regs *regs, int si_code)
 {
        struct siginfo si;
 
-       report_user_fault(regs, SIGSEGV);
+       report_user_fault(regs, SIGSEGV, 1);
        si.si_signo = SIGSEGV;
        si.si_code = si_code;
        si.si_addr = (void __user *)(regs->int_parm_long & __FAIL_ADDR_MASK);
@@ -272,8 +275,6 @@ static noinline void do_no_context(struct pt_regs *regs)
        else
                printk(KERN_ALERT "Unable to handle kernel paging request"
                       " in virtual user address space\n");
-       printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n",
-              regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long);
        dump_fault_info(regs);
        die(regs, "Oops");
        do_exit(SIGKILL);