On Mon, Mar 01, 2010 at 05:13:23AM -0700, Dave Kleikamp wrote:
> powerpc/476: add machine check handler for 47x core
> 
> From: Dave Kleikamp <sha...@linux.vnet.ibm.com>
> 
> The 47x core's MCSR varies from 44x, so it needs it's own machine check
> handler.


> --- a/arch/powerpc/kernel/traps.c
> +++ b/arch/powerpc/kernel/traps.c
> @@ -376,6 +376,44 @@ 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);
> +
> +     printk("Machine check in kernel mode.\n");

It's quite possible that the other machine check handlers don't have
printk KERN_-levels on them but it would be a good idea to use them here.

> +     if (reason & ESR_IMCP){
> +             printk("Instruction Synchronous Machine Check exception\n");
> +             mtspr(SPRN_ESR, reason & ~ESR_IMCP);
> +     }
> +     else {

} else {

Or, rather, add an early return above and you can just remove one level of 
indentation below.


> +             u32 mcsr = mfspr(SPRN_MCSR);
> +             if (mcsr & MCSR_IB)
> +                     printk("Instruction Read PLB Error\n");
> +             if (mcsr & MCSR_DRB)
> +                     printk("Data Read PLB Error\n");
> +             if (mcsr & MCSR_DWB)
> +                     printk("Data Write PLB Error\n");
> +             if (mcsr & MCSR_TLBP)
> +                     printk("TLB Parity Error\n");
> +             if (mcsr & MCSR_ICP){
> +                     flush_instruction_cache();
> +                     printk("I-Cache Parity Error\n");
> +             }
> +             if (mcsr & MCSR_DCSP)
> +                     printk("D-Cache Search Parity Error\n");
> +             if (mcsr & PPC47x_MCSR_GPR)
> +                     printk("GPR Parity Error\n");
> +             if (mcsr & PPC47x_MCSR_FPR)
> +                     printk("FPR Parity Error\n");
> +             if (mcsr & PPC47x_MCSR_IMP)
> +                     printk("Machine Check exception is imprecise\n");
> +
> +             /* Clear MCSR */
> +             mtspr(SPRN_MCSR, mcsr);
> +     }
> +     return 0;
> +}
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to