aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-03-24 14:07:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-03-24 14:07:15 -0400
commit92896bd9fd75b1c993b92874d339a8088bb75560 (patch)
tree2bd8bc5a8c8ee10a4b1fd62804281d2b486067f0
parentd2532dd20a126020de407c1c2476a75b53fce7ac (diff)
Don't 'printk()' while holding xtime lock for writing
The printk() can deadlock because it can wake up klogd(), and task enqueueing will try to read the time in order to set a hrtimer. Reported-by: Marcin Slusarz <marcin.slusarz@gmail.com> Debugged-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--kernel/time/timekeeping.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 671af612b768..a3fa587c350c 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -191,8 +191,12 @@ static void change_clocksource(void)
191 191
192 tick_clock_notify(); 192 tick_clock_notify();
193 193
194 /*
195 * We're holding xtime lock and waking up klogd would deadlock
196 * us on enqueue. So no printing!
194 printk(KERN_INFO "Time: %s clocksource has been installed.\n", 197 printk(KERN_INFO "Time: %s clocksource has been installed.\n",
195 clock->name); 198 clock->name);
199 */
196} 200}
197#else 201#else
198static inline void change_clocksource(void) { } 202static inline void change_clocksource(void) { }