| /* thread_info.h: common low-level thread information accessors | 
 |  * | 
 |  * Copyright (C) 2002  David Howells (dhowells@redhat.com) | 
 |  * - Incorporating suggestions made by Linus Torvalds | 
 |  */ | 
 |  | 
 | #ifndef _LINUX_THREAD_INFO_H | 
 | #define _LINUX_THREAD_INFO_H | 
 |  | 
 | #include <linux/types.h> | 
 |  | 
 | /* | 
 |  * System call restart block. | 
 |  */ | 
 | struct restart_block { | 
 | 	long (*fn)(struct restart_block *); | 
 | 	union { | 
 | 		struct { | 
 | 			unsigned long arg0, arg1, arg2, arg3; | 
 | 		}; | 
 | 		/* For futex_wait */ | 
 | 		struct { | 
 | 			u32 *uaddr; | 
 | 			u32 val; | 
 | 			u32 flags; | 
 | 			u32 bitset; | 
 | 			u64 time; | 
 | 		} futex; | 
 | 	}; | 
 | }; | 
 |  | 
 | extern long do_no_restart_syscall(struct restart_block *parm); | 
 |  | 
 | #include <linux/bitops.h> | 
 | #include <asm/thread_info.h> | 
 |  | 
 | #ifdef __KERNEL__ | 
 |  | 
 | /* | 
 |  * flag set/clear/test wrappers | 
 |  * - pass TIF_xxxx constants to these functions | 
 |  */ | 
 |  | 
 | static inline void set_ti_thread_flag(struct thread_info *ti, int flag) | 
 | { | 
 | 	set_bit(flag, (unsigned long *)&ti->flags); | 
 | } | 
 |  | 
 | static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) | 
 | { | 
 | 	clear_bit(flag, (unsigned long *)&ti->flags); | 
 | } | 
 |  | 
 | static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag) | 
 | { | 
 | 	return test_and_set_bit(flag, (unsigned long *)&ti->flags); | 
 | } | 
 |  | 
 | static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag) | 
 | { | 
 | 	return test_and_clear_bit(flag, (unsigned long *)&ti->flags); | 
 | } | 
 |  | 
 | static inline int test_ti_thread_flag(struct thread_info *ti, int flag) | 
 | { | 
 | 	return test_bit(flag, (unsigned long *)&ti->flags); | 
 | } | 
 |  | 
 | #define set_thread_flag(flag) \ | 
 | 	set_ti_thread_flag(current_thread_info(), flag) | 
 | #define clear_thread_flag(flag) \ | 
 | 	clear_ti_thread_flag(current_thread_info(), flag) | 
 | #define test_and_set_thread_flag(flag) \ | 
 | 	test_and_set_ti_thread_flag(current_thread_info(), flag) | 
 | #define test_and_clear_thread_flag(flag) \ | 
 | 	test_and_clear_ti_thread_flag(current_thread_info(), flag) | 
 | #define test_thread_flag(flag) \ | 
 | 	test_ti_thread_flag(current_thread_info(), flag) | 
 |  | 
 | #define set_need_resched()	set_thread_flag(TIF_NEED_RESCHED) | 
 | #define clear_need_resched()	clear_thread_flag(TIF_NEED_RESCHED) | 
 |  | 
 | #endif | 
 |  | 
 | #endif /* _LINUX_THREAD_INFO_H */ |