diff options
author | Paul Mackerras <paulus@samba.org> | 2008-03-03 21:31:09 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-03-03 21:31:09 +1100 |
commit | 3cecdda3f169f22f324f78fd544beee68e3cc6a4 (patch) | |
tree | e7c2995ddc2690d1be695a1525bcd16d3965548d /kernel/sched.c | |
parent | b9c64498f53e0f4d90eec03048f73ac215bb6f79 (diff) | |
parent | da40451bba23b51eaca4170a095891646ce72104 (diff) | |
download | kernel-crypto-3cecdda3f169f22f324f78fd544beee68e3cc6a4.tar.gz kernel-crypto-3cecdda3f169f22f324f78fd544beee68e3cc6a4.tar.xz kernel-crypto-3cecdda3f169f22f324f78fd544beee68e3cc6a4.zip |
Merge branch 'for-2.6.25' of master.kernel.org:/pub/scm/linux/kernel/git/arnd/cell-2.6 into merge
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index b387a8de26a..f06950c8a6c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -668,6 +668,8 @@ const_debug unsigned int sysctl_sched_nr_migrate = 32; */ unsigned int sysctl_sched_rt_period = 1000000; +static __read_mostly int scheduler_running; + /* * part of the period that we allow rt tasks to run in us. * default: 0.95s @@ -689,14 +691,16 @@ unsigned long long cpu_clock(int cpu) unsigned long flags; struct rq *rq; - local_irq_save(flags); - rq = cpu_rq(cpu); /* * Only call sched_clock() if the scheduler has already been * initialized (some code might call cpu_clock() very early): */ - if (rq->idle) - update_rq_clock(rq); + if (unlikely(!scheduler_running)) + return 0; + + local_irq_save(flags); + rq = cpu_rq(cpu); + update_rq_clock(rq); now = rq->clock; local_irq_restore(flags); @@ -3885,7 +3889,7 @@ pick_next_task(struct rq *rq, struct task_struct *prev) asmlinkage void __sched schedule(void) { struct task_struct *prev, *next; - long *switch_count; + unsigned long *switch_count; struct rq *rq; int cpu; @@ -7284,6 +7288,8 @@ void __init sched_init(void) * During early bootup we pretend to be a normal task: */ current->sched_class = &fair_sched_class; + + scheduler_running = 1; } #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP |