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.c7
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
87out_unlock: 92out_unlock:
88 spin_unlock_irqrestore(&sparse_irq_lock, flags); 93 spin_unlock_irqrestore(&sparse_irq_lock, flags);