Browse Source

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>
Linus Torvalds 17 năm trước cách đây
mục cha
commit
92896bd9fd
1 tập tin đã thay đổi với 4 bổ sung0 xóa
  1. 4 0
      kernel/time/timekeeping.c

+ 4 - 0
kernel/time/timekeeping.c

@@ -191,8 +191,12 @@ static void change_clocksource(void)
 
 
 	tick_clock_notify();
 	tick_clock_notify();
 
 
+	/*
+	 * We're holding xtime lock and waking up klogd would deadlock
+	 * us on enqueue.  So no printing!
 	printk(KERN_INFO "Time: %s clocksource has been installed.\n",
 	printk(KERN_INFO "Time: %s clocksource has been installed.\n",
 	       clock->name);
 	       clock->name);
+	 */
 }
 }
 #else
 #else
 static inline void change_clocksource(void) { }
 static inline void change_clocksource(void) { }