]> Git Repo - J-linux.git/blobdiff - arch/arm/mm/fault.c
Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebieder...
[J-linux.git] / arch / arm / mm / fault.c
index 49e8ec2e9e7b335f949902b08386c1104101b107..0e417233dad7209255c370d3cee65ee336ec34ab 100644 (file)
@@ -1,12 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  linux/arch/arm/mm/fault.c
  *
  *  Copyright (C) 1995  Linus Torvalds
  *  Modifications for ARM processor (c) 1995-2004 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
  */
 #include <linux/extable.h>
 #include <linux/signal.h>
@@ -56,17 +53,16 @@ static inline int notify_page_fault(struct pt_regs *regs, unsigned int fsr)
  * This is useful to dump out the page tables associated with
  * 'addr' in mm 'mm'.
  */
-void show_pte(struct mm_struct *mm, unsigned long addr)
+void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
 {
        pgd_t *pgd;
 
        if (!mm)
                mm = &init_mm;
 
-       pr_alert("pgd = %p\n", mm->pgd);
+       printk("%spgd = %p\n", lvl, mm->pgd);
        pgd = pgd_offset(mm, addr);
-       pr_alert("[%08lx] *pgd=%08llx",
-                       addr, (long long)pgd_val(*pgd));
+       printk("%s[%08lx] *pgd=%08llx", lvl, addr, (long long)pgd_val(*pgd));
 
        do {
                pud_t *pud;
@@ -121,7 +117,7 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
        pr_cont("\n");
 }
 #else                                  /* CONFIG_MMU */
-void show_pte(struct mm_struct *mm, unsigned long addr)
+void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
 { }
 #endif                                 /* CONFIG_MMU */
 
@@ -142,11 +138,12 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
         * No handler, we'll have to terminate things with extreme prejudice.
         */
        bust_spinlocks(1);
+       pr_alert("8<--- cut here ---\n");
        pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
                 (addr < PAGE_SIZE) ? "NULL pointer dereference" :
                 "paging request", addr);
 
-       show_pte(mm, addr);
+       show_pte(KERN_ALERT, mm, addr);
        die("Oops", regs, fsr);
        bust_spinlocks(0);
        do_exit(SIGKILL);
@@ -168,9 +165,10 @@ __do_user_fault(unsigned long addr, unsigned int fsr, unsigned int sig,
 #ifdef CONFIG_DEBUG_USER
        if (((user_debug & UDBG_SEGV) && (sig == SIGSEGV)) ||
            ((user_debug & UDBG_BUS)  && (sig == SIGBUS))) {
-               printk(KERN_DEBUG "%s: unhandled page fault (%d) at 0x%08lx, code 0x%03x\n",
+               pr_err("8<--- cut here ---\n");
+               pr_err("%s: unhandled page fault (%d) at 0x%08lx, code 0x%03x\n",
                       tsk->comm, sig, addr, fsr);
-               show_pte(tsk->mm, addr);
+               show_pte(KERN_ERR, tsk->mm, addr);
                show_regs(regs);
        }
 #endif
@@ -557,9 +555,10 @@ do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
        if (!inf->fn(addr, fsr & ~FSR_LNX_PF, regs))
                return;
 
+       pr_alert("8<--- cut here ---\n");
        pr_alert("Unhandled fault: %s (0x%03x) at 0x%08lx\n",
                inf->name, fsr, addr);
-       show_pte(current->mm, addr);
+       show_pte(KERN_ALERT, current->mm, addr);
 
        arm_notify_die("", regs, inf->sig, inf->code, (void __user *)addr,
                       fsr, 0);
This page took 0.0368579999999999 seconds and 4 git commands to generate.