diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-09-15 08:40:12 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-09-15 08:40:12 +0200 |
commit | 882e959d27622c0e1b67ead06b969e5ba05bfbd6 (patch) | |
tree | 8d01d508109710ec04ba59c632369adab68dc8a7 | |
parent | 016134275bad745436e99ccf91102771dbcce36c (diff) | |
download | longterm-queue-2.6.32-882e959d27622c0e1b67ead06b969e5ba05bfbd6.tar.gz |
.32 patches
-rw-r--r-- | queue-2.6.32/powerpc-mpic-fix-problem-that-affinity-is-not-updated.patch | 72 | ||||
-rw-r--r-- | queue-2.6.32/series | 1 |
2 files changed, 73 insertions, 0 deletions
diff --git a/queue-2.6.32/powerpc-mpic-fix-problem-that-affinity-is-not-updated.patch b/queue-2.6.32/powerpc-mpic-fix-problem-that-affinity-is-not-updated.patch new file mode 100644 index 0000000..d11c4f1 --- /dev/null +++ b/queue-2.6.32/powerpc-mpic-fix-problem-that-affinity-is-not-updated.patch @@ -0,0 +1,72 @@ +From 38e1313fc753482b93aa6c6f11cfbd43a5bcd963 Mon Sep 17 00:00:00 2001 +From: Yang Li <leoli@freescale.com> +Date: Wed, 16 Dec 2009 20:18:11 +0000 +Subject: powerpc/mpic: Fix problem that affinity is not updated + +From: Yang Li <leoli@freescale.com> + +commit 38e1313fc753482b93aa6c6f11cfbd43a5bcd963 upstream. + +Since commit 57b150cce8e004ddd36330490a68bfb59b7271e9, desc->affinity +of an irq is changed after calling desc->chip->set_affinity. +Therefore we need to fix the irq_choose_cpu() not to depend on the +desc->affinity for new mask. + +Signed-off-by: Jiajun Wu <b06378@freescale.com> +Signed-off-by: Li Yang <leoli@freescale.com> +Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/powerpc/sysdev/mpic.c | 17 +++++------------ + 1 file changed, 5 insertions(+), 12 deletions(-) + +--- a/arch/powerpc/sysdev/mpic.c ++++ b/arch/powerpc/sysdev/mpic.c +@@ -567,12 +567,10 @@ static void __init mpic_scan_ht_pics(str + #endif /* CONFIG_MPIC_U3_HT_IRQS */ + + #ifdef CONFIG_SMP +-static int irq_choose_cpu(unsigned int virt_irq) ++static int irq_choose_cpu(const cpumask_t *mask) + { +- cpumask_t mask; + int cpuid; + +- cpumask_copy(&mask, irq_desc[virt_irq].affinity); + if (cpus_equal(mask, CPU_MASK_ALL)) { + static int irq_rover; + static DEFINE_SPINLOCK(irq_rover_lock); +@@ -594,20 +592,15 @@ static int irq_choose_cpu(unsigned int v + + spin_unlock_irqrestore(&irq_rover_lock, flags); + } else { +- cpumask_t tmp; +- +- cpus_and(tmp, cpu_online_map, mask); +- +- if (cpus_empty(tmp)) ++ cpuid = cpumask_first_and(mask, cpu_online_mask); ++ if (cpuid >= nr_cpu_ids) + goto do_round_robin; +- +- cpuid = first_cpu(tmp); + } + + return get_hard_smp_processor_id(cpuid); + } + #else +-static int irq_choose_cpu(unsigned int virt_irq) ++static int irq_choose_cpu(const cpumask_t *mask) + { + return hard_smp_processor_id(); + } +@@ -816,7 +809,7 @@ int mpic_set_affinity(unsigned int irq, + unsigned int src = mpic_irq_to_hw(irq); + + if (mpic->flags & MPIC_SINGLE_DEST_CPU) { +- int cpuid = irq_choose_cpu(irq); ++ int cpuid = irq_choose_cpu(cpumask); + + mpic_irq_write(src, MPIC_INFO(IRQ_DESTINATION), 1 << cpuid); + } else { diff --git a/queue-2.6.32/series b/queue-2.6.32/series index 8d99e24..6f2e55d 100644 --- a/queue-2.6.32/series +++ b/queue-2.6.32/series @@ -11,3 +11,4 @@ revert-x86-hotplug-use-mwait-to-offline-a-processor-fix-the.patch gro-fix-merging-a-paged-skb-after-non-paged-skbs.patch xen-blkfront-fix-data-size-for-xenbus_gather-in-blkfront_connect.patch md-linear-avoid-corrupting-structure-while-waiting-for.patch +powerpc-mpic-fix-problem-that-affinity-is-not-updated.patch |