handle.c (5234ffb9f74cfa8993d174782bc861dd9b7b5bfb) | handle.c (7140ea1980f2fae9c7aaeac5f6b35317e1389ee6) |
---|---|
1/* 2 * linux/kernel/irq/handle.c 3 * 4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar 5 * Copyright (C) 2005-2006, Thomas Gleixner, Russell King 6 * 7 * This file contains the core interrupt handling code. 8 * --- 96 unchanged lines hidden (view full) --- 105 * 106 * So either the thread waits for us to clear IRQS_INPROGRESS 107 * or we are waiting in the flow handler for desc->lock to be 108 * released before we reach this point. The thread also checks 109 * IRQTF_RUNTHREAD under desc->lock. If set it leaves 110 * threads_oneshot untouched and runs the thread another time. 111 */ 112 desc->threads_oneshot |= action->thread_mask; | 1/* 2 * linux/kernel/irq/handle.c 3 * 4 * Copyright (C) 1992, 1998-2006 Linus Torvalds, Ingo Molnar 5 * Copyright (C) 2005-2006, Thomas Gleixner, Russell King 6 * 7 * This file contains the core interrupt handling code. 8 * --- 96 unchanged lines hidden (view full) --- 105 * 106 * So either the thread waits for us to clear IRQS_INPROGRESS 107 * or we are waiting in the flow handler for desc->lock to be 108 * released before we reach this point. The thread also checks 109 * IRQTF_RUNTHREAD under desc->lock. If set it leaves 110 * threads_oneshot untouched and runs the thread another time. 111 */ 112 desc->threads_oneshot |= action->thread_mask; |
113 114 /* 115 * We increment the threads_active counter in case we wake up 116 * the irq thread. The irq thread decrements the counter when 117 * it returns from the handler or in the exit path and wakes 118 * up waiters which are stuck in synchronize_irq() when the 119 * active count becomes zero. synchronize_irq() is serialized 120 * against this code (hard irq handler) via IRQS_INPROGRESS 121 * like the finalize_oneshot() code. See comment above. 122 */ 123 atomic_inc(&desc->threads_active); 124 |
|
113 wake_up_process(action->thread); 114} 115 116irqreturn_t 117handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) 118{ 119 irqreturn_t retval = IRQ_NONE; 120 unsigned int random = 0, irq = desc->irq_data.irq; --- 61 unchanged lines hidden --- | 125 wake_up_process(action->thread); 126} 127 128irqreturn_t 129handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action) 130{ 131 irqreturn_t retval = IRQ_NONE; 132 unsigned int random = 0, irq = desc->irq_data.irq; --- 61 unchanged lines hidden --- |