From 0eaa27291a6bd9aa217a53c82de5b91ac0dea6cf Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Thu, 29 Oct 2015 11:01:27 +0900 Subject: [PATCH] thread: move clear_child_tid, etc. to main structure --- arch/x86/kernel/cpu.c | 2 +- kernel/include/process.h | 6 ++---- kernel/process.c | 4 ++-- kernel/syscall.c | 18 +++++++++--------- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/arch/x86/kernel/cpu.c b/arch/x86/kernel/cpu.c index e64b53af..1312c993 100644 --- a/arch/x86/kernel/cpu.c +++ b/arch/x86/kernel/cpu.c @@ -1340,7 +1340,7 @@ ihk_mc_user_context_t *lookup_user_context(struct thread *thread) } if (!uctx->is_sr_valid) { - uctx->sr.fs_base = thread->thread.tlsblock_base; + uctx->sr.fs_base = thread->tlsblock_base; uctx->sr.gs_base = 0; uctx->sr.ds = 0; uctx->sr.es = 0; diff --git a/kernel/include/process.h b/kernel/include/process.h index 576af746..ac7238cc 100644 --- a/kernel/include/process.h +++ b/kernel/include/process.h @@ -485,10 +485,8 @@ struct thread { ihk_atomic_t refcount; - struct { - int *clear_child_tid; - unsigned long tlsblock_base, tlsblock_limit; - } thread; + int *clear_child_tid; + unsigned long tlsblock_base, tlsblock_limit; // thread info cpu_set_t cpu_set; diff --git a/kernel/process.c b/kernel/process.c index eec1caea..f411de5c 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -2581,10 +2581,10 @@ redo: ihk_mc_load_page_table(next->vm->address_space->page_table); dkprintf("[%d] schedule: tlsblock_base: 0x%lX\n", - ihk_mc_get_processor_id(), next->thread.tlsblock_base); + ihk_mc_get_processor_id(), next->tlsblock_base); /* Set up new TLS.. */ - do_arch_prctl(ARCH_SET_FS, next->thread.tlsblock_base); + do_arch_prctl(ARCH_SET_FS, next->tlsblock_base); if (prev) { last = ihk_mc_switch_context(&prev->ctx, &next->ctx, prev); diff --git a/kernel/syscall.c b/kernel/syscall.c index b5912ba1..2b4d73c8 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -1475,7 +1475,7 @@ long do_arch_prctl(unsigned long code, unsigned long address) case ARCH_SET_FS: dkprintf("[%d] arch_prctl: ARCH_SET_FS: 0x%lX\n", ihk_mc_get_processor_id(), address); - cpu_local_var(current)->thread.tlsblock_base = address; + cpu_local_var(current)->tlsblock_base = address; err = ihk_mc_arch_set_special_register(type, address); break; case ARCH_SET_GS: @@ -1893,7 +1893,7 @@ unsigned long do_fork(int clone_flags, unsigned long newsp, dkprintf("clone_flags & CLONE_CHILD_CLEARTID: 0x%lX\n", child_tidptr); - new->thread.clear_child_tid = (int*)child_tidptr; + new->clear_child_tid = (int*)child_tidptr; } if (clone_flags & CLONE_CHILD_SETTID) { @@ -1915,11 +1915,11 @@ unsigned long do_fork(int clone_flags, unsigned long newsp, dkprintf("clone_flags & CLONE_SETTLS: 0x%lX\n", tlsblock_base); - new->thread.tlsblock_base = tlsblock_base; + new->tlsblock_base = tlsblock_base; } else { - new->thread.tlsblock_base = - cpu_local_var(current)->thread.tlsblock_base; + new->tlsblock_base = + cpu_local_var(current)->tlsblock_base; } ihk_mc_syscall_ret(new->uctx) = 0; @@ -1967,7 +1967,7 @@ SYSCALL_DECLARE(clone) SYSCALL_DECLARE(set_tid_address) { - cpu_local_var(current)->thread.clear_child_tid = + cpu_local_var(current)->clear_child_tid = (int*)ihk_mc_syscall_arg0(ctx); return cpu_local_var(current)->proc->pid; @@ -3535,13 +3535,13 @@ SYSCALL_DECLARE(exit) */ /* If there is a clear_child_tid address set, clear it and wake it. * This unblocks any pthread_join() waiters. */ - if (thread->thread.clear_child_tid) { + if (thread->clear_child_tid) { dkprintf("exit clear_child!\n"); - *thread->thread.clear_child_tid = 0; + *thread->clear_child_tid = 0; barrier(); - futex((uint32_t *)thread->thread.clear_child_tid, + futex((uint32_t *)thread->clear_child_tid, FUTEX_WAKE, 1, 0, NULL, 0, 0); }