summaryrefslogtreecommitdiffstats
path: root/kernel/irq_work.c
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2012-11-15 18:52:44 +0100
committerFrederic Weisbecker <fweisbec@gmail.com>2012-11-17 19:31:16 +0100
commit8aa2accee41f7045dc904fa41d4475b2f6ffae3e (patch)
tree506c64cc0ceefb1265de57985000fd9cb61b1418 /kernel/irq_work.c
parentirq_work: Flush work on CPU_DYING (diff)
downloadlinux-8aa2accee41f7045dc904fa41d4475b2f6ffae3e.tar.xz
linux-8aa2accee41f7045dc904fa41d4475b2f6ffae3e.zip
irq_work: Warn if there's still work on cpu_down
If we are in nohz and there's still irq_work to be done when the idle task is about to go offline, give a nasty warning. Everything should have been flushed from the CPU_DYING notifier already. Further attempts to enqueue an irq_work are buggy because irqs are disabled by __cpu_disable(). The best we can do is to report the issue to the user. Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'kernel/irq_work.c')
-rw-r--r--kernel/irq_work.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/kernel/irq_work.c b/kernel/irq_work.c
index 4ed17490f629..480f74715ba9 100644
--- a/kernel/irq_work.c
+++ b/kernel/irq_work.c
@@ -109,6 +109,9 @@ bool irq_work_needs_cpu(void)
if (llist_empty(this_list))
return false;
+ /* All work should have been flushed before going offline */
+ WARN_ON_ONCE(cpu_is_offline(smp_processor_id()));
+
return true;
}