#include <cpu/types.h>
#include <cpu/attr.h>
#include <cfg/debug.h>
+#include <cfg/module.h>
#include <cfg/arch_config.h> /* ARCH_EMUL */
#include <cfg/macros.h> /* ABS() */
#endif
}
+MOD_DEFINE(proc);
void proc_init(void)
{
/* Make sure the assembly routine is up-to-date with us */
ASSERT(asm_switch_version() == 1);
+ MOD_INIT(proc);
}
*/
void proc_schedule(void)
{
- /* This function must not have any "auto" variables, otherwise
- * the compiler might put them on the stack of the process
- * being switched out.
- */
- static struct Process *old_process;
- static cpuflags_t flags;
+ struct Process *old_process;
+ cpuflags_t flags;
/* Remember old process to save its context later */
old_process = CurrentProcess;
*/
if (CurrentProcess != old_process)
{
- static cpustack_t *dummy;
+ cpustack_t *dummy;
#if CONFIG_KERN_PREEMPTIVE
/* Reset quantum for this process */
*/
void proc_switch(void)
{
- /* Just like proc_schedule, this function must not have auto variables. */
- static cpuflags_t flags;
+ cpuflags_t flags;
IRQ_SAVE_DISABLE(flags);
SCHED_ENQUEUE(CurrentProcess);