mirror of
https://github.com/drasko/codezero.git
synced 2026-07-20 06:05:24 +02:00
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:
@@ -51,6 +51,7 @@ typedef struct arm_context {
|
|||||||
struct task_ids {
|
struct task_ids {
|
||||||
l4id_t tid;
|
l4id_t tid;
|
||||||
l4id_t spid;
|
l4id_t spid;
|
||||||
|
l4id_t tgid;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ktcb {
|
struct ktcb {
|
||||||
@@ -70,6 +71,7 @@ struct ktcb {
|
|||||||
/* Thread information */
|
/* Thread information */
|
||||||
l4id_t tid; /* Global thread id */
|
l4id_t tid; /* Global thread id */
|
||||||
l4id_t spid; /* Global space id */
|
l4id_t spid; /* Global space id */
|
||||||
|
l4id_t tgid; /* Global thread group id */
|
||||||
|
|
||||||
/* Flags to hint scheduler on future task state */
|
/* Flags to hint scheduler on future task state */
|
||||||
unsigned int schedfl;
|
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->tid = ids->tid;
|
||||||
task->spid = ids->spid;
|
task->spid = ids->spid;
|
||||||
|
task->tgid = ids->tgid;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define THREAD_IDS_MAX 1024
|
#define THREAD_IDS_MAX 1024
|
||||||
#define SPACE_IDS_MAX 1024
|
#define SPACE_IDS_MAX 1024
|
||||||
|
#define TGROUP_IDS_MAX 1024
|
||||||
|
|
||||||
|
|
||||||
extern struct id_pool *thread_id_pool;
|
extern struct id_pool *thread_id_pool;
|
||||||
extern struct id_pool *space_id_pool;
|
extern struct id_pool *space_id_pool;
|
||||||
|
extern struct id_pool *tgroup_id_pool;
|
||||||
|
|
||||||
#endif /* __TCB_H__ */
|
#endif /* __TCB_H__ */
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ int sys_getid(syscall_context_t *regs)
|
|||||||
|
|
||||||
ids->tid = this->tid;
|
ids->tid = this->tid;
|
||||||
ids->spid = this->spid;
|
ids->spid = this->spid;
|
||||||
|
ids->tgid = this->tgid;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,6 +175,12 @@ out:
|
|||||||
if ((ids->spid = id_get(space_id_pool,
|
if ((ids->spid = id_get(space_id_pool,
|
||||||
ids->spid)) < 0)
|
ids->spid)) < 0)
|
||||||
ids->spid = id_new(space_id_pool);
|
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 */
|
/* Set all ids */
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
/* ID pools for threads and spaces. */
|
/* ID pools for threads and spaces. */
|
||||||
struct id_pool *thread_id_pool;
|
struct id_pool *thread_id_pool;
|
||||||
struct id_pool *space_id_pool;
|
struct id_pool *space_id_pool;
|
||||||
|
struct id_pool *tgroup_id_pool;
|
||||||
|
|
||||||
/* Hash table for all existing tasks */
|
/* Hash table for all existing tasks */
|
||||||
struct list_head global_task_list;
|
struct list_head global_task_list;
|
||||||
|
|||||||
@@ -331,8 +331,10 @@ void init_tasks()
|
|||||||
/* Initialise thread and space id pools */
|
/* Initialise thread and space id pools */
|
||||||
thread_id_pool = id_pool_new_init(THREAD_IDS_MAX);
|
thread_id_pool = id_pool_new_init(THREAD_IDS_MAX);
|
||||||
space_id_pool = id_pool_new_init(SPACE_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.tid = id_new(thread_id_pool);
|
||||||
ids.spid = id_new(space_id_pool);
|
ids.spid = id_new(space_id_pool);
|
||||||
|
ids.tgid = id_new(tgroup_id_pool);
|
||||||
|
|
||||||
/* Initialise the global task list head */
|
/* Initialise the global task list head */
|
||||||
INIT_LIST_HEAD(&global_task_list);
|
INIT_LIST_HEAD(&global_task_list);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
struct task_ids {
|
struct task_ids {
|
||||||
int tid;
|
int tid;
|
||||||
int spid;
|
int spid;
|
||||||
|
int tgid;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <l4/arch/arm/types.h>
|
#include <l4/arch/arm/types.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user