aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2014-01-19 17:27:22 +0000
committerJohn Crispin <john@openwrt.org>2014-01-19 17:27:22 +0000
commita818a3cf8f6b9180608b0f2c841dde6eb53a46ea (patch)
tree31684c5b6b37dc9d08bbcfb7bd94c4585f4b796f /target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch
parenta75b69255725501082bb3cbd89d8579f199dafbf (diff)
downloadupstream-a818a3cf8f6b9180608b0f2c841dde6eb53a46ea.tar.gz
upstream-a818a3cf8f6b9180608b0f2c841dde6eb53a46ea.tar.bz2
upstream-a818a3cf8f6b9180608b0f2c841dde6eb53a46ea.zip
ralink: backport various fixes from linux-mti
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 39329
Diffstat (limited to 'target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch')
-rw-r--r--target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch49
1 files changed, 49 insertions, 0 deletions
diff --git a/target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch b/target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch
new file mode 100644
index 0000000000..ed9344168e
--- /dev/null
+++ b/target/linux/ramips/patches-3.10/0508-MIPS-GIC-Fix-gic_set_affinity-infinite-loop.patch
@@ -0,0 +1,49 @@
+From 553ddf4f3f20c28ab03f87ac8c3cde5edf714675 Mon Sep 17 00:00:00 2001
+From: Tony Wu <tung7970@gmail.com>
+Date: Fri, 21 Jun 2013 10:13:08 +0000
+Subject: [PATCH 022/105] MIPS: GIC: Fix gic_set_affinity infinite loop
+
+There is an infinite loop in gic_set_affinity. When irq_set_affinity
+gets called on gic controller, it blocks forever.
+
+Signed-off-by: Tony Wu <tung7970@gmail.com>
+Cc: Steven J. Hill <Steven.Hill@imgtec.com>
+Cc: linux-mips@linux-mips.org
+Patchwork: https://patchwork.linux-mips.org/patch/5537/
+Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
+(cherry picked from commit c214c03512b67e56dea3f4471705f8caae49553a)
+---
+ arch/mips/kernel/irq-gic.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c
+index c01b307..5b5ddb2 100644
+--- a/arch/mips/kernel/irq-gic.c
++++ b/arch/mips/kernel/irq-gic.c
+@@ -219,16 +219,15 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
+
+ /* Assumption : cpumask refers to a single CPU */
+ spin_lock_irqsave(&gic_lock, flags);
+- for (;;) {
+- /* Re-route this IRQ */
+- GIC_SH_MAP_TO_VPE_SMASK(irq, first_cpu(tmp));
+
+- /* Update the pcpu_masks */
+- for (i = 0; i < NR_CPUS; i++)
+- clear_bit(irq, pcpu_masks[i].pcpu_mask);
+- set_bit(irq, pcpu_masks[first_cpu(tmp)].pcpu_mask);
++ /* Re-route this IRQ */
++ GIC_SH_MAP_TO_VPE_SMASK(irq, first_cpu(tmp));
++
++ /* Update the pcpu_masks */
++ for (i = 0; i < NR_CPUS; i++)
++ clear_bit(irq, pcpu_masks[i].pcpu_mask);
++ set_bit(irq, pcpu_masks[first_cpu(tmp)].pcpu_mask);
+
+- }
+ cpumask_copy(d->affinity, cpumask);
+ spin_unlock_irqrestore(&gic_lock, flags);
+
+--
+1.7.10.4
+