1 /* thread_info.h: common low-level thread information accessors 2 * 3 * Copyright (C) 2002 David Howells (dhowells@redhat.com) 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 /* 13 * System call restart block. 14 */ 15 struct restart_block { 16 long (*fn)(struct restart_block *); 17 union { 18 struct { 19 unsigned long arg0, arg1, arg2, arg3; 20 }; 21 /* For futex_wait */ 22 struct { 23 u32 *uaddr; 24 u32 val; 25 u32 flags; 26 u32 bitset; 27 u64 time; 28 } futex; 29 }; 30 }; 31 32 extern long do_no_restart_syscall(struct restart_block *parm); 33 34 #include <linux/bitops.h> 35 #include <asm/thread_info.h> 36 37 #ifdef __KERNEL__ 38 39 /* 40 * flag set/clear/test wrappers 41 * - pass TIF_xxxx constants to these functions 42 */ 43 44 static inline void set_ti_thread_flag(struct thread_info *ti, int flag) 45 { 46 set_bit(flag, (unsigned long *)&ti->flags); 47 } 48 49 static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) 50 { 51 clear_bit(flag, (unsigned long *)&ti->flags); 52 } 53 54 static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag) 55 { 56 return test_and_set_bit(flag, (unsigned long *)&ti->flags); 57 } 58 59 static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag) 60 { 61 return test_and_clear_bit(flag, (unsigned long *)&ti->flags); 62 } 63 64 static inline int test_ti_thread_flag(struct thread_info *ti, int flag) 65 { 66 return test_bit(flag, (unsigned long *)&ti->flags); 67 } 68 69 #define set_thread_flag(flag) \ 70 set_ti_thread_flag(current_thread_info(), flag) 71 #define clear_thread_flag(flag) \ 72 clear_ti_thread_flag(current_thread_info(), flag) 73 #define test_and_set_thread_flag(flag) \ 74 test_and_set_ti_thread_flag(current_thread_info(), flag) 75 #define test_and_clear_thread_flag(flag) \ 76 test_and_clear_ti_thread_flag(current_thread_info(), flag) 77 #define test_thread_flag(flag) \ 78 test_ti_thread_flag(current_thread_info(), flag) 79 80 #define set_need_resched() set_thread_flag(TIF_NEED_RESCHED) 81 #define clear_need_resched() clear_thread_flag(TIF_NEED_RESCHED) 82 83 #endif 84 85 #endif /* _LINUX_THREAD_INFO_H */ 86