69 lines
2.3 KiB
Diff
69 lines
2.3 KiB
Diff
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Fri, 25 May 2012 16:59:47 +0200
|
|
Subject: genirq: Add default affinity mask command line option
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patches-4.4.1-rt6.tar.xz
|
|
|
|
If we isolate CPUs, then we don't want random device interrupts on them. Even
|
|
w/o the user space irq balancer enabled we can end up with irqs on non boot
|
|
cpus and chasing newly requested interrupts is a tedious task.
|
|
|
|
Allow to restrict the default irq affinity mask.
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
---
|
|
Documentation/kernel-parameters.txt | 9 +++++++++
|
|
kernel/irq/irqdesc.c | 21 +++++++++++++++++++--
|
|
2 files changed, 28 insertions(+), 2 deletions(-)
|
|
|
|
--- a/Documentation/kernel-parameters.txt
|
|
+++ b/Documentation/kernel-parameters.txt
|
|
@@ -1629,6 +1629,15 @@ bytes respectively. Such letter suffixes
|
|
ip= [IP_PNP]
|
|
See Documentation/filesystems/nfs/nfsroot.txt.
|
|
|
|
+ irqaffinity= [SMP] Set the default irq affinity mask
|
|
+ Format:
|
|
+ <cpu number>,...,<cpu number>
|
|
+ or
|
|
+ <cpu number>-<cpu number>
|
|
+ (must be a positive range in ascending order)
|
|
+ or a mixture
|
|
+ <cpu number>,...,<cpu number>-<cpu number>
|
|
+
|
|
irqfixup [HW]
|
|
When an interrupt is not handled search all handlers
|
|
for it. Intended to get systems with badly broken
|
|
--- a/kernel/irq/irqdesc.c
|
|
+++ b/kernel/irq/irqdesc.c
|
|
@@ -24,10 +24,27 @@
|
|
static struct lock_class_key irq_desc_lock_class;
|
|
|
|
#if defined(CONFIG_SMP)
|
|
+static int __init irq_affinity_setup(char *str)
|
|
+{
|
|
+ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
|
|
+ cpulist_parse(str, irq_default_affinity);
|
|
+ /*
|
|
+ * Set at least the boot cpu. We don't want to end up with
|
|
+ * bugreports caused by random comandline masks
|
|
+ */
|
|
+ cpumask_set_cpu(smp_processor_id(), irq_default_affinity);
|
|
+ return 1;
|
|
+}
|
|
+__setup("irqaffinity=", irq_affinity_setup);
|
|
+
|
|
static void __init init_irq_default_affinity(void)
|
|
{
|
|
- alloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
|
|
- cpumask_setall(irq_default_affinity);
|
|
+#ifdef CONFIG_CPUMASK_OFFSTACK
|
|
+ if (!irq_default_affinity)
|
|
+ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
|
|
+#endif
|
|
+ if (cpumask_empty(irq_default_affinity))
|
|
+ cpumask_setall(irq_default_affinity);
|
|
}
|
|
#else
|
|
static void __init init_irq_default_affinity(void)
|