HMP: Restrict irq_default_affinity to hmp_slow_cpu_mask
authorDietmar Eggemann <dietmar.eggemann@arm.com>
Thu, 16 Jan 2014 19:44:10 +0000 (19:44 +0000)
committerJon Medhurst <tixy@linaro.org>
Wed, 22 Jan 2014 09:50:45 +0000 (09:50 +0000)
This patch limits the default affinity mask for all irqs to the cluster of
the little cpus.

This patch has the positive side effect that an irq thread which has its
IRQTF_RUNTHREAD set inside irq_thread() -> irq_wait_for_interrupt() will
not overwrite its struct task_struct->cpus_allowed with a full cpu mask of
desc->irq_data.affinity in irq_thread_check_affinity() essentially reverting
patch "HMP: experimental: Force all rt tasks to start on little domain."
for this irq thread.

Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
kernel/irq/irqdesc.c

index 473b2b6eccb5e9515840e0b7b4db3d1695f81f6d..20ecfb0984e169cb8ffb2623fad484019b508d43 100644 (file)
@@ -36,11 +36,19 @@ static int __init irq_affinity_setup(char *str)
 }
 __setup("irqaffinity=", irq_affinity_setup);
 
+extern struct cpumask hmp_slow_cpu_mask;
+
 static void __init init_irq_default_affinity(void)
 {
 #ifdef CONFIG_CPUMASK_OFFSTACK
        if (!irq_default_affinity)
                zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
+#endif
+#ifdef CONFIG_SCHED_HMP
+       if (!cpumask_empty(&hmp_slow_cpu_mask)) {
+               cpumask_copy(irq_default_affinity, &hmp_slow_cpu_mask);
+               return;
+       }
 #endif
        if (cpumask_empty(irq_default_affinity))
                cpumask_setall(irq_default_affinity);