aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2009-04-27 21:00:38 -0400
committerIngo Molnar <mingo@elte.hu>2009-04-28 06:21:17 -0400
commit85ac16d033370caf6f48d743c8dc8103700f5cc5 (patch)
tree04a73af31c07a8ad29780b777b3f9d041fa236fa /include/linux
parent57b150cce8e004ddd36330490a68bfb59b7271e9 (diff)
x86/irq: change irq_desc_alloc() to take node instead of cpu
This simplifies the node awareness of the code. All our allocators only deal with a NUMA node ID locality not with CPU ids anyway - so there's no need to maintain (and transform) a CPU id all across the IRq layer. v2: keep move_irq_desc related [ Impact: cleanup, prepare IRQ code to be NUMA-aware ] Signed-off-by: Yinghai Lu <yinghai@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Suresh Siddha <suresh.b.siddha@intel.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Jeremy Fitzhardinge <jeremy@goop.org> LKML-Reference: <49F65536.2020300@kernel.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/interrupt.h2
-rw-r--r--include/linux/irq.h16
2 files changed, 7 insertions, 11 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
index 91bb76f44f14..ff374ceface0 100644
--- a/include/linux/interrupt.h
+++ b/include/linux/interrupt.h
@@ -566,6 +566,6 @@ struct irq_desc;
566extern int early_irq_init(void); 566extern int early_irq_init(void);
567extern int arch_probe_nr_irqs(void); 567extern int arch_probe_nr_irqs(void);
568extern int arch_early_irq_init(void); 568extern int arch_early_irq_init(void);
569extern int arch_init_chip_data(struct irq_desc *desc, int cpu); 569extern int arch_init_chip_data(struct irq_desc *desc, int node);
570 570
571#endif 571#endif
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 8e4c18b29157..a09baf8f9d99 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -187,7 +187,7 @@ struct irq_desc {
187 spinlock_t lock; 187 spinlock_t lock;
188#ifdef CONFIG_SMP 188#ifdef CONFIG_SMP
189 cpumask_var_t affinity; 189 cpumask_var_t affinity;
190 unsigned int cpu; 190 unsigned int node;
191#ifdef CONFIG_GENERIC_PENDING_IRQ 191#ifdef CONFIG_GENERIC_PENDING_IRQ
192 cpumask_var_t pending_mask; 192 cpumask_var_t pending_mask;
193#endif 193#endif
@@ -201,16 +201,16 @@ struct irq_desc {
201} ____cacheline_internodealigned_in_smp; 201} ____cacheline_internodealigned_in_smp;
202 202
203extern void arch_init_copy_chip_data(struct irq_desc *old_desc, 203extern void arch_init_copy_chip_data(struct irq_desc *old_desc,
204 struct irq_desc *desc, int cpu); 204 struct irq_desc *desc, int node);
205extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc); 205extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc);
206 206
207#ifndef CONFIG_SPARSE_IRQ 207#ifndef CONFIG_SPARSE_IRQ
208extern struct irq_desc irq_desc[NR_IRQS]; 208extern struct irq_desc irq_desc[NR_IRQS];
209#else /* CONFIG_SPARSE_IRQ */ 209#else /* CONFIG_SPARSE_IRQ */
210extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); 210extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int node);
211#endif /* CONFIG_SPARSE_IRQ */ 211#endif /* CONFIG_SPARSE_IRQ */
212 212
213extern struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu); 213extern struct irq_desc *irq_to_desc_alloc_node(unsigned int irq, int node);
214 214
215/* 215/*
216 * Migration helpers for obsolete names, they will go away: 216 * Migration helpers for obsolete names, they will go away:
@@ -422,12 +422,10 @@ extern int set_irq_msi(unsigned int irq, struct msi_desc *entry);
422 * Allocates affinity and pending_mask cpumask if required. 422 * Allocates affinity and pending_mask cpumask if required.
423 * Returns true if successful (or not required). 423 * Returns true if successful (or not required).
424 */ 424 */
425static inline bool alloc_desc_masks(struct irq_desc *desc, int cpu, 425static inline bool alloc_desc_masks(struct irq_desc *desc, int node,
426 bool boot) 426 bool boot)
427{ 427{
428#ifdef CONFIG_CPUMASK_OFFSTACK 428#ifdef CONFIG_CPUMASK_OFFSTACK
429 int node;
430
431 if (boot) { 429 if (boot) {
432 alloc_bootmem_cpumask_var(&desc->affinity); 430 alloc_bootmem_cpumask_var(&desc->affinity);
433 431
@@ -437,8 +435,6 @@ static inline bool alloc_desc_masks(struct irq_desc *desc, int cpu,
437 return true; 435 return true;
438 } 436 }
439 437
440 node = cpu_to_node(cpu);
441
442 if (!alloc_cpumask_var_node(&desc->affinity, GFP_ATOMIC, node)) 438 if (!alloc_cpumask_var_node(&desc->affinity, GFP_ATOMIC, node))
443 return false; 439 return false;
444 440
@@ -494,7 +490,7 @@ static inline void free_desc_masks(struct irq_desc *old_desc,
494 490
495#else /* !CONFIG_SMP */ 491#else /* !CONFIG_SMP */
496 492
497static inline bool alloc_desc_masks(struct irq_desc *desc, int cpu, 493static inline bool alloc_desc_masks(struct irq_desc *desc, int node,
498 bool boot) 494 bool boot)
499{ 495{
500 return true; 496 return true;