]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] set TASK_RUNNING in yield()
authorAndrew Morton <akpm@zip.com.au>
Thu, 4 Jul 2002 15:31:00 +0000 (08:31 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Thu, 4 Jul 2002 15:31:00 +0000 (08:31 -0700)
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.

drivers/net/e100/e100.h
fs/buffer.c
include/linux/sched.h
kernel/ksyms.c
kernel/sched.c
kernel/softirq.c
kernel/suspend.c
mm/page_alloc.c

index 107a7a84cf3afe61de6db8d17d23221ae724cd8c..9e6b5d3d4e26efecf8b6cb44c3ada24ceed7db78 100644 (file)
@@ -1031,14 +1031,6 @@ extern unsigned char e100_selftest(struct e100_private *bdp, u32 *st_timeout,
 extern unsigned char e100_get_link_state(struct e100_private *bdp);
 extern unsigned char e100_wait_scb(struct e100_private *bdp);
 
-#ifndef yield
-#define yield()                                        \
-        do {                                   \
-                current->policy |= SCHED_YIELD;        \
-                schedule();                    \
-        } while (0)                                     
-#endif
-
 extern void e100_deisolate_driver(struct e100_private *bdp,
                                  u8 recover, u8 full_reset);
 extern unsigned char e100_hw_reset_recover(struct e100_private *bdp,
index 6ba5de4d2051512946c2a1c9eb8264f03ef4b388..5558b4e7dde9decf6fbdbaa4f8d675dfeb31ba7e 100644 (file)
@@ -494,7 +494,6 @@ static void free_more_memory(void)
        wakeup_bdflush();
        try_to_free_pages(zone, GFP_NOFS, 0);
        blk_run_queues();
-       __set_current_state(TASK_RUNNING);
        yield();
 }
 
index 9b5af2cc11d2562185b558721eba4136c7954a09..29410b021b6c5f799ee1340d3b7b01ba615c5413 100644 (file)
@@ -418,8 +418,7 @@ extern int task_prio(task_t *p);
 extern int task_nice(task_t *p);
 extern int idle_cpu(int cpu);
 
-asmlinkage long sys_sched_yield(void);
-#define yield() sys_sched_yield()
+void yield(void);
 
 /*
  * The default (Linux) execution domain.
index e88333d0c08be50b8e49dbcc8269df63e6e4537f..65bc2fcac1731bd6c09f13df4f03f6108af6b34a 100644 (file)
@@ -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);
index 11ede675025f5e80b61fe76287a9ef10aa15ff95..8dfe1941e7e04be9dfe6d9c753dd1e443ff16285 100644 (file)
@@ -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;
index 3f233a3b3844d2255f51af8ff63f68c864557baa..04f666d0e02b4872cd9aeb588f36fe772b6f57d1 100644 (file)
@@ -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));
index 12e5b0f01f57cfe64be77f120a43b11246c1e4fa..f4f389c566b4e89b2c5a7553176fc4face8bd5f0 100644 (file)
@@ -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 );
index cf914bd8180b115e95cd7750aca0eab766a5bd18..4d50db51b1b627127f45f862410432e59cb9fd93 100644 (file)
@@ -441,7 +441,6 @@ nopage:
                goto nopage;
 
        /* Yield for kswapd, and try again */
-       __set_current_state(TASK_RUNNING);
        yield();
        goto rebalance;
 }