diff options
Diffstat (limited to 'kernel/irq/numa_migrate.c')
-rw-r--r-- | kernel/irq/numa_migrate.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/irq/numa_migrate.c b/kernel/irq/numa_migrate.c index c500cfe422b6..aef18ab6b75b 100644 --- a/kernel/irq/numa_migrate.c +++ b/kernel/irq/numa_migrate.c | |||
@@ -66,7 +66,7 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc, | |||
66 | desc = irq_desc_ptrs[irq]; | 66 | desc = irq_desc_ptrs[irq]; |
67 | 67 | ||
68 | if (desc && old_desc != desc) | 68 | if (desc && old_desc != desc) |
69 | goto out_unlock; | 69 | goto out_unlock; |
70 | 70 | ||
71 | node = cpu_to_node(cpu); | 71 | node = cpu_to_node(cpu); |
72 | desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node); | 72 | desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node); |
@@ -79,10 +79,15 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc, | |||
79 | init_copy_one_irq_desc(irq, old_desc, desc, cpu); | 79 | init_copy_one_irq_desc(irq, old_desc, desc, cpu); |
80 | 80 | ||
81 | irq_desc_ptrs[irq] = desc; | 81 | irq_desc_ptrs[irq] = desc; |
82 | spin_unlock_irqrestore(&sparse_irq_lock, flags); | ||
82 | 83 | ||
83 | /* free the old one */ | 84 | /* free the old one */ |
84 | free_one_irq_desc(old_desc, desc); | 85 | free_one_irq_desc(old_desc, desc); |
86 | spin_unlock(&old_desc->lock); | ||
85 | kfree(old_desc); | 87 | kfree(old_desc); |
88 | spin_lock(&desc->lock); | ||
89 | |||
90 | return desc; | ||
86 | 91 | ||
87 | out_unlock: | 92 | out_unlock: |
88 | spin_unlock_irqrestore(&sparse_irq_lock, flags); | 93 | spin_unlock_irqrestore(&sparse_irq_lock, flags); |