Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sparseirq: Change irq_desc_ptrs to static

Add replace_irq_desc() instead of poking at the array directly.

-v2: remove unneeded boundary check in replace_irq_desc

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <1265793639-15071-31-git-send-email-yinghai@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>

authored by

Yinghai Lu and committed by
H. Peter Anvin
99558f0b 773e3eb7

+9 -8
+6 -1
kernel/irq/handle.c
··· 127 127 */ 128 128 DEFINE_RAW_SPINLOCK(sparse_irq_lock); 129 129 130 - struct irq_desc **irq_desc_ptrs __read_mostly; 130 + static struct irq_desc **irq_desc_ptrs __read_mostly; 131 131 132 132 static struct irq_desc irq_desc_legacy[NR_IRQS_LEGACY] __cacheline_aligned_in_smp = { 133 133 [0 ... NR_IRQS_LEGACY-1] = { ··· 190 190 return irq_desc_ptrs[irq]; 191 191 192 192 return NULL; 193 + } 194 + 195 + void replace_irq_desc(unsigned int irq, struct irq_desc *desc) 196 + { 197 + irq_desc_ptrs[irq] = desc; 193 198 } 194 199 195 200 struct irq_desc * __ref irq_to_desc_alloc_node(unsigned int irq, int node)
+1 -5
kernel/irq/internals.h
··· 21 21 extern raw_spinlock_t sparse_irq_lock; 22 22 23 23 #ifdef CONFIG_SPARSE_IRQ 24 - /* irq_desc_ptrs allocated at boot time */ 25 - extern struct irq_desc **irq_desc_ptrs; 26 - #else 27 - /* irq_desc_ptrs is a fixed size array */ 28 - extern struct irq_desc *irq_desc_ptrs[NR_IRQS]; 24 + void replace_irq_desc(unsigned int irq, struct irq_desc *desc); 29 25 #endif 30 26 31 27 #ifdef CONFIG_PROC_FS
+2 -2
kernel/irq/numa_migrate.c
··· 70 70 raw_spin_lock_irqsave(&sparse_irq_lock, flags); 71 71 72 72 /* We have to check it to avoid races with another CPU */ 73 - desc = irq_desc_ptrs[irq]; 73 + desc = irq_to_desc(irq); 74 74 75 75 if (desc && old_desc != desc) 76 76 goto out_unlock; ··· 90 90 goto out_unlock; 91 91 } 92 92 93 - irq_desc_ptrs[irq] = desc; 93 + replace_irq_desc(irq, desc); 94 94 raw_spin_unlock_irqrestore(&sparse_irq_lock, flags); 95 95 96 96 /* free the old one */