mirror of
https://github.com/drasko/codezero.git
synced 2026-01-13 19:33:15 +01:00
Environment is backed by a special per-task file maintained by mm0 for each task. This file is filled in by the env pager, by simple copying of env data into the faulty page upon a fault. UTCB and all anon regions (stack) could use the same scheme. Fixed IS_ERR(x) to accept negative values that are above -1000 for errors. This protects against false positives for pointers such as 0xE0000000. modified: include/l4/generic/scheduler.h modified: include/l4/macros.h modified: src/arch/arm/exception.c modified: tasks/fs0/include/linker.lds modified: tasks/libl4/src/init.c modified: tasks/libposix/shm.c new file: tasks/mm0/include/env.h modified: tasks/mm0/include/file.h new file: tasks/mm0/include/lib/addr.h deleted: tasks/mm0/include/lib/vaddr.h modified: tasks/mm0/include/task.h new file: tasks/mm0/include/utcb.h new file: tasks/mm0/src/env.c modified: tasks/mm0/src/fault.c modified: tasks/mm0/src/file.c modified: tasks/mm0/src/init.c new file: tasks/mm0/src/lib/addr.c modified: tasks/mm0/src/lib/idpool.c deleted: tasks/mm0/src/lib/vaddr.c modified: tasks/mm0/src/mmap.c modified: tasks/mm0/src/shm.c modified: tasks/mm0/src/task.c new file: tasks/mm0/src/utcb.c modified: tasks/test0/include/linker.lds
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
/*
|
|
* Scheduler and runqueue API definitions.
|
|
*
|
|
* Copyright (C) 2007 Bahadir Balban
|
|
*/
|
|
#ifndef __SCHEDULER_H__
|
|
#define __SCHEDULER_H__
|
|
|
|
#include <l4/generic/tcb.h>
|
|
#include INC_SUBARCH(mm.h)
|
|
#include INC_GLUE(memory.h)
|
|
|
|
/* Ticks per second, try ticks = 1000 + timeslice = 1 for regressed preemption test. */
|
|
#define HZ 10
|
|
#define TASK_TIMESLICE_DEFAULT 500
|
|
/* #define TASK_TIMESLICE_DEFAULT (HZ/100)*/
|
|
|
|
static inline struct ktcb *current_task(void)
|
|
{
|
|
register u32 stack asm("sp");
|
|
return (struct ktcb *)(stack & (~PAGE_MASK));
|
|
}
|
|
|
|
#define current current_task()
|
|
#define need_resched (current->ts_need_resched)
|
|
|
|
/* Flags set by kernel to direct the scheduler about future task state. */
|
|
#define __SCHED_FL_SUSPEND 1
|
|
#define SCHED_FL_SUSPEND (1 << __SCHED_FL_SUSPEND)
|
|
#define __SCHED_FL_RESUME 2
|
|
#define SCHED_FL_RESUME (1 << __SCHED_FL_RESUME)
|
|
#define __SCHED_FL_SLEEP 3
|
|
#define SCHED_FL_SLEEP (1 << __SCHED_FL_SLEEP)
|
|
#define SCHED_FL_MASK (SCHED_FL_SLEEP | SCHED_FL_RESUME \
|
|
| SCHED_FL_SUSPEND)
|
|
|
|
#define __IPC_FL_WAIT 4
|
|
#define IPC_FL_WAIT (1 << __IPC_FL_WAIT)
|
|
#define IPC_FL_MASK IPC_FL_WAIT
|
|
|
|
void sched_runqueue_init(void);
|
|
void sched_start_task(struct ktcb *task);
|
|
void sched_resume_task(struct ktcb *task);
|
|
void sched_suspend_task(struct ktcb *task);
|
|
void sched_process_post_ipc(struct ktcb *, struct ktcb *);
|
|
void sched_tell(struct ktcb *task, unsigned int flags);
|
|
void scheduler_start(void);
|
|
void sched_yield(void);
|
|
void schedule(void);
|
|
/* Asynchronous notifications to scheduler */
|
|
void sched_notify_resume(struct ktcb *task);
|
|
void sched_notify_sleep(struct ktcb *task);
|
|
void sched_notify_suspend(struct ktcb *task);
|
|
|
|
#endif /* __SCHEDULER_H__ */
|