diff options
| author | Manfred Spraul <manfred@colorfullife.com> | 2008-08-20 09:39:59 -0400 |
|---|---|---|
| committer | Haavard Skinnemoen <haavard.skinnemoen@atmel.com> | 2008-09-19 14:08:08 -0400 |
| commit | 3d431a742728e6b619ce57a030a92d228c13d1d2 (patch) | |
| tree | 10fe28291350b2b4ce9492856ab223d58a341b6d | |
| parent | 73d4393d1df4ff3892b040396f101ede94e9e846 (diff) | |
avr32: nmi_enter() without nmi_exit()
While updating the rcu code, I noticed that do_nmi() for AVR32 is odd:
There is an nmi_enter() call without an nmi_exit().
This can't be correct, it breaks rcu (at least the preempt version) and
lockdep.
[haavard.skinnemoen@atmel.com: fixed another case that returned directly]
Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
| -rw-r--r-- | arch/avr32/kernel/traps.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index b835c4c01368..0d987373bc01 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
| @@ -116,15 +116,15 @@ asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs) | |||
| 116 | switch (ret) { | 116 | switch (ret) { |
| 117 | case NOTIFY_OK: | 117 | case NOTIFY_OK: |
| 118 | case NOTIFY_STOP: | 118 | case NOTIFY_STOP: |
| 119 | return; | 119 | break; |
| 120 | case NOTIFY_BAD: | 120 | case NOTIFY_BAD: |
| 121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); | 121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); |
| 122 | default: | 122 | default: |
| 123 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
| 124 | nmi_disable(); | ||
| 123 | break; | 125 | break; |
| 124 | } | 126 | } |
| 125 | 127 | nmi_exit(); | |
| 126 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
| 127 | nmi_disable(); | ||
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) | 130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) |
