diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-12-07 13:02:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-12-07 13:02:47 -0500 |
commit | 8ced5f69e4bc09adcc6442e090e2e64c197246cf (patch) | |
tree | d431ff185719579c6a786a97adf6def6a849751c /kernel/sched.c | |
parent | 5f9fa8a62d6a98f5cb2ee2e00b85bfe95e45888d (diff) |
sched: enable early use of sched_clock()
some platforms have sched_clock() implementations that cannot be called
very early during wakeup. If it's called it might hang or crash in hard
to debug ways. So only call update_rq_clock() [which calls sched_clock()]
if sched_init() has already been called. (rq->idle is NULL before the
scheduler is initialized.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 67d9d1799d86..c6e551de795b 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -488,7 +488,12 @@ unsigned long long cpu_clock(int cpu) | |||
488 | 488 | ||
489 | local_irq_save(flags); | 489 | local_irq_save(flags); |
490 | rq = cpu_rq(cpu); | 490 | rq = cpu_rq(cpu); |
491 | update_rq_clock(rq); | 491 | /* |
492 | * Only call sched_clock() if the scheduler has already been | ||
493 | * initialized (some code might call cpu_clock() very early): | ||
494 | */ | ||
495 | if (rq->idle) | ||
496 | update_rq_clock(rq); | ||
492 | now = rq->clock; | 497 | now = rq->clock; |
493 | local_irq_restore(flags); | 498 | local_irq_restore(flags); |
494 | 499 | ||