]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Jun 2014 18:12:03 +0000 (11:12 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Jun 2014 18:12:03 +0000 (11:12 -0700)
added patches:
arm64-use-cpu_online_mask-when-using-forced-irq_set_affinity.patch

queue-3.14/arm64-use-cpu_online_mask-when-using-forced-irq_set_affinity.patch [new file with mode: 0644]
queue-3.14/series

diff --git a/queue-3.14/arm64-use-cpu_online_mask-when-using-forced-irq_set_affinity.patch b/queue-3.14/arm64-use-cpu_online_mask-when-using-forced-irq_set_affinity.patch
new file mode 100644 (file)
index 0000000..cc140b2
--- /dev/null
@@ -0,0 +1,61 @@
+From 601c942176d8ad8334118bddb747e3720bed24f8 Mon Sep 17 00:00:00 2001
+From: Sudeep Holla <sudeep.holla@arm.com>
+Date: Fri, 9 May 2014 17:37:44 +0100
+Subject: arm64: use cpu_online_mask when using forced irq_set_affinity
+
+From: Sudeep Holla <sudeep.holla@arm.com>
+
+commit 601c942176d8ad8334118bddb747e3720bed24f8 upstream.
+
+Commit 01f8fa4f01d8("genirq: Allow forcing cpu affinity of interrupts")
+enabled the forced irq_set_affinity which previously refused to route an
+interrupt to an offline cpu.
+
+Commit ffde1de64012("irqchip: Gic: Support forced affinity setting")
+implements this force logic and disables the cpu online check for GIC
+interrupt controller.
+
+When __cpu_disable calls migrate_irqs, it disables the current cpu in
+cpu_online_mask and uses forced irq_set_affinity to migrate the IRQs
+away from the cpu but passes affinity mask with the cpu being offlined
+also included in it.
+
+When calling irq_set_affinity with force == true in a cpu hotplug path,
+the caller must ensure that the cpu being offlined is not present in the
+affinity mask or it may be selected as the target CPU, leading to the
+interrupt not being migrated.
+
+This patch uses cpu_online_mask when using forced irq_set_affinity so
+that the IRQs are properly migrated away.
+
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+Acked-by: Mark Rutland <mark.rutland@arm.com>
+Cc: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm64/kernel/irq.c |   10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+--- a/arch/arm64/kernel/irq.c
++++ b/arch/arm64/kernel/irq.c
+@@ -97,11 +97,15 @@ static bool migrate_one_irq(struct irq_d
+       if (irqd_is_per_cpu(d) || !cpumask_test_cpu(smp_processor_id(), affinity))
+               return false;
+-      if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
+-              affinity = cpu_online_mask;
++      if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids)
+               ret = true;
+-      }
++      /*
++       * when using forced irq_set_affinity we must ensure that the cpu
++       * being offlined is not present in the affinity mask, it may be
++       * selected as the target CPU otherwise
++       */
++      affinity = cpu_online_mask;
+       c = irq_data_get_irq_chip(d);
+       if (!c->irq_set_affinity)
+               pr_debug("IRQ%u: unable to set affinity\n", d->irq);
index 779c28ef81974f9b1f8e65eaba4397508e686d9f..00c25fda85a2af65ed9c4b5e615c97afc59e5fa9 100644 (file)
@@ -226,3 +226,4 @@ iwlwifi-add-rs_rate_scale_clear_tbl_windows-helper-function.patch
 iwlwifi-mvm-rs-clear-per-rate-stats-when-aggregation-changes.patch
 media-v4l2-ov7670-fix-a-wrong-index-potentially-oopsing-the-kernel-from-user-space.patch
 media-v4l2-fix-vidioc_create_bufs-in-64-32-bit-compatibility-mode.patch
+arm64-use-cpu_online_mask-when-using-forced-irq_set_affinity.patch