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
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
arch
/
arm
/
mach-sa1100
/
neponset.c
diff --git
a/arch/arm/mach-sa1100/neponset.c
b/arch/arm/mach-sa1100/neponset.c
index
9e02bc3
..
075d4d1
100644
(file)
--- a/
arch/arm/mach-sa1100/neponset.c
+++ b/
arch/arm/mach-sa1100/neponset.c
@@
-29,12
+29,12
@@
* is rather unfortunate.
*/
static void
* is rather unfortunate.
*/
static void
-neponset_irq_handler(unsigned int irq, struct irq
desc *desc, struct pt_regs *regs
)
+neponset_irq_handler(unsigned int irq, struct irq
_desc *desc
)
{
unsigned int irr;
while (1) {
{
unsigned int irr;
while (1) {
- struct irqdesc *d;
+ struct irq
_
desc *d;
/*
* Acknowledge the parent IRQ.
/*
* Acknowledge the parent IRQ.
@@
-59,14
+59,22
@@
neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
if (irr & (IRR_ETHERNET | IRR_USAR)) {
desc->chip->mask(irq);
if (irr & (IRR_ETHERNET | IRR_USAR)) {
desc->chip->mask(irq);
+ /*
+ * Ack the interrupt now to prevent re-entering
+ * this neponset handler. Again, this is safe
+ * since we'll check the IRR register prior to
+ * leaving.
+ */
+ desc->chip->ack(irq);
+
if (irr & IRR_ETHERNET) {
d = irq_desc + IRQ_NEPONSET_SMC9196;
if (irr & IRR_ETHERNET) {
d = irq_desc + IRQ_NEPONSET_SMC9196;
- desc_handle_irq(IRQ_NEPONSET_SMC9196, d
, regs
);
+ desc_handle_irq(IRQ_NEPONSET_SMC9196, d);
}
if (irr & IRR_USAR) {
d = irq_desc + IRQ_NEPONSET_USAR;
}
if (irr & IRR_USAR) {
d = irq_desc + IRQ_NEPONSET_USAR;
- desc_handle_irq(IRQ_NEPONSET_USAR, d
, regs
);
+ desc_handle_irq(IRQ_NEPONSET_USAR, d);
}
desc->chip->unmask(irq);
}
desc->chip->unmask(irq);
@@
-74,7
+82,7
@@
neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
if (irr & IRR_SA1111) {
d = irq_desc + IRQ_NEPONSET_SA1111;
if (irr & IRR_SA1111) {
d = irq_desc + IRQ_NEPONSET_SA1111;
- desc_handle_irq(IRQ_NEPONSET_SA1111, d
, regs
);
+ desc_handle_irq(IRQ_NEPONSET_SA1111, d);
}
}
}
}
}
}
@@
-160,9
+168,9
@@
static int neponset_probe(struct platform_device *dev)
* Setup other Neponset IRQs. SA1111 will be done by the
* generic SA1111 code.
*/
* Setup other Neponset IRQs. SA1111 will be done by the
* generic SA1111 code.
*/
- set_irq_handler(IRQ_NEPONSET_SMC9196,
do_simple_IRQ
);
+ set_irq_handler(IRQ_NEPONSET_SMC9196,
handle_simple_irq
);
set_irq_flags(IRQ_NEPONSET_SMC9196, IRQF_VALID | IRQF_PROBE);
set_irq_flags(IRQ_NEPONSET_SMC9196, IRQF_VALID | IRQF_PROBE);
- set_irq_handler(IRQ_NEPONSET_USAR,
do_simple_IRQ
);
+ set_irq_handler(IRQ_NEPONSET_USAR,
handle_simple_irq
);
set_irq_flags(IRQ_NEPONSET_USAR, IRQF_VALID | IRQF_PROBE);
/*
set_irq_flags(IRQ_NEPONSET_USAR, IRQF_VALID | IRQF_PROBE);
/*