diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2005-07-16 11:43:33 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-07-16 11:43:33 -0400 |
commit | 109d89ca0ee76138e04b41726b7f719c7df65e88 (patch) | |
tree | 3653f48740d7812e21e15d09648e58edbc0416b9 /arch/arm/kernel/traps.c | |
parent | 54ea06f6afe85aaf419e51343d4e4b5599197113 (diff) |
[PATCH] ARM: Allow register_undef_hook to be called with IRQs off
Preserve the interrupt status across a call to register_undef_hook.
This allows it to be called while interrupts are disabled.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/traps.c')
-rw-r--r-- | arch/arm/kernel/traps.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index df2cb06ce424..d571c37ac30c 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -248,16 +248,20 @@ static DEFINE_SPINLOCK(undef_lock); | |||
248 | 248 | ||
249 | void register_undef_hook(struct undef_hook *hook) | 249 | void register_undef_hook(struct undef_hook *hook) |
250 | { | 250 | { |
251 | spin_lock_irq(&undef_lock); | 251 | unsigned long flags; |
252 | |||
253 | spin_lock_irqsave(&undef_lock, flags); | ||
252 | list_add(&hook->node, &undef_hook); | 254 | list_add(&hook->node, &undef_hook); |
253 | spin_unlock_irq(&undef_lock); | 255 | spin_unlock_irqrestore(&undef_lock, flags); |
254 | } | 256 | } |
255 | 257 | ||
256 | void unregister_undef_hook(struct undef_hook *hook) | 258 | void unregister_undef_hook(struct undef_hook *hook) |
257 | { | 259 | { |
258 | spin_lock_irq(&undef_lock); | 260 | unsigned long flags; |
261 | |||
262 | spin_lock_irqsave(&undef_lock, flags); | ||
259 | list_del(&hook->node); | 263 | list_del(&hook->node); |
260 | spin_unlock_irq(&undef_lock); | 264 | spin_unlock_irqrestore(&undef_lock, flags); |
261 | } | 265 | } |
262 | 266 | ||
263 | asmlinkage void do_undefinstr(struct pt_regs *regs) | 267 | asmlinkage void do_undefinstr(struct pt_regs *regs) |