l4_exit() works with a reasonable sched_die_sync()

Next: Killing other tasks more cleanly, and waiting on children
This commit is contained in:
Bahadir Balban
2009-10-29 22:44:58 +02:00
parent 73a27f2269
commit a6c61e05b9
9 changed files with 121 additions and 16 deletions

View File

@@ -60,6 +60,7 @@ extern struct scheduler scheduler;
void sched_init_runqueue(struct runqueue *rq);
void sched_init_task(struct ktcb *task, int priority);
void sched_prepare_sleep(void);
void sched_die_sync(void);
void sched_suspend_sync(void);
void sched_suspend_async(void);
void sched_resume_sync(struct ktcb *task);

View File

@@ -64,6 +64,9 @@ struct ktcb {
l4id_t tid; /* Global thread id */
l4id_t tgid; /* Global thread group id */
/* Other related threads */
l4id_t pagerid;
/* Flags to indicate various task status */
unsigned int flags;
@@ -73,11 +76,9 @@ struct ktcb {
/* Lock for blocking thread state modifications via a syscall */
struct mutex thread_control_lock;
/* Other related threads */
l4id_t pagerid;
u32 ts_need_resched; /* Scheduling flag */
enum task_state state;
struct link task_list; /* Global task list. */
/* UTCB related, see utcb.txt in docs */
@@ -102,9 +103,7 @@ struct ktcb {
struct pager *pager;
/* Capability lists */
struct cap_list cap_list; /* Own private capabilities */
struct cap_list tgroup_cap_list; /* Caps shared with thread group */
struct cap_list pager_cap_list; /* Caps shared with paged children */
struct cap_list cap_list; /* Own private capabilities */
/* Fields for ipc rendezvous */
struct waitqueue_head wqh_recv;