11 #include <linux/module.h>
21 #define POLL_SPURIOUS_IRQ_INTERVAL (HZ/10)
22 static void poll_spurious_irqs(
unsigned long dummy);
23 static DEFINE_TIMER(poll_spurious_irq_timer, poll_spurious_irqs, 0, 0);
24 static int irq_poll_cpu;
41 "irq poll in progress on cpu %d for irq %d\n",
48 while (irqd_irq_inprogress(&desc->
irq_data))
51 }
while (irqd_irq_inprogress(&desc->
irq_data));
71 if (irq_settings_is_per_cpu(desc) || irq_settings_is_nested_thread(desc))
78 if (irqd_irq_disabled(&desc->
irq_data) && !force)
93 if (irqd_irq_inprogress(&desc->
irq_data)) {
115 static int misrouted_irq(
int irq)
132 if (try_one_irq(i, desc,
false))
141 static void poll_spurious_irqs(
unsigned long dummy)
157 state = desc->istate;
163 try_one_irq(i, desc,
true);
172 static inline int bad_action_ret(
irqreturn_t action_ret)
188 __report_bad_irq(
unsigned int irq,
struct irq_desc *desc,
194 if (bad_action_ret(action_ret)) {
199 "the \"irqpoll\" option)\n", irq);
218 action = action->
next;
226 static int count = 100;
230 __report_bad_irq(irq, desc, action_ret);
235 try_misrouted_irq(
unsigned int irq,
struct irq_desc *desc,
279 if (bad_action_ret(action_ret)) {
280 report_bad_irq(irq, desc, action_ret);
298 if (
unlikely(try_misrouted_irq(irq, desc, action_ret))) {
299 int ok = misrouted_irq(irq);
313 __report_bad_irq(irq, desc, action_ret);
342 static int __init irqfixup_setup(
char *
str)
351 __setup(
"irqfixup", irqfixup_setup);
354 static int __init irqpoll_setup(
char *
str)
364 __setup(
"irqpoll", irqpoll_setup);