]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
arm64: Make the user fault reporting more specific
authorCatalin Marinas <catalin.marinas@arm.com>
Wed, 24 Oct 2012 15:34:02 +0000 (16:34 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 5 Nov 2012 14:58:54 +0000 (14:58 +0000)
For user space faults the kernel reports "unhandled page fault" and it
gives the ESR value. With this patch the error message looked up in the
fault info array to give a better description.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/mm/fault.c

index 1909a69983caceafe6034c365920c23a81e20bcf..afadae6682ed8b867f6165b0e92860f0f0cc566d 100644 (file)
@@ -36,6 +36,8 @@
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
 
+static const char *fault_name(unsigned int esr);
+
 /*
  * Dump out the page tables associated with 'addr' in mm 'mm'.
  */
@@ -112,8 +114,9 @@ static void __do_user_fault(struct task_struct *tsk, unsigned long addr,
        struct siginfo si;
 
        if (show_unhandled_signals) {
-               pr_info("%s[%d]: unhandled page fault (%d) at 0x%08lx, code 0x%03x\n",
-                       tsk->comm, task_pid_nr(tsk), sig, addr, esr);
+               pr_info("%s[%d]: unhandled %s (%d) at 0x%08lx, esr 0x%03x\n",
+                       tsk->comm, task_pid_nr(tsk), fault_name(esr), sig,
+                       addr, esr);
                show_pte(tsk->mm, addr);
                show_regs(regs);
        }
@@ -450,6 +453,12 @@ static struct fault_info {
        { do_bad,               SIGBUS,  0,             "unknown 63"                    },
 };
 
+static const char *fault_name(unsigned int esr)
+{
+       const struct fault_info *inf = fault_info + (esr & 63);
+       return inf->name;
+}
+
 /*
  * Dispatch a data abort to the relevant handler.
  */