git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vserver 1.9.5.x5
[linux-2.6.git]
/
arch
/
arm26
/
kernel
/
irq.c
diff --git
a/arch/arm26/kernel/irq.c
b/arch/arm26/kernel/irq.c
index
d627ced
..
f3cc103
100644
(file)
--- a/
arch/arm26/kernel/irq.c
+++ b/
arch/arm26/kernel/irq.c
@@
-50,7
+50,7
@@
void __init arc_init_irq(void);
#define MAX_IRQ_CNT 100000
static volatile unsigned long irq_err_count;
#define MAX_IRQ_CNT 100000
static volatile unsigned long irq_err_count;
-static
spinlock_t irq_controller_lock = SPIN_LOCK_UNLOCKED
;
+static
DEFINE_SPINLOCK(irq_controller_lock)
;
struct irqdesc irq_desc[NR_IRQS];
struct irqdesc irq_desc[NR_IRQS];
@@
-187,6
+187,7
@@
static void
__do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
{
unsigned int status;
__do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
{
unsigned int status;
+ int ret;
spin_unlock(&irq_controller_lock);
if (!(action->flags & SA_INTERRUPT))
spin_unlock(&irq_controller_lock);
if (!(action->flags & SA_INTERRUPT))
@@
-194,8
+195,9
@@
__do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
status = 0;
do {
status = 0;
do {
- status |= action->flags;
- action->handler(irq, action->dev_id, regs);
+ ret = action->handler(irq, action->dev_id, regs);
+ if (ret == IRQ_HANDLED)
+ status |= action->flags;
action = action->next;
} while (action);
action = action->next;
} while (action);
@@
-549,7
+551,7
@@
int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_
action->handler = handler;
action->flags = irq_flags;
action->handler = handler;
action->flags = irq_flags;
-
action->mask = 0
;
+
cpus_clear(action->mask)
;
action->name = devname;
action->next = NULL;
action->dev_id = dev_id;
action->name = devname;
action->next = NULL;
action->dev_id = dev_id;