From b84e872f616fe496961b7b8a9eeb672cf7fb8025 Mon Sep 17 00:00:00 2001 From: bernie Date: Tue, 21 Feb 2006 16:06:55 +0000 Subject: [PATCH] Cleanup/update process scheduling. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@536 38d2e660-2303-0410-9eaa-f027e97ec537 --- kern/proc.c | 33 +++++++++++++++++++-------------- kern/proc.h | 5 ++++- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/kern/proc.c b/kern/proc.c index 7fe9c70a..24f93d48 100755 --- a/kern/proc.c +++ b/kern/proc.c @@ -17,6 +17,9 @@ /*#* *#* $Log$ + *#* Revision 1.28 2006/02/21 16:06:55 bernie + *#* Cleanup/update process scheduling. + *#* *#* Revision 1.27 2005/11/04 16:20:02 bernie *#* Fix reference to README.devlib in header. *#* @@ -100,9 +103,9 @@ #include "proc_p.h" #include "proc.h" +//#include "hw.h" +#include #include -#include "event.h" -#include "hw.h" #include #include /* ARCH_EMUL */ #include /* ABS() */ @@ -191,7 +194,7 @@ void proc_init(void) * \return Process structure of new created process * if successful, NULL otherwise. */ -struct Process *proc_new_with_name(UNUSED(const char*, name), void (*entry)(void), iptr_t data, size_t stacksize, cpustack_t *stack_base) +struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(void), iptr_t data, size_t stacksize, cpustack_t *stack_base) { Process *proc; size_t i; @@ -202,9 +205,9 @@ struct Process *proc_new_with_name(UNUSED(const char*, name), void (*entry)(void #if (ARCH & ARCH_EMUL) /* Ignore stack provided by caller and use the large enough default instead. */ - stack_base = (cpustack_t *)StackFreeList.head; - REMOVE((Node *)stack_base); - stacksize = DEF_STACKSIZE; + stack_base = (cpustack_t *)LIST_HEAD(&StackFreeList); + REMOVE(LIST_HEAD(&StackFreeList)); + stacksize = CONFIG_KERN_DEFSTACKSIZE; #elif CONFIG_KERN_HEAP /* Did the caller provide a stack for us? */ if (!stack_base) @@ -360,8 +363,13 @@ void proc_schedule(void) */ void proc_exit(void) { +#if CONFIG_KERN_MONITOR + monitor_remove(CurrentProcess); +#endif + #if CONFIG_KERN_HEAP - /* The following code is BROKEN. + /* + * The following code is BROKEN. * We are freeing our own stack before entering proc_schedule() * BAJO: A correct fix would be to rearrange the scheduler with * an additional parameter which frees the old stack/process @@ -373,21 +381,18 @@ void proc_exit(void) #endif #if (ARCH & ARCH_EMUL) -#error This is wrong +#warning This is wrong /* Reinsert process stack in free list */ ADDHEAD(&StackFreeList, (Node *)(CurrentProcess->stack - - (DEF_STACKSIZE / sizeof(cpustack_t)))); + - (CONFIG_KERN_DEFSTACKSIZE / sizeof(cpustack_t)))); - /* NOTE: At this point the first two words of what used + /* + * NOTE: At this point the first two words of what used * to be our stack contain a list node. From now on, we * rely on the compiler not reading/writing the stack. */ #endif /* ARCH_EMUL */ -#if CONFIG_KERN_MONITOR - monitor_remove(CurrentProcess); -#endif - CurrentProcess = NULL; proc_schedule(); /* not reached */ diff --git a/kern/proc.h b/kern/proc.h index 8378b133..386594e0 100755 --- a/kern/proc.h +++ b/kern/proc.h @@ -15,6 +15,9 @@ /*#* *#* $Log$ + *#* Revision 1.11 2006/02/21 16:06:55 bernie + *#* Cleanup/update process scheduling. + *#* *#* Revision 1.10 2005/11/04 16:20:02 bernie *#* Fix reference to README.devlib in header. *#* @@ -43,7 +46,7 @@ #include #include -#include +#include /* Fwd decl */ struct Process; -- 2.25.1