|
@@ -2104,6 +2104,11 @@ void sun4v_nonresum_overflow(struct pt_regs *regs)
|
|
|
atomic_inc(&sun4v_nonresum_oflow_cnt);
|
|
|
}
|
|
|
|
|
|
+static void sun4v_tlb_error(struct pt_regs *regs)
|
|
|
+{
|
|
|
+ die_if_kernel("TLB/TSB error", regs);
|
|
|
+}
|
|
|
+
|
|
|
unsigned long sun4v_err_itlb_vaddr;
|
|
|
unsigned long sun4v_err_itlb_ctx;
|
|
|
unsigned long sun4v_err_itlb_pte;
|
|
@@ -2111,8 +2116,7 @@ unsigned long sun4v_err_itlb_error;
|
|
|
|
|
|
void sun4v_itlb_error_report(struct pt_regs *regs, int tl)
|
|
|
{
|
|
|
- if (tl > 1)
|
|
|
- dump_tl1_traplog((struct tl1_traplog *)(regs + 1));
|
|
|
+ dump_tl1_traplog((struct tl1_traplog *)(regs + 1));
|
|
|
|
|
|
printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n",
|
|
|
regs->tpc, tl);
|
|
@@ -2125,7 +2129,7 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl)
|
|
|
sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx,
|
|
|
sun4v_err_itlb_pte, sun4v_err_itlb_error);
|
|
|
|
|
|
- prom_halt();
|
|
|
+ sun4v_tlb_error(regs);
|
|
|
}
|
|
|
|
|
|
unsigned long sun4v_err_dtlb_vaddr;
|
|
@@ -2135,8 +2139,7 @@ unsigned long sun4v_err_dtlb_error;
|
|
|
|
|
|
void sun4v_dtlb_error_report(struct pt_regs *regs, int tl)
|
|
|
{
|
|
|
- if (tl > 1)
|
|
|
- dump_tl1_traplog((struct tl1_traplog *)(regs + 1));
|
|
|
+ dump_tl1_traplog((struct tl1_traplog *)(regs + 1));
|
|
|
|
|
|
printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n",
|
|
|
regs->tpc, tl);
|
|
@@ -2149,7 +2152,7 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl)
|
|
|
sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx,
|
|
|
sun4v_err_dtlb_pte, sun4v_err_dtlb_error);
|
|
|
|
|
|
- prom_halt();
|
|
|
+ sun4v_tlb_error(regs);
|
|
|
}
|
|
|
|
|
|
void hypervisor_tlbop_error(unsigned long err, unsigned long op)
|