nohz: nohz full depends on irq work self IPI support
[sfrench/cifs-2.6.git] / kernel / time / tick-sched.c
index eb4af016ac65ff4fe6cf07b793ff8a0f77f6c074..5a9ff243588cc20a4019d4af496f9a9893d6cb8a 100644 (file)
@@ -365,6 +365,20 @@ void __init tick_nohz_init(void)
                return;
        }
 
+       /*
+        * Full dynticks uses irq work to drive the tick rescheduling on safe
+        * locking contexts. But then we need irq work to raise its own
+        * interrupts to avoid circular dependency on the tick
+        */
+       if (!arch_irq_work_has_interrupt()) {
+               pr_warning("NO_HZ: Can't run full dynticks because arch doesn't "
+                          "support irq work self-IPIs\n");
+               cpumask_clear(tick_nohz_full_mask);
+               cpumask_copy(housekeeping_mask, cpu_possible_mask);
+               tick_nohz_full_running = false;
+               return;
+       }
+
        cpu = smp_processor_id();
 
        if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) {