diff options
| author | Andrew Morton <akpm@zip.com.au> | 2002-07-04 08:31:00 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-07-04 08:31:00 -0700 |
| commit | b5b6fa5267d4e0da8b2f46904cec4d4f11c45d2e (patch) | |
| tree | 4309a6321e8eb764f479f92966f173543c5da064 /kernel | |
| parent | b2bd3a26bbf30c69062d45de4622e7e5b412ad16 (diff) | |
[PATCH] set TASK_RUNNING in yield()
It seems that the yield() macro requires state TASK_RUNNING, but
practically none of the callers remember to do that.
The patch turns yield() into a real function which sets state
TASK_RUNNING before scheduling.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/ksyms.c | 2 | ||||
| -rw-r--r-- | kernel/sched.c | 6 | ||||
| -rw-r--r-- | kernel/softirq.c | 1 | ||||
| -rw-r--r-- | kernel/suspend.c | 3 |
4 files changed, 8 insertions, 4 deletions
diff --git a/kernel/ksyms.c b/kernel/ksyms.c index e88333d0c08b..65bc2fcac173 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -472,7 +472,7 @@ EXPORT_SYMBOL(schedule); EXPORT_SYMBOL(preempt_schedule); #endif EXPORT_SYMBOL(schedule_timeout); -EXPORT_SYMBOL(sys_sched_yield); +EXPORT_SYMBOL(yield); EXPORT_SYMBOL(__cond_resched); EXPORT_SYMBOL(set_user_nice); EXPORT_SYMBOL(task_nice); diff --git a/kernel/sched.c b/kernel/sched.c index 11ede675025f..8dfe1941e7e0 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -1453,6 +1453,12 @@ void __cond_resched(void) schedule(); } +void yield(void) +{ + set_current_state(TASK_RUNNING); + sys_sched_yield(); +} + asmlinkage long sys_sched_get_priority_max(int policy) { int ret = -EINVAL; diff --git a/kernel/softirq.c b/kernel/softirq.c index 3f233a3b3844..04f666d0e02b 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -262,7 +262,6 @@ void tasklet_kill(struct tasklet_struct *t) printk("Attempt to kill tasklet from interrupt\n"); while (test_and_set_bit(TASKLET_STATE_SCHED, &t->state)) { - current->state = TASK_RUNNING; do yield(); while (test_bit(TASKLET_STATE_SCHED, &t->state)); diff --git a/kernel/suspend.c b/kernel/suspend.c index 12e5b0f01f57..f4f389c566b4 100644 --- a/kernel/suspend.c +++ b/kernel/suspend.c @@ -237,8 +237,7 @@ int freeze_processes(void) todo++; } read_unlock(&tasklist_lock); - sys_sched_yield(); - schedule(); + yield(); if (time_after(jiffies, start_time + TIMEOUT)) { PRINTK( "\n" ); printk(KERN_ERR " stopping tasks failed (%d tasks remaining)\n", todo ); |
