git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'tracing-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git]
/
kernel
/
irq
/
resend.c
diff --git
a/kernel/irq/resend.c
b/kernel/irq/resend.c
index
5bfeaed
..
090c376
100644
(file)
--- a/
kernel/irq/resend.c
+++ b/
kernel/irq/resend.c
@@
-33,10
+33,10
@@
static void resend_irqs(unsigned long arg)
struct irq_desc *desc;
int irq;
struct irq_desc *desc;
int irq;
- while (!bitmap_empty(irqs_resend,
NR_IRQS
)) {
- irq = find_first_bit(irqs_resend,
NR_IRQS
);
+ while (!bitmap_empty(irqs_resend,
nr_irqs
)) {
+ irq = find_first_bit(irqs_resend,
nr_irqs
);
clear_bit(irq, irqs_resend);
clear_bit(irq, irqs_resend);
- desc = irq_
desc + irq
;
+ desc = irq_
to_desc(irq)
;
local_irq_disable();
desc->handle_irq(irq, desc);
local_irq_enable();
local_irq_disable();
desc->handle_irq(irq, desc);
local_irq_enable();
@@
-62,11
+62,15
@@
void check_irq_resend(struct irq_desc *desc, unsigned int irq)
*/
desc->chip->enable(irq);
*/
desc->chip->enable(irq);
- if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
+ /*
+ * We do not resend level type interrupts. Level type
+ * interrupts are resent by hardware when they are still
+ * active.
+ */
+ if ((status & (IRQ_LEVEL | IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
desc->status = (status & ~IRQ_PENDING) | IRQ_REPLAY;
- if (!desc->chip || !desc->chip->retrigger ||
- !desc->chip->retrigger(irq)) {
+ if (!desc->chip->retrigger || !desc->chip->retrigger(irq)) {
#ifdef CONFIG_HARDIRQS_SW_RESEND
/* Set it pending and activate the softirq: */
set_bit(irq, irqs_resend);
#ifdef CONFIG_HARDIRQS_SW_RESEND
/* Set it pending and activate the softirq: */
set_bit(irq, irqs_resend);