summaryrefslogtreecommitdiff
path: root/arch/blackfin/kernel/traps.c
diff options
context:
space:
mode:
authorRobin Getz <robin.getz@analog.com>2009-05-11 22:55:16 +0400
committerMike Frysinger <vapier@gentoo.org>2009-06-12 14:11:46 +0400
commit0acad8dfee6bde7e246a95a52f864a8eee777ed8 (patch)
treeb50fff31b98b11353f58bdae9367fe6a276eecab /arch/blackfin/kernel/traps.c
parenta0cab65642813b7990e1b4b2ab6ad92e171571f4 (diff)
downloadlinux-0acad8dfee6bde7e246a95a52f864a8eee777ed8.tar.xz
Blackfin: add workaround for anomaly 05000461
Returning too fast with a bad RETI can trigger false errors. 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, 3 insertions, 0 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index 0d04a4732b1f..778a75655a0c 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -594,6 +594,9 @@ asmlinkage void trap_c(struct pt_regs *fp)
force_sig_info(sig, &info, current);
}
+ if (ANOMALY_05000461 && trapnr == VEC_HWERR && !access_ok(VERIFY_READ, fp->pc, 8))
+ fp->pc = SAFE_USER_INSTRUCTION;
+
trace_buffer_restore(j);
return;
}