diff options
Diffstat (limited to 'kernel/irq/numa_migrate.c')
-rw-r--r-- | kernel/irq/numa_migrate.c | 18 |
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 | ||
32 | static void free_kstat_irqs(struct irq_desc *old_desc, struct irq_desc *desc) | 27 | static 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 | ||
92 | out_unlock: | 92 | out_unlock: |
93 | spin_unlock_irqrestore(&sparse_irq_lock, flags); | 93 | spin_unlock_irqrestore(&sparse_irq_lock, flags); |