diff options
Diffstat (limited to 'include/linux/thread_info.h')
| -rw-r--r-- | include/linux/thread_info.h | 33 | 
1 files changed, 26 insertions, 7 deletions
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index c9069654417..ff307b548ed 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -8,6 +8,7 @@  #define _LINUX_THREAD_INFO_H  #include <linux/types.h> +#include <linux/bug.h>  struct timespec;  struct compat_timespec; @@ -18,9 +19,6 @@ struct compat_timespec;  struct restart_block {  	long (*fn)(struct restart_block *);  	union { -		struct { -			unsigned long arg0, arg1, arg2, arg3; -		};  		/* For futex_wait and futex_wait_requeue_pi */  		struct {  			u32 __user *uaddr; @@ -32,7 +30,7 @@ struct restart_block {  		} futex;  		/* For nanosleep */  		struct { -			clockid_t index; +			clockid_t clockid;  			struct timespec __user *rmtp;  #ifdef CONFIG_COMPAT  			struct compat_timespec __user *compat_rmtp; @@ -57,6 +55,12 @@ extern long do_no_restart_syscall(struct restart_block *parm);  #ifdef __KERNEL__ +#ifdef CONFIG_DEBUG_STACK_USAGE +# define THREADINFO_GFP		(GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO) +#else +# define THREADINFO_GFP		(GFP_KERNEL | __GFP_NOTRACK) +#endif +  /*   * flag set/clear/test wrappers   * - pass TIF_xxxx constants to these functions @@ -98,8 +102,7 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int 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) +#define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)  #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK  /* @@ -122,10 +125,26 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag)  static inline void set_restore_sigmask(void)  {  	set_thread_flag(TIF_RESTORE_SIGMASK); -	set_thread_flag(TIF_SIGPENDING); +	WARN_ON(!test_thread_flag(TIF_SIGPENDING)); +} +static inline void clear_restore_sigmask(void) +{ +	clear_thread_flag(TIF_RESTORE_SIGMASK); +} +static inline bool test_restore_sigmask(void) +{ +	return test_thread_flag(TIF_RESTORE_SIGMASK); +} +static inline bool test_and_clear_restore_sigmask(void) +{ +	return test_and_clear_thread_flag(TIF_RESTORE_SIGMASK);  }  #endif	/* TIF_RESTORE_SIGMASK && !HAVE_SET_RESTORE_SIGMASK */ +#ifndef HAVE_SET_RESTORE_SIGMASK +#error "no set_restore_sigmask() provided and default one won't work" +#endif +  #endif	/* __KERNEL__ */  #endif /* _LINUX_THREAD_INFO_H */  | 
