ARM: 9130/1: mm: Provide die_kernel_fault() helper
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>
This commit is contained in:
parent
93d2043844
commit
2e707106fa
|
@ -99,6 +99,21 @@ void show_pte(const char *lvl, struct mm_struct *mm, unsigned long addr)
|
||||||
{ }
|
{ }
|
||||||
#endif /* CONFIG_MMU */
|
#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.
|
* 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,
|
__do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
const char *msg;
|
||||||
/*
|
/*
|
||||||
* Are we prepared to handle this kernel fault?
|
* 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.
|
* No handler, we'll have to terminate things with extreme prejudice.
|
||||||
*/
|
*/
|
||||||
bust_spinlocks(1);
|
if (addr < PAGE_SIZE)
|
||||||
pr_alert("8<--- cut here ---\n");
|
msg = "NULL pointer dereference";
|
||||||
pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
|
else
|
||||||
(addr < PAGE_SIZE) ? "NULL pointer dereference" :
|
msg = "paging request";
|
||||||
"paging request", addr);
|
|
||||||
|
|
||||||
show_pte(KERN_ALERT, mm, addr);
|
die_kernel_fault(msg, mm, addr, fsr, regs);
|
||||||
die("Oops", regs, fsr);
|
|
||||||
bust_spinlocks(0);
|
|
||||||
do_exit(SIGKILL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue