diff options
Diffstat (limited to 'kernel/irq/numa_migrate.c')
| -rw-r--r-- | kernel/irq/numa_migrate.c | 38 | 
1 files changed, 12 insertions, 26 deletions
| diff --git a/kernel/irq/numa_migrate.c b/kernel/irq/numa_migrate.c index 44bbdcbaf8d..2f69bee57bf 100644 --- a/kernel/irq/numa_migrate.c +++ b/kernel/irq/numa_migrate.c @@ -15,9 +15,9 @@  static void init_copy_kstat_irqs(struct irq_desc *old_desc,  				 struct irq_desc *desc, -				 int cpu, int nr) +				 int node, int nr)  { -	init_kstat_irqs(desc, cpu, nr); +	init_kstat_irqs(desc, node, nr);  	if (desc->kstat_irqs != old_desc->kstat_irqs)  		memcpy(desc->kstat_irqs, old_desc->kstat_irqs, @@ -34,20 +34,20 @@ static void free_kstat_irqs(struct irq_desc *old_desc, struct irq_desc *desc)  }  static bool init_copy_one_irq_desc(int irq, struct irq_desc *old_desc, -		 struct irq_desc *desc, int cpu) +		 struct irq_desc *desc, int node)  {  	memcpy(desc, old_desc, sizeof(struct irq_desc)); -	if (!init_alloc_desc_masks(desc, cpu, false)) { +	if (!alloc_desc_masks(desc, node, false)) {  		printk(KERN_ERR "irq %d: can not get new irq_desc cpumask "  				"for migration.\n", irq);  		return false;  	}  	spin_lock_init(&desc->lock); -	desc->cpu = cpu; +	desc->node = node;  	lockdep_set_class(&desc->lock, &irq_desc_lock_class); -	init_copy_kstat_irqs(old_desc, desc, cpu, nr_cpu_ids); +	init_copy_kstat_irqs(old_desc, desc, node, nr_cpu_ids);  	init_copy_desc_masks(old_desc, desc); -	arch_init_copy_chip_data(old_desc, desc, cpu); +	arch_init_copy_chip_data(old_desc, desc, node);  	return true;  } @@ -59,12 +59,11 @@ static void free_one_irq_desc(struct irq_desc *old_desc, struct irq_desc *desc)  }  static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc, -						int cpu) +						int node)  {  	struct irq_desc *desc;  	unsigned int irq;  	unsigned long flags; -	int node;  	irq = old_desc->irq; @@ -76,7 +75,6 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,  	if (desc && old_desc != desc)  		goto out_unlock; -	node = cpu_to_node(cpu);  	desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node);  	if (!desc) {  		printk(KERN_ERR "irq %d: can not get new irq_desc " @@ -85,7 +83,7 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,  		desc = old_desc;  		goto out_unlock;  	} -	if (!init_copy_one_irq_desc(irq, old_desc, desc, cpu)) { +	if (!init_copy_one_irq_desc(irq, old_desc, desc, node)) {  		/* still use old one */  		kfree(desc);  		desc = old_desc; @@ -97,9 +95,7 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,  	/* free the old one */  	free_one_irq_desc(old_desc, desc); -	spin_unlock(&old_desc->lock);  	kfree(old_desc); -	spin_lock(&desc->lock);  	return desc; @@ -109,24 +105,14 @@ out_unlock:  	return desc;  } -struct irq_desc *move_irq_desc(struct irq_desc *desc, int cpu) +struct irq_desc *move_irq_desc(struct irq_desc *desc, int node)  { -	int old_cpu; -	int node, old_node; -  	/* those all static, do move them */  	if (desc->irq < NR_IRQS_LEGACY)  		return desc; -	old_cpu = desc->cpu; -	if (old_cpu != cpu) { -		node = cpu_to_node(cpu); -		old_node = cpu_to_node(old_cpu); -		if (old_node != node) -			desc = __real_move_irq_desc(desc, cpu); -		else -			desc->cpu = cpu; -	} +	if (desc->node != node) +		desc = __real_move_irq_desc(desc, node);  	return desc;  } | 
