powerpc/mm: Show if a bad page fault on data is read or write.
authorChristophe Leroy <christophe.leroy@c-s.fr>
Wed, 21 Aug 2019 15:21:55 +0000 (15:21 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 18 Nov 2019 11:27:51 +0000 (22:27 +1100)
DSISR (or ESR on some CPUs) has a bit to tell if the fault is due to a
read or a write.

Display it.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Santosh Sivaraj <santosh@fossix.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/4f88d7e6fda53b5f80a71040ab400242f6c8cb93.1566400889.git.christophe.leroy@c-s.fr
arch/powerpc/mm/fault.c

index 8432c281de921440cc0cffe9d14d8879f565a0e9..b5047f9b5dec4d97c03e84ebccf5c32a9bfac515 100644 (file)
@@ -645,6 +645,7 @@ NOKPROBE_SYMBOL(do_page_fault);
 void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
 {
        const struct exception_table_entry *entry;
+       int is_write = page_fault_is_write(regs->dsisr);
 
        /* Are we prepared to handle this fault?  */
        if ((entry = search_exception_tables(regs->nip)) != NULL) {
@@ -658,9 +659,10 @@ void bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
        case 0x300:
        case 0x380:
        case 0xe00:
-               pr_alert("BUG: %s at 0x%08lx\n",
+               pr_alert("BUG: %s on %s at 0x%08lx\n",
                         regs->dar < PAGE_SIZE ? "Kernel NULL pointer dereference" :
-                        "Unable to handle kernel data access", regs->dar);
+                        "Unable to handle kernel data access",
+                        is_write ? "write" : "read", regs->dar);
                break;
        case 0x400:
        case 0x480: