User: | Jiri Slaby |
Error type: | Leaving function in locked state |
Error type description: | Some lock is not unlocked on all paths of a function, so it is leaked |
File location: | kernel/irq/handle.c |
Line in file: | 153 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2012-05-21 20:30:05 UTC |
123 return IRQ_NONE; 124} 125 126/** 127 * handle_IRQ_event - irq action chain handler 128 * @irq: the interrupt number 129 * @action: the interrupt action chain for this irq 130 * 131 * Handles the action chain of an irq event 132 */ 133irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action) 134{ 135 irqreturn_t ret, retval = IRQ_NONE; 136 unsigned int status = 0; 137 138 if (!(action->flags & IRQF_DISABLED)) 139 local_irq_enable_in_hardirq(); 140 141 do { 142 ret = action->handler(irq, action->dev_id); 143 if (ret == IRQ_HANDLED) 144 status |= action->flags; 145 retval |= ret; 146 action = action->next; 147 } while (action); 148 149 if (status & IRQF_SAMPLE_RANDOM) 150 add_interrupt_randomness(irq); 151 local_irq_disable(); 152 153 return retval; 154} 155 156#ifndef CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ 157/** 158 * __do_IRQ - original all in one highlevel IRQ handler 159 * @irq: the interrupt number 160 * 161 * __do_IRQ handles all normal device IRQ's (the special 162 * SMP cross-CPU interrupts have their own specific 163 * handlers).