summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorPavankumar Kondeti <pkondeti@codeaurora.org>2018-12-03 15:05:26 +0530
committerGeorg Veichtlbauer <georg@vware.at>2023-07-16 12:47:42 +0200
commit602bf4096dabb119eb3e176353c4607030fbb1c7 (patch)
tree0c78c06af68f2f96467242e9ac575d945fd1df49 /kernel
parent9209b5556f6acc6b2c0c29135db247f90a3eb78e (diff)
genirq: Honour IRQ's affinity hint during migration
An IRQ affinity is broken during hotplug/isolation when there are no online and un-isolated CPUs in the current affinity mask. An online and un-isolated CPU from the irq_default_affinity mask (i.e /proc/irq/default_smp_affinity) is used as the current affinity. However Individual IRQs can have their affinity hint set via irq_set_affinity_hint() API. When such hint is available, use it instead of the irq_default_affinity which is a system level setting. Change-Id: I53a537582ec4e1aed0c59b49f4fd5b6ca7c0c332 Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/irq/cpuhotplug.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/irq/cpuhotplug.c b/kernel/irq/cpuhotplug.c
index 4684b7595e63..9fad2dc50452 100644
--- a/kernel/irq/cpuhotplug.c
+++ b/kernel/irq/cpuhotplug.c
@@ -36,6 +36,10 @@ static bool migrate_one_irq(struct irq_desc *desc)
affinity = &available_cpus;
if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
+ const struct cpumask *default_affinity;
+
+ default_affinity = desc->affinity_hint ? : irq_default_affinity;
+
/*
* The order of preference for selecting a fallback CPU is
*
@@ -45,9 +49,9 @@ static bool migrate_one_irq(struct irq_desc *desc)
*/
cpumask_andnot(&available_cpus, cpu_online_mask,
cpu_isolated_mask);
- if (cpumask_intersects(&available_cpus, irq_default_affinity))
+ if (cpumask_intersects(&available_cpus, default_affinity))
cpumask_and(&available_cpus, &available_cpus,
- irq_default_affinity);
+ default_affinity);
else if (cpumask_empty(&available_cpus))
affinity = cpu_online_mask;