aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-02-04 13:58:50 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2009-02-04 13:58:50 -0800
commit647802d6db5f2e62e53f44bfdc61416547ba7f5b (patch)
tree57b24ba72db7a553a5d59d5aa5b5bd4f6ed940ac /kernel
parent3e561f975cd6db846b2bbd684cd107a27f5d8aaa (diff)
parentbb960a1e42042e82447a5bc0941b3ab6d614bac3 (diff)
downloadkernel_samsung_smdk4412-647802d6db5f2e62e53f44bfdc61416547ba7f5b.zip
kernel_samsung_smdk4412-647802d6db5f2e62e53f44bfdc61416547ba7f5b.tar.gz
kernel_samsung_smdk4412-647802d6db5f2e62e53f44bfdc61416547ba7f5b.tar.bz2
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: x86: APIC: enable workaround on AMD Fam10h CPUs xen: disable interrupts before saving in percpu x86: add x86@kernel.org to MAINTAINERS x86: push old stack address on irqstack for unwinder irq, x86: fix lock status with numa_migrate_irq_desc x86: add cache descriptors for Intel Core i7 x86/Voyager: make it build and boot
Diffstat (limited to 'kernel')
-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 ecf765c..acd8835 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);