1 /* thread_info.h: common low-level thread information accessors 2 * 3 * Copyright (C) 2002 David Howells ([email protected]) 4 * - Incorporating suggestions made by Linus Torvalds 5 */ 6 7 #ifndef _LINUX_THREAD_INFO_H 8 #define _LINUX_THREAD_INFO_H 9 10 #include <linux/types.h> 11 12 struct timespec; 13 struct compat_timespec; 14 15 /* 16 * System call restart block. 17 */ 18 struct restart_block { 19 long (*fn)(struct restart_block *); 20 union { 21 struct { 22 unsigned long arg0, arg1, arg2, arg3; 23 }; 24 /* For futex_wait */ 25 struct { 26 u32 *uaddr; 27 u32 val; 28 u32 flags; 29 u32 bitset; 30 u64 time; 31 } futex; 32 /* For nanosleep */ 33 struct { 34 clockid_t index; 35 struct timespec __user *rmtp; 36 #ifdef CONFIG_COMPAT 37 struct compat_timespec __user *compat_rmtp; 38 #endif 39 u64 expires; 40 } nanosleep; 41 }; 42 }; 43 44 extern long do_no_restart_syscall(struct restart_block *parm); 45 46 #include <linux/bitops.h> 47 #include <asm/thread_info.h> 48 49 #ifdef __KERNEL__ 50 51 /* 52 * flag set/clear/test wrappers 53 * - pass TIF_xxxx constants to these functions 54 */ 55 56 static inline void set_ti_thread_flag(struct thread_info *ti, int flag) 57 { 58 set_bit(flag, (unsigned long *)&ti->flags); 59 } 60 61 static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) 62 { 63 clear_bit(flag, (unsigned long *)&ti->flags); 64 } 65 66 static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag) 67 { 68 return test_and_set_bit(flag, (unsigned long *)&ti->flags); 69 } 70 71 static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag) 72 { 73 return test_and_clear_bit(flag, (unsigned long *)&ti->flags); 74 } 75 76 static inline int test_ti_thread_flag(struct thread_info *ti, int flag) 77 { 78 return test_bit(flag, (unsigned long *)&ti->flags); 79 } 80 81 #define set_thread_flag(flag) \ 82 set_ti_thread_flag(current_thread_info(), flag) 83 #define clear_thread_flag(flag) \ 84 clear_ti_thread_flag(current_thread_info(), flag) 85 #define test_and_set_thread_flag(flag) \ 86 test_and_set_ti_thread_flag(current_thread_info(), flag) 87 #define test_and_clear_thread_flag(flag) \ 88 test_and_clear_ti_thread_flag(current_thread_info(), flag) 89 #define test_thread_flag(flag) \ 90 test_ti_thread_flag(current_thread_info(), flag) 91 92 #define set_need_resched() set_thread_flag(TIF_NEED_RESCHED) 93 #define clear_need_resched() clear_thread_flag(TIF_NEED_RESCHED) 94 95 #endif 96 97 #endif /* _LINUX_THREAD_INFO_H */ 98