Added thread group identification to c0 and libl4

tgid will be used when threads will be created in same address space.
This commit is contained in:
Bahadir Balban
2008-09-09 15:39:56 +03:00
parent 89d774f7fa
commit 002fe79a54
6 changed files with 17 additions and 0 deletions

View File

@@ -51,6 +51,7 @@ typedef struct arm_context {
struct task_ids {
l4id_t tid;
l4id_t spid;
l4id_t tgid;
};
struct ktcb {
@@ -70,6 +71,7 @@ struct ktcb {
/* Thread information */
l4id_t tid; /* Global thread id */
l4id_t spid; /* Global space id */
l4id_t tgid; /* Global thread group id */
/* Flags to hint scheduler on future task state */
unsigned int schedfl;
@@ -140,14 +142,17 @@ static inline void set_task_ids(struct ktcb *task, struct task_ids *ids)
{
task->tid = ids->tid;
task->spid = ids->spid;
task->tgid = ids->tgid;
}
#define THREAD_IDS_MAX 1024
#define SPACE_IDS_MAX 1024
#define TGROUP_IDS_MAX 1024
extern struct id_pool *thread_id_pool;
extern struct id_pool *space_id_pool;
extern struct id_pool *tgroup_id_pool;
#endif /* __TCB_H__ */

View File

@@ -71,6 +71,8 @@ int sys_getid(syscall_context_t *regs)
ids->tid = this->tid;
ids->spid = this->spid;
ids->tgid = this->tgid;
return 0;
}

View File

@@ -175,6 +175,12 @@ out:
if ((ids->spid = id_get(space_id_pool,
ids->spid)) < 0)
ids->spid = id_new(space_id_pool);
/* It also gets a thread group id */
if ((ids->tgid = id_get(tgroup_id_pool,
ids->tgid)) < 0)
ids->tgid = id_new(tgroup_id_pool);
}
/* Set all ids */

View File

@@ -10,6 +10,7 @@
/* ID pools for threads and spaces. */
struct id_pool *thread_id_pool;
struct id_pool *space_id_pool;
struct id_pool *tgroup_id_pool;
/* Hash table for all existing tasks */
struct list_head global_task_list;

View File

@@ -331,8 +331,10 @@ void init_tasks()
/* Initialise thread and space id pools */
thread_id_pool = id_pool_new_init(THREAD_IDS_MAX);
space_id_pool = id_pool_new_init(SPACE_IDS_MAX);
tgroup_id_pool = id_pool_new_init(TGROUP_IDS_MAX);
ids.tid = id_new(thread_id_pool);
ids.spid = id_new(space_id_pool);
ids.tgid = id_new(tgroup_id_pool);
/* Initialise the global task list head */
INIT_LIST_HEAD(&global_task_list);

View File

@@ -5,6 +5,7 @@
struct task_ids {
int tid;
int spid;
int tgid;
};
#include <l4/arch/arm/types.h>