|
@@ -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)
|