diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-24 14:07:15 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-03-24 14:07:15 -0400 |
| commit | 92896bd9fd75b1c993b92874d339a8088bb75560 (patch) | |
| tree | 2bd8bc5a8c8ee10a4b1fd62804281d2b486067f0 | |
| parent | d2532dd20a126020de407c1c2476a75b53fce7ac (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.c | 4 |
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 |
| 198 | static inline void change_clocksource(void) { } | 202 | static inline void change_clocksource(void) { } |
