Added helper to extract raw thread id from fully qualified thread id

Currently, the tid returned from kernel contains container id as
well, which makes it sufficient to do inter-container syscalls without
any preparation.

The helpers added are for presentation purposes only. Container id
is deleted so that the raw thread id is available for printing or
similar.
This commit is contained in:
Bahadir Balban
2009-11-05 01:47:04 +02:00
parent d9520adb55
commit fd04e9d460
5 changed files with 24 additions and 3 deletions

View File

@@ -144,6 +144,20 @@ static inline void l4_restore_ipcregs(void)
l4_set_sender(l4_get_utcb()->saved_sender);
}
#define TASK_CID_MASK 0xFF000000
#define TASK_ID_MASK 0x00FFFFFF
#define TASK_CID_SHIFT 24
static inline l4id_t __raw_tid(l4id_t tid)
{
return tid & TASK_ID_MASK;
}
static inline l4id_t __cid(l4id_t tid)
{
return (tid & TASK_CID_MASK) >> TASK_CID_SHIFT;
}
static inline l4id_t self_tid(void)
{
struct task_ids ids;
@@ -152,6 +166,11 @@ static inline l4id_t self_tid(void)
return ids.tid;
}
static inline l4id_t __raw_self_tid(void)
{
return __raw_tid(self_tid());
}
static inline int l4_send_full(l4id_t to, unsigned int tag)
{
l4_set_tag(tag);

View File

@@ -195,7 +195,7 @@ void handle_requests(void)
void main(void)
{
printf("\n%s: Started with thread id %x\n", __TASKNAME__, self_tid());
printf("\n%s: Started with thread id %x\n", __TASKNAME__, __raw_self_tid());
init();

View File

@@ -19,5 +19,7 @@ SECTIONS
.rodata1 : { *(.rodata1) }
. = ALIGN(4K);
.data : { *(.data) }
.got : { *(.got) }
.got.plt : { *(.got.plt) }
.bss : { *(.bss) }
}

View File

@@ -31,7 +31,7 @@ l4id_t pagerid;
int main(int argc, char *argv[])
{
printf("\n%s: Started with thread id %x\n", __TASKNAME__, getpid());
printf("\n%s: Started with thread id %x\n", __TASKNAME__, __raw_tid(getpid()));
parent_of_all = getpid();

View File

@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
/* Compare two pid strings. We use strings because we dont have atoi() */
if (!strcmp(pidbuf, parent_of_all)) {
printf("EXECVE TEST -- PASSED --\n");
printf("\nThread (%x): Continues to sync with the pager...\n\n", getpid());
printf("\nThread (%x): Continues to sync with the pager...\n\n", __raw_tid(getpid()));
while (1)
wait_pager(pagerid);
}