Lines Matching refs:desc

38 bool irq_wait_for_poll(struct irq_desc *desc)  in irq_wait_for_poll()  argument
42 smp_processor_id(), desc->irq_data.irq)) in irq_wait_for_poll()
47 raw_spin_unlock(&desc->lock); in irq_wait_for_poll()
48 while (irqd_irq_inprogress(&desc->irq_data)) in irq_wait_for_poll()
50 raw_spin_lock(&desc->lock); in irq_wait_for_poll()
51 } while (irqd_irq_inprogress(&desc->irq_data)); in irq_wait_for_poll()
53 return !irqd_irq_disabled(&desc->irq_data) && desc->action; in irq_wait_for_poll()
63 static int try_one_irq(int irq, struct irq_desc *desc, bool force) in try_one_irq() argument
68 raw_spin_lock(&desc->lock); in try_one_irq()
74 if (irq_settings_is_per_cpu(desc) || in try_one_irq()
75 irq_settings_is_nested_thread(desc) || in try_one_irq()
76 irq_settings_is_polled(desc)) in try_one_irq()
83 if (irqd_irq_disabled(&desc->irq_data) && !force) in try_one_irq()
90 action = desc->action; in try_one_irq()
96 if (irqd_irq_inprogress(&desc->irq_data)) { in try_one_irq()
101 desc->istate |= IRQS_PENDING; in try_one_irq()
106 desc->istate |= IRQS_POLL_INPROGRESS; in try_one_irq()
108 if (handle_irq_event(desc) == IRQ_HANDLED) in try_one_irq()
111 action = desc->action; in try_one_irq()
112 } while ((desc->istate & IRQS_PENDING) && action); in try_one_irq()
113 desc->istate &= ~IRQS_POLL_INPROGRESS; in try_one_irq()
115 raw_spin_unlock(&desc->lock); in try_one_irq()
121 struct irq_desc *desc; in misrouted_irq() local
129 for_each_irq_desc(i, desc) { in misrouted_irq()
136 if (try_one_irq(i, desc, false)) in misrouted_irq()
147 struct irq_desc *desc; in poll_spurious_irqs() local
154 for_each_irq_desc(i, desc) { in poll_spurious_irqs()
161 state = desc->istate; in poll_spurious_irqs()
167 try_one_irq(i, desc, true); in poll_spurious_irqs()
192 __report_bad_irq(unsigned int irq, struct irq_desc *desc, in __report_bad_irq() argument
214 raw_spin_lock_irqsave(&desc->lock, flags); in __report_bad_irq()
215 action = desc->action; in __report_bad_irq()
224 raw_spin_unlock_irqrestore(&desc->lock, flags); in __report_bad_irq()
228 report_bad_irq(unsigned int irq, struct irq_desc *desc, irqreturn_t action_ret) in report_bad_irq() argument
234 __report_bad_irq(irq, desc, action_ret); in report_bad_irq()
239 try_misrouted_irq(unsigned int irq, struct irq_desc *desc, in try_misrouted_irq() argument
268 action = desc->action; in try_misrouted_irq()
275 void note_interrupt(unsigned int irq, struct irq_desc *desc, in note_interrupt() argument
278 if (desc->istate & IRQS_POLL_INPROGRESS || in note_interrupt()
279 irq_settings_is_polled(desc)) in note_interrupt()
283 report_bad_irq(irq, desc, action_ret); in note_interrupt()
324 if (!(desc->threads_handled_last & SPURIOUS_DEFERRED)) { in note_interrupt()
325 desc->threads_handled_last |= SPURIOUS_DEFERRED; in note_interrupt()
340 handled = atomic_read(&desc->threads_handled); in note_interrupt()
342 if (handled != desc->threads_handled_last) { in note_interrupt()
352 desc->threads_handled_last = handled; in note_interrupt()
383 desc->threads_handled_last &= ~SPURIOUS_DEFERRED; in note_interrupt()
394 if (time_after(jiffies, desc->last_unhandled + HZ/10)) in note_interrupt()
395 desc->irqs_unhandled = 1; in note_interrupt()
397 desc->irqs_unhandled++; in note_interrupt()
398 desc->last_unhandled = jiffies; in note_interrupt()
401 if (unlikely(try_misrouted_irq(irq, desc, action_ret))) { in note_interrupt()
404 desc->irqs_unhandled -= ok; in note_interrupt()
407 desc->irq_count++; in note_interrupt()
408 if (likely(desc->irq_count < 100000)) in note_interrupt()
411 desc->irq_count = 0; in note_interrupt()
412 if (unlikely(desc->irqs_unhandled > 99900)) { in note_interrupt()
416 __report_bad_irq(irq, desc, action_ret); in note_interrupt()
421 desc->istate |= IRQS_SPURIOUS_DISABLED; in note_interrupt()
422 desc->depth++; in note_interrupt()
423 irq_disable(desc); in note_interrupt()
428 desc->irqs_unhandled = 0; in note_interrupt()