ARM: 9130/1: mm: Provide die_kernel_fault() helper
authorWang Kefeng <wangkefeng.wang@huawei.com>
Wed, 22 Sep 2021 13:56:31 +0000 (14:56 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tue, 19 Oct 2021 09:35:30 +0000 (10:35 +0100)
Provide die_kernel_fault() helper to do the kernel fault reporting,
which with msg argument, it could report different message in different
scenes, and the later patch "ARM: mm: Fix PXN process with LPAE feature"
will use it.

Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/mm/fault.c

index 76aced0..82bcfe5 100644 (file)
@@ -99,6 +99,21 @@ void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
 { }
 #endif                                 /* CONFIG_MMU */
 
+static void die_kernel_fault(const char *msg, struct mm_struct *mm,
+                            unsigned long addr, unsigned int fsr,
+                            struct pt_regs *regs)
+{
+       bust_spinlocks(1);
+       pr_alert("8<--- cut here ---\n");
+       pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
+                msg, addr);
+
+       show_pte(KERN_ALERT, mm, addr);
+       die("Oops", regs, fsr);
+       bust_spinlocks(0);
+       do_exit(SIGKILL);
+}
+
 /*
  * Oops.  The kernel tried to access some page that wasn't present.
  */
@@ -106,6 +121,7 @@ static void
 __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
                  struct pt_regs *regs)
 {
+       const char *msg;
        /*
         * Are we prepared to handle this kernel fault?
         */
@@ -115,16 +131,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);
+       if (addr < PAGE_SIZE)
+               msg = "NULL pointer dereference";
+       else
+               msg = "paging request";
 
-       show_pte(KERN_ALERT, mm, addr);
-       die("Oops", regs, fsr);
-       bust_spinlocks(0);
-       do_exit(SIGKILL);
+       die_kernel_fault(msg, mm, addr, fsr, regs);
 }
 
 /*