proc_switch(): rename from proc_schedule(). Split out the real cooperative scheduler.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 25 Aug 2008 19:18:20 +0000 (19:18 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Mon, 25 Aug 2008 19:18:20 +0000 (19:18 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1700 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/kern/coop.c
bertos/kern/preempt.c
bertos/kern/proc.c

index 4b2e6b88a5c303598391e776789e4007f67e7681..dd3aee211d82db28b7123194247480efda92d541 100644 (file)
@@ -63,18 +63,14 @@ EXTERN_C void asm_switch_context(cpustack_t **new_sp, cpustack_t **save_sp);
  * System scheduler: pass CPU control to the next process in
  * the ready queue.
  */
-void proc_schedule(void)
+static void proc_schedule(void)
 {
-       struct Process *old_process;
        cpuflags_t flags;
 
        ATOMIC(LIST_ASSERT_VALID(&ProcReadyList));
        ASSERT_USER_CONTEXT();
        ASSERT_IRQ_ENABLED();
 
-       /* Remember old process to save its context later */
-       old_process = CurrentProcess;
-
        /* Poll on the ready queue for the first ready process */
        IRQ_SAVE_DISABLE(flags);
        while (!(CurrentProcess = (struct Process *)list_remHead(&ProcReadyList)))
@@ -100,6 +96,14 @@ void proc_schedule(void)
                IRQ_DISABLE;
        }
        IRQ_RESTORE(flags);
+}
+
+void proc_switch(void)
+{
+       /* Remember old process to save its context later */
+       const Process *old_process = CurrentProcess;
+
+       proc_schedule();
 
        /*
         * Optimization: don't switch contexts when the active
@@ -111,8 +115,8 @@ void proc_schedule(void)
 
                #if CONFIG_KERN_MONITOR
                        LOG_INFO("Switch from %p(%s) to %p(%s)\n",
-                               old_process,    old_process ? old_process->monitor.name : "NONE",
-                               CurrentProcess, CurrentProcess->monitor.name);
+                               old_process,    proc_name(old_process),
+                               CurrentProcess, proc_currentName());
                #endif
 
                /* Save context of old process and switch to new process. If there is no
@@ -135,6 +139,5 @@ void proc_schedule(void)
 void proc_yield(void)
 {
        ATOMIC(SCHED_ENQUEUE(CurrentProcess));
-
-       proc_schedule();
+       proc_switch();
 }
index af9555d089ba178eabfefde97e8490b09032ad6d..e24da145ba1c38ee09fc9363060c9bb0e46aec39 100644 (file)
@@ -73,7 +73,7 @@ static Timer preempt_timer;
 void idle_init(void);
 
 
-void proc_preempt(void)
+void proc_schedule(void)
 {
        IRQ_DISABLE;
 
@@ -87,7 +87,7 @@ void proc_preempt(void)
        TRACEMSG("launching %p:%s", CurrentProcess, proc_currentName());
 }
 
-void proc_preempt_timer(UNUSED_ARG(void *, param))
+void proc_preempt(UNUSED_ARG(void *, param)
 {
        if (!preempt_forbid_cnt)
        {
@@ -104,7 +104,7 @@ void proc_preempt_timer(UNUSED_ARG(void *, param))
 // FIXME: this still break havocs, probably because of some reentrancy issue
 #if 0
                SCHED_ENQUEUE(CurrentProcess);
-               proc_preempt();
+               proc_schedule();
 #endif
                #if CONFIG_KERN_PRI
                        }
@@ -117,7 +117,7 @@ void proc_preempt_timer(UNUSED_ARG(void *, param))
        timer_add(&preempt_timer);
 }
 
-void proc_schedule(void)
+void proc_switch(void)
 {
        ATOMIC(LIST_ASSERT_VALID(&ProcReadyList));
        TRACEMSG("%p:%s", CurrentProcess, proc_currentName());
@@ -139,7 +139,7 @@ void proc_yield(void)
        SCHED_ENQUEUE(CurrentProcess);
        IRQ_ENABLE;
 
-       proc_schedule();
+       proc_switch();
 }
 
 void proc_entry(void (*user_entry)(void))
index 577f0db43e2d8a6925b55e09229c5461d69a715d..9137dfba9d97af2ecde7b927eee3119750bcf987 100644 (file)
@@ -30,8 +30,7 @@
  * Copyright 1999, 2000, 2001, 2008 Bernie Innocenti <bernie@codewiz.org>
  * -->
  *
- * \brief Simple realtime multitasking scheduler.
- *        Context switching is only done cooperatively.
+ * \brief Simple cooperative multitasking scheduler.
  *
  * \version $Id$
  * \author Bernie Innocenti <bernie@codewiz.org>
@@ -354,7 +353,7 @@ void proc_exit(void)
 #endif /* ARCH_EMUL */
 
        CurrentProcess = NULL;
-       proc_schedule();
+       proc_switch();
        /* not reached */
 }