linux/arch
Robin Getz b9a3899d59 Blackfin: make deferred hardware errors more exact
Hardware errors on the Blackfin architecture are queued by nature of the
hardware design.  Things that could generate a hardware level queue up at
the system interface and might not process until much later, at which
point the system would send a notification back to the core.

As such, it is possible for user space code to do something that would
trigger a hardware error, but have it delay long enough for the process
context to switch.  So when the hardware error does signal, we mistakenly
evaluate it as a different process or as kernel context and panic (erp!).
This makes it pretty difficult to find the offending context.  But wait,
there is good news somewhere.

By forcing a SSYNC in the interrupt entry, we force all pending queues at
the system level to be processed and all hardware errors to be signaled.
Then we check the current interrupt state to see if the hardware error is
now signaled.  If so, we re-queue the current interrupt and return thus
allowing the higher priority hardware error interrupt to process properly.
Since we haven't done any other context processing yet, the right context
will be selected and killed.  There is still the possibility that the
exact offending instruction will be unknown, but at least we'll have a
much better idea of where to look.

The downside of course is that this causes system-wide syncs at every
interrupt point which results in significant performance degradation.
Since this situation should not occur in any properly configured system
(as hardware errors are triggered by things like bad pointers), make it a
debug configuration option and disable it by default.

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2009-06-12 06:11:44 -04:00
..
alpha Push BKL into do_mount() 2009-06-11 21:36:08 -04:00
arm Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block 2009-06-11 11:10:35 -07:00
avr32 avr32: drop unused CLEAN_FILES 2009-05-01 10:54:00 +02:00
blackfin Blackfin: make deferred hardware errors more exact 2009-06-12 06:11:44 -04:00
cris Merge branch 'linus' into irq/numa 2009-06-01 21:06:21 +02:00
frv FRV: Implement new-style ptrace 2009-06-11 09:01:26 -07:00
h8300 flat: fix data sections alignment 2009-05-29 08:40:02 -07:00
ia64 Merge branch 'kvm-updates/2.6.31' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2009-06-11 10:03:30 -07:00
m32r flat: fix data sections alignment 2009-05-29 08:40:02 -07:00
m68k m68knommu: enumerate INIT_THREAD fields properly 2009-06-11 13:09:11 +10:00
m68knommu m68knommu: remove unecessary include of thread_info.h in entry.S 2009-06-11 14:33:16 +10:00
microblaze microblaze: Fix kind-of-intr checking against number of interrupts 2009-05-18 14:47:42 +02:00
mips Merge branch 'irq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-06-10 15:25:41 -07:00
mn10300 MN10300: Add utrace/tracehooks support 2009-06-11 09:02:20 -07:00
parisc irq: change ->set_affinity() to return status 2009-04-28 12:21:16 +02:00
powerpc perfcounters: remove powerpc definitions of perf_counter_do_pending 2009-06-11 20:03:13 -07:00
s390 KVM: s390: Verify memory in kvm run 2009-06-10 11:48:57 +03:00
sh sh: Tie sparseirq in to Kconfig. 2009-06-11 10:33:09 +03:00
sparc Merge branch 'futexes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-06-10 16:16:48 -07:00
um block: implement and enforce request peek/start/fetch 2009-05-11 09:52:18 +02:00
x86 x86: use zalloc_cpumask_var in arch_early_irq_init 2009-06-11 20:04:36 -07:00
xtensa xtensa: Fix linker script to include .literal sections 2009-05-11 23:40:33 -07:00
.gitignore
Kconfig