diff options
author | Robin Getz <robin.getz@analog.com> | 2009-06-21 22:02:16 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-09-16 21:28:28 -0400 |
commit | ae4f073c40bf677b03826262e6022b4a251fe437 (patch) | |
tree | 452c91be30a3970efbea5780d368945e7f63712c /arch/blackfin/include/asm | |
parent | d4b834c13940b5433d16ae3605794b3d74804348 (diff) |
Blackfin: make EVT3->EVT5 lowering more robust wrt IPEND[4]
We handle many exceptions at EVT5 (hardware error level) so that we can
catch exceptions in our exception handling code. Today - if the global
interrupt enable bit (IPEND[4]) is set (interrupts disabled) our trap
handling code goes into a infinite loop, since we need interrupts to be
on to defer things to EVT5.
Normal kernel code should not trigger this for any reason as IPEND[4] gets
cleared early (when doing an interrupt context save) and the kernel stack
there should be sane (or something much worse is happening in the system).
But there have been a few times where this has happened, so this change
makes sure we dump a proper crash message even when things have gone south.
Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/include/asm')
-rw-r--r-- | arch/blackfin/include/asm/pda.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/blackfin/include/asm/pda.h b/arch/blackfin/include/asm/pda.h index b42555c1431c..69b96b40c188 100644 --- a/arch/blackfin/include/asm/pda.h +++ b/arch/blackfin/include/asm/pda.h | |||
@@ -50,6 +50,7 @@ struct blackfin_pda { /* Per-processor Data Area */ | |||
50 | unsigned long ex_optr; | 50 | unsigned long ex_optr; |
51 | unsigned long ex_buf[4]; | 51 | unsigned long ex_buf[4]; |
52 | unsigned long ex_imask; /* Saved imask from exception */ | 52 | unsigned long ex_imask; /* Saved imask from exception */ |
53 | unsigned long ex_ipend; /* Saved IPEND from exception */ | ||
53 | unsigned long *ex_stack; /* Exception stack space */ | 54 | unsigned long *ex_stack; /* Exception stack space */ |
54 | 55 | ||
55 | #ifdef ANOMALY_05000261 | 56 | #ifdef ANOMALY_05000261 |