MINOR: threads: add a thread-local thread_info pointer "ti"

Since we're likely to access this thread_info struct more frequently in
the future, let's reserve the thread-local symbol to access it directly
and avoid always having to combine thread_info and tid. This pointer is
set when tid is set.
This commit is contained in:
Willy Tarreau 2019-05-20 18:57:53 +02:00
parent 624dcbf41e
commit 8323a375bc
3 changed files with 8 additions and 2 deletions

View File

@ -56,6 +56,8 @@ extern struct thread_info {
char __end[0] __attribute__((aligned(64))); char __end[0] __attribute__((aligned(64)));
} thread_info[MAX_THREADS]; } thread_info[MAX_THREADS];
extern THREAD_LOCAL struct thread_info *ti; /* thread_info for the current thread */
#define __decl_hathreads(decl) #define __decl_hathreads(decl)
#define __decl_spinlock(lock) #define __decl_spinlock(lock)
#define __decl_aligned_spinlock(lock) #define __decl_aligned_spinlock(lock)
@ -140,6 +142,7 @@ extern struct thread_info {
static inline void ha_set_tid(unsigned int tid) static inline void ha_set_tid(unsigned int tid)
{ {
ti = &thread_info[tid];
} }
static inline void ha_thread_relax(void) static inline void ha_thread_relax(void)
@ -386,6 +389,7 @@ extern struct thread_info {
extern THREAD_LOCAL unsigned int tid; /* The thread id */ extern THREAD_LOCAL unsigned int tid; /* The thread id */
extern THREAD_LOCAL unsigned long tid_bit; /* The bit corresponding to the thread id */ extern THREAD_LOCAL unsigned long tid_bit; /* The bit corresponding to the thread id */
extern THREAD_LOCAL struct thread_info *ti; /* thread_info for the current thread */
extern volatile unsigned long all_threads_mask; extern volatile unsigned long all_threads_mask;
extern volatile unsigned long threads_want_rdv_mask; extern volatile unsigned long threads_want_rdv_mask;
extern volatile unsigned long threads_harmless_mask; extern volatile unsigned long threads_harmless_mask;
@ -416,6 +420,7 @@ static inline void ha_set_tid(unsigned int data)
{ {
tid = data; tid = data;
tid_bit = (1UL << tid); tid_bit = (1UL << tid);
ti = &thread_info[tid];
} }
static inline void ha_thread_relax(void) static inline void ha_thread_relax(void)

View File

@ -2499,9 +2499,9 @@ static void *run_thread_poll_loop(void *data)
ha_set_tid((unsigned long)data); ha_set_tid((unsigned long)data);
#ifdef USE_THREAD #ifdef USE_THREAD
pthread_getcpuclockid(pthread_self(), &thread_info[tid].clock_id); pthread_getcpuclockid(pthread_self(), &ti->clock_id);
#else #else
thread_info[tid].clock_id = CLOCK_THREAD_CPUTIME_ID; ti->clock_id = CLOCK_THREAD_CPUTIME_ID;
#endif #endif
tv_update_date(-1,-1); tv_update_date(-1,-1);

View File

@ -30,6 +30,7 @@
#include <proto/fd.h> #include <proto/fd.h>
struct thread_info thread_info[MAX_THREADS]; struct thread_info thread_info[MAX_THREADS];
THREAD_LOCAL struct thread_info *ti = &thread_info[0];
#ifdef USE_THREAD #ifdef USE_THREAD