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/autoprobe.c |
Line in file: | 104 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2012-05-21 20:30:05 UTC |
74 if (desc->chip->startup(i)) 75 desc->status |= IRQ_PENDING; 76 } 77 spin_unlock_irq(&desc->lock); 78 } 79 80 /* 81 * Wait for spurious interrupts to trigger 82 */ 83 msleep(100); 84 85 /* 86 * Now filter out any obviously spurious interrupts 87 */ 88 for_each_irq_desc(i, desc) { 89 spin_lock_irq(&desc->lock); 90 status = desc->status; 91 92 if (status & IRQ_AUTODETECT) { 93 /* It triggered already - consider it spurious. */ 94 if (!(status & IRQ_WAITING)) { 95 desc->status = status & ~IRQ_AUTODETECT; 96 desc->chip->shutdown(i); 97 } else 98 if (i < 32) 99 mask |= 1 << i; 100 } 101 spin_unlock_irq(&desc->lock); 102 } 103 104 return mask; 105} 106EXPORT_SYMBOL(probe_irq_on); 107 108/** 109 * probe_irq_mask - scan a bitmap of interrupt lines 110 * @val: mask of interrupts to consider 111 * 112 * Scan the interrupt lines and return a bitmap of active 113 * autodetect interrupts. The interrupt probe logic state 114 * is then returned to its previous value.