diff options
author | Scott Wood <scottwood@freescale.com> | 2011-06-16 14:09:17 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2011-06-22 06:15:16 -0500 |
commit | 82a9a4809f4cb4ce3f17da99a8150df8455fa096 (patch) | |
tree | 06659597671abf80360dd5c89df8aaba26e6962a /arch/powerpc/kernel/traps.c | |
parent | f3fed682f78dfab384d3dc3f9ca7a7338a93c142 (diff) | |
download | lwn-82a9a4809f4cb4ce3f17da99a8150df8455fa096.tar.gz lwn-82a9a4809f4cb4ce3f17da99a8150df8455fa096.zip |
powerpc/e500: fix breakage with fsl_rio_mcheck_exception
The wrong MCSR bit was being used on e500mc. MCSR_BUS_RBERR only exists
on e500v1/v2. Use MCSR_LD on e500mc, and remove all MCSR checking
in fsl_rio_mcheck_exception as we now no longer call that function
if the appropriate bit in MCSR is not set.
If RIO support was enabled at compile-time, but was never probed, just
return from fsl_rio_mcheck_exception rather than dereference a NULL
pointer.
TODO: There is still a remaining, though comparitively minor, issue in
that this recovery mechanism will falsely engage if there's an unrelated
MCSR_LD event at the same time as a RIO error.
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 0ff4ab98d50c..6414a0d5ba65 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -425,7 +425,7 @@ int machine_check_e500mc(struct pt_regs *regs) unsigned long reason = mcsr; int recoverable = 1; - if (reason & MCSR_BUS_RBERR) { + if (reason & MCSR_LD) { recoverable = fsl_rio_mcheck_exception(regs); if (recoverable == 1) goto silent_out; |