aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel/traps.c
diff options
context:
space:
mode:
authorRobin Getz <robin.getz@analog.com>2009-06-22 16:23:48 -0400
committerMike Frysinger <vapier@gentoo.org>2009-07-16 01:52:19 -0400
commit0e4edcf0b0f7d96c4be7788b13bee82e4d3ba0ce (patch)
tree908445f9ce4ee04e287b9311ff992686478eb278 /arch/blackfin/kernel/traps.c
parent976119bc5d2253bb47f3255ee178ce1ee605fd3c (diff)
Blackfin: work around anomaly 05000281
Add missing anomaly workaround for anomaly 05000281 - we can't return to instructions which cause hardware errors otherwise we trigger the error again which means we go into an infinite loop of handling, returning, and retriggering. This work around confuses gdb when the error occurs as the PC will seemed to have moved, so a better long term fix will need to be figured out, but for now this is better than an infinite crash loop. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/kernel/traps.c')
-rw-r--r--arch/blackfin/kernel/traps.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index 8a1caf2bb5b9..664de56296cb 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -619,7 +619,8 @@ asmlinkage void trap_c(struct pt_regs *fp)
619 force_sig_info(sig, &info, current); 619 force_sig_info(sig, &info, current);
620 } 620 }
621 621
622 if (ANOMALY_05000461 && trapnr == VEC_HWERR && !access_ok(VERIFY_READ, fp->pc, 8)) 622 if ((ANOMALY_05000461 && trapnr == VEC_HWERR && !access_ok(VERIFY_READ, fp->pc, 8)) ||
623 (ANOMALY_05000281 && trapnr == VEC_HWERR))
623 fp->pc = SAFE_USER_INSTRUCTION; 624 fp->pc = SAFE_USER_INSTRUCTION;
624 625
625 traps_done: 626 traps_done: