Reimplemented kill/suspend

It seems to work fine except an undefined instruction is generated
from posix userspace occasionally
This commit is contained in:
Bahadir Balban
2009-10-30 21:34:10 +02:00
parent f3c0a38fa9
commit c3c6c10cf7
10 changed files with 114 additions and 157 deletions

View File

@@ -60,7 +60,8 @@ 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_pager_exit(void);
void sched_exit_sync(void);
void sched_suspend_sync(void);
void sched_suspend_async(void);
void sched_resume_sync(struct ktcb *task);

View File

@@ -29,6 +29,7 @@
#define TASK_SUSPENDING (1 << 1)
#define TASK_RESUMING (1 << 2)
#define TASK_EXITING (1 << 3)
#define TASK_PENDING_SIGNAL (TASK_SUSPENDING | TASK_EXITING)
/* Task states */
enum task_state {
@@ -80,8 +81,7 @@ struct ktcb {
enum task_state state;
struct link task_list; /* Global task list. */
struct link task_dead_list; /* List of dead children */
struct mutex task_dead_mutex; /* Dead children list mutex */
struct ktcb_list child_exit_list;
/* UTCB related, see utcb.txt in docs */
unsigned long utcb_address; /* Virtual ref to task's utcb area */
@@ -156,6 +156,7 @@ struct ktcb *tcb_alloc_init(void);
void tcb_delete(struct ktcb *tcb);
void ktcb_list_remove(struct ktcb *task, struct ktcb_list *ktcb_list);
void ktcb_list_add(struct ktcb *new, struct ktcb_list *ktcb_list);
void init_ktcb_list(struct ktcb_list *ktcb_list);
void task_update_utcb(struct ktcb *task);

View File

@@ -11,7 +11,6 @@ void thread_id_pool_init(void);
int thread_id_new(void);
int thread_id_del(int tid);
void thread_destroy_current(void);
void task_make_zombie(struct ktcb *task);
void thread_destroy(struct ktcb *);
#endif /* __GENERIC_THREAD_H__ */