On Mon, 2012-10-29 at 16:27 -0400, Steven Rostedt wrote: > plain text document attachment > (0010-nohz-cpuset-Restart-the-tick-if-printk-needs-it.patch) > From: Frederic Weisbecker <fweis...@gmail.com> > > If we are in nohz adaptive mode and printk is called, the tick is > missing to wake up the logger. We need to restart the tick when that > happens. Do this asynchronously by issuing a tick restart self IPI > to avoid deadlocking with the current random locking chain. > > Signed-off-by: Frederic Weisbecker <fweis...@gmail.com> > Cc: Alessio Igor Bogani <abog...@kernel.org> > Cc: Andrew Morton <a...@linux-foundation.org> > Cc: Avi Kivity <a...@redhat.com> > Cc: Chris Metcalf <cmetc...@tilera.com> > Cc: Christoph Lameter <c...@linux.com> > Cc: Daniel Lezcano <daniel.lezc...@linaro.org> > Cc: Geoff Levand <ge...@infradead.org> > Cc: Gilad Ben Yossef <gi...@benyossef.com> > Cc: Hakan Akkan <hakanak...@gmail.com> > Cc: Ingo Molnar <mi...@kernel.org> > Cc: Kevin Hilman <khil...@ti.com> > Cc: Max Krasnyansky <m...@qualcomm.com> > Cc: Paul E. McKenney <paul...@linux.vnet.ibm.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Stephen Hemminger <shemmin...@vyatta.com> > Cc: Steven Rostedt <rost...@goodmis.org> > Cc: Sven-Thorsten Dietrich <thebigcorporat...@gmail.com> > Cc: Thomas Gleixner <t...@linutronix.de> > --- > kernel/printk.c | 15 ++++++++++++++- > 1 file changed, 14 insertions(+), 1 deletion(-) > > diff --git a/kernel/printk.c b/kernel/printk.c > index 2d607f4..bf9048d 100644 > --- a/kernel/printk.c > +++ b/kernel/printk.c > @@ -42,6 +42,7 @@ > #include <linux/notifier.h> > #include <linux/rculist.h> > #include <linux/poll.h> > +#include <linux/cpuset.h> > > #include <asm/uaccess.h> > > @@ -1977,8 +1978,20 @@ int printk_needs_cpu(int cpu) > > void wake_up_klogd(void) > { > - if (waitqueue_active(&log_wait)) > + unsigned long flags; > + > + if (waitqueue_active(&log_wait)) { > this_cpu_or(printk_pending, PRINTK_PENDING_WAKEUP); > + /* Make it visible from any interrupt from now */ > + barrier(); > + /* > + * It's safe to check that even if interrupts are not disabled.
Probably need to at least disable preemption. I don't see any requirement that wake_up_klogd() needs to be called with preemption disabled. The this_cpu_or() doesn't care which CPU it triggers, but the enabling of nohz does. -- Steve > + * If we enable nohz adaptive mode concurrently, we'll see the > + * printk_pending value and thus keep a periodic tick behaviour. > + */ > + if (cpuset_adaptive_nohz()) > + smp_cpuset_update_nohz(smp_processor_id()); > + } > } > > static void console_cont_flush(char *text, size_t size) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/