Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (92 commits) powerpc: Remove unused 'protect4gb' boot parameter powerpc: Build-in e1000e for pseries & ppc64_defconfig powerpc/pseries: Make request_ras_irqs() available to other pseries code powerpc/numa: Use ibm,architecture-vec-5 to detect form 1 affinity powerpc/numa: Set a smaller value for RECLAIM_DISTANCE to enable zone reclaim powerpc: Use smt_snooze_delay=-1 to always busy loop powerpc: Remove check of ibm,smt-snooze-delay OF property powerpc/kdump: Fix race in kdump shutdown powerpc/kexec: Fix race in kexec shutdown powerpc/kexec: Speedup kexec hash PTE tear down powerpc/pseries: Add hcall to read 4 ptes at a time in real mode powerpc: Use more accurate limit for first segment memory allocations powerpc/kdump: Use chip->shutdown to disable IRQs powerpc/kdump: CPUs assume the context of the oopsing CPU powerpc/crashdump: Do not fail on NULL pointer dereferencing powerpc/eeh: Fix oops when probing in early boot powerpc/pci: Check devices status property when scanning OF tree powerpc/vio: Switch VIO Bus PM to use generic helpers powerpc: Avoid bad relocations in iSeries code powerpc: Use common cpu_die (fixes SMP+SUSPEND build) ...
This commit is contained in:
@ -380,6 +380,46 @@ int machine_check_440A(struct pt_regs *regs)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int machine_check_47x(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long reason = get_mc_reason(regs);
|
||||
u32 mcsr;
|
||||
|
||||
printk(KERN_ERR "Machine check in kernel mode.\n");
|
||||
if (reason & ESR_IMCP) {
|
||||
printk(KERN_ERR
|
||||
"Instruction Synchronous Machine Check exception\n");
|
||||
mtspr(SPRN_ESR, reason & ~ESR_IMCP);
|
||||
return 0;
|
||||
}
|
||||
mcsr = mfspr(SPRN_MCSR);
|
||||
if (mcsr & MCSR_IB)
|
||||
printk(KERN_ERR "Instruction Read PLB Error\n");
|
||||
if (mcsr & MCSR_DRB)
|
||||
printk(KERN_ERR "Data Read PLB Error\n");
|
||||
if (mcsr & MCSR_DWB)
|
||||
printk(KERN_ERR "Data Write PLB Error\n");
|
||||
if (mcsr & MCSR_TLBP)
|
||||
printk(KERN_ERR "TLB Parity Error\n");
|
||||
if (mcsr & MCSR_ICP) {
|
||||
flush_instruction_cache();
|
||||
printk(KERN_ERR "I-Cache Parity Error\n");
|
||||
}
|
||||
if (mcsr & MCSR_DCSP)
|
||||
printk(KERN_ERR "D-Cache Search Parity Error\n");
|
||||
if (mcsr & PPC47x_MCSR_GPR)
|
||||
printk(KERN_ERR "GPR Parity Error\n");
|
||||
if (mcsr & PPC47x_MCSR_FPR)
|
||||
printk(KERN_ERR "FPR Parity Error\n");
|
||||
if (mcsr & PPC47x_MCSR_IPR)
|
||||
printk(KERN_ERR "Machine Check exception is imprecise\n");
|
||||
|
||||
/* Clear MCSR */
|
||||
mtspr(SPRN_MCSR, mcsr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#elif defined(CONFIG_E500)
|
||||
int machine_check_e500(struct pt_regs *regs)
|
||||
{
|
||||
|
Reference in New Issue
Block a user