summaryrefslogtreecommitdiffstats
path: root/kernel/irq/numa_migrate.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-02-09 10:32:48 +0100
committerIngo Molnar <mingo@elte.hu>2009-02-09 10:32:48 +0100
commit4ad476e11f94fd3724c6e272d8220e99cd222b27 (patch)
treea8684d4ecbfe1d2b2b1e29ed74de65394ad21b43 /kernel/irq/numa_migrate.c
parent304cc6ae1bf7a8e6d00053fbe0b7e2b26cdddda2 (diff)
parent8e4921515c1a379539607eb443d51c30f4f7f338 (diff)
downloadlinux-4ad476e11f94fd3724c6e272d8220e99cd222b27.tar.bz2
Merge commit 'v2.6.29-rc4' into tracing/core
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 ecf765c6a77a..acd88356ac76 100644
--- a/kernel/irq/numa_migrate.c
+++ b/kernel/irq/numa_migrate.c
@@ -71,7 +71,7 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,
desc = irq_desc_ptrs[irq];
if (desc && old_desc != desc)
- goto out_unlock;
+ goto out_unlock;
node = cpu_to_node(cpu);
desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node);
@@ -84,10 +84,15 @@ static struct irq_desc *__real_move_irq_desc(struct irq_desc *old_desc,
init_copy_one_irq_desc(irq, old_desc, desc, cpu);
irq_desc_ptrs[irq] = desc;
+ spin_unlock_irqrestore(&sparse_irq_lock, flags);
/* 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;
out_unlock:
spin_unlock_irqrestore(&sparse_irq_lock, flags);