aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/numa_migrate.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq/numa_migrate.c')
-rw-r--r--kernel/irq/numa_migrate.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/kernel/irq/numa_migrate.c b/kernel/irq/numa_migrate.c
index ecf765c6a77a..aef18ab6b75b 100644
--- a/kernel/irq/numa_migrate.c
+++ b/kernel/irq/numa_migrate.c
@@ -17,16 +17,11 @@ static void init_copy_kstat_irqs(struct irq_desc *old_desc,
17 struct irq_desc *desc, 17 struct irq_desc *desc,
18 int cpu, int nr) 18 int cpu, int nr)
19{ 19{
20 unsigned long bytes;
21
22 init_kstat_irqs(desc, cpu, nr); 20 init_kstat_irqs(desc, cpu, nr);
23 21
24 if (desc->kstat_irqs != old_desc->kstat_irqs) { 22 if (desc->kstat_irqs != old_desc->kstat_irqs)
25 /* Compute how many bytes we need per irq and allocate them */ 23 memcpy(desc->kstat_irqs, old_desc->kstat_irqs,
26 bytes = nr * sizeof(unsigned int); 24 nr * sizeof(*desc->kstat_irqs));
27
28 memcpy(desc->kstat_irqs, old_desc->kstat_irqs, bytes);
29 }
30} 25}
31 26
32static void free_kstat_irqs(struct irq_desc *old_desc, struct irq_desc *desc) 27static void free_kstat_irqs(struct irq_desc *old_desc, struct irq_desc *desc)
@@ -71,7 +66,7 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,
71 desc = irq_desc_ptrs[irq]; 66 desc = irq_desc_ptrs[irq];
72 67
73 if (desc && old_desc != desc) 68 if (desc && old_desc != desc)
74 goto out_unlock; 69 goto out_unlock;
75 70
76 node = cpu_to_node(cpu); 71 node = cpu_to_node(cpu);
77 desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node); 72 desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node);
@@ -84,10 +79,15 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,
84 init_copy_one_irq_desc(irq, old_desc, desc, cpu); 79 init_copy_one_irq_desc(irq, old_desc, desc, cpu);
85 80
86 irq_desc_ptrs[irq] = desc; 81 irq_desc_ptrs[irq] = desc;
82 spin_unlock_irqrestore(&sparse_irq_lock, flags);
87 83
88 /* free the old one */ 84 /* free the old one */
89 free_one_irq_desc(old_desc, desc); 85 free_one_irq_desc(old_desc, desc);
86 spin_unlock(&old_desc->lock);
90 kfree(old_desc); 87 kfree(old_desc);
88 spin_lock(&desc->lock);
89
90 return desc;
91 91
92out_unlock: 92out_unlock:
93 spin_unlock_irqrestore(&sparse_irq_lock, flags); 93 spin_unlock_irqrestore(&sparse_irq_lock, flags);