cregit-Linux how code gets into the kernel

Release 4.7 include/linux/thread_info.h

Directory: include/linux
/* 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>
#include <linux/bug.h>

struct timespec;
struct compat_timespec;

/*
 * System call restart block.
 */

struct restart_block {
	
long (*fn)(struct restart_block *);
	union {
		/* For futex_wait and futex_wait_requeue_pi */
		struct {
			
u32 __user *uaddr;
			
u32 val;
			
u32 flags;
			
u32 bitset;
			
u64 time;
			
u32 __user *uaddr2;
		} 
futex;
		/* For nanosleep */
		struct {
			
clockid_t clockid;
			
struct timespec __user *rmtp;
#ifdef CONFIG_COMPAT
			
struct compat_timespec __user *compat_rmtp;
#endif
			
u64 expires;
		} 
nanosleep;
		/* For poll */
		struct {
			
struct pollfd __user *ufds;
			
int nfds;
			
int has_timeout;
			
unsigned long tv_sec;
			
unsigned long tv_nsec;
		} 
poll;
	};
};

extern long do_no_restart_syscall(struct restart_block *parm);

#include <linux/bitops.h>
#include <asm/thread_info.h>

#ifdef __KERNEL__

#ifdef CONFIG_DEBUG_STACK_USAGE

# define THREADINFO_GFP		(GFP_KERNEL_ACCOUNT | __GFP_NOTRACK | \
                                 __GFP_ZERO)
#else

# define THREADINFO_GFP		(GFP_KERNEL_ACCOUNT | __GFP_NOTRACK)
#endif

/*
 * 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); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells2583.33%150.00%
jeremy fitzhardingejeremy fitzhardinge516.67%150.00%
Total30100.00%2100.00%


static inline void clear_ti_thread_flag(struct thread_info *ti, int flag) { clear_bit(flag, (unsigned long *)&ti->flags); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells2583.33%150.00%
jeremy fitzhardingejeremy fitzhardinge516.67%150.00%
Total30100.00%2100.00%


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); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells2683.87%150.00%
jeremy fitzhardingejeremy fitzhardinge516.13%150.00%
Total31100.00%2100.00%


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); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells2683.87%150.00%
jeremy fitzhardingejeremy fitzhardinge516.13%150.00%
Total31100.00%2100.00%


static inline int test_ti_thread_flag(struct thread_info *ti, int flag) { return test_bit(flag, (unsigned long *)&ti->flags); }

Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells2683.87%150.00%
jeremy fitzhardingejeremy fitzhardinge516.13%150.00%
Total31100.00%2100.00%

#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 tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK /* * An arch can define its own version of set_restore_sigmask() to get the * job done however works, with or without TIF_RESTORE_SIGMASK. */ #define HAVE_SET_RESTORE_SIGMASK 1 /** * set_restore_sigmask() - make sure saved_sigmask processing gets done * * This sets TIF_RESTORE_SIGMASK and ensures that the arch signal code * will run before returning to user mode, to process the flag. For * all callers, TIF_SIGPENDING is already set or it's no harm to set * it. TIF_RESTORE_SIGMASK need not be in the set of bits that the * arch code will notice on return to user mode, in case those bits * are scarce. We set TIF_SIGPENDING here to ensure that the arch * signal code always gets run when TIF_RESTORE_SIGMASK is set. */
static inline void set_restore_sigmask(void) { set_thread_flag(TIF_RESTORE_SIGMASK); WARN_ON(!test_thread_flag(TIF_SIGPENDING)); }

Contributors

PersonTokensPropCommitsCommitProp
roland mcgrathroland mcgrath1878.26%266.67%
al viroal viro521.74%133.33%
Total23100.00%3100.00%


static inline void clear_restore_sigmask(void) { clear_thread_flag(TIF_RESTORE_SIGMASK); }

Contributors

PersonTokensPropCommitsCommitProp
al viroal viro14100.00%1100.00%
Total14100.00%1100.00%


static inline bool test_restore_sigmask(void) { return test_thread_flag(TIF_RESTORE_SIGMASK); }

Contributors

PersonTokensPropCommitsCommitProp
al viroal viro15100.00%1100.00%
Total15100.00%1100.00%


static inline bool test_and_clear_restore_sigmask(void) { return test_and_clear_thread_flag(TIF_RESTORE_SIGMASK); }

Contributors

PersonTokensPropCommitsCommitProp
al viroal viro15100.00%1100.00%
Total15100.00%1100.00%

#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 */

Overall Contributors

PersonTokensPropCommitsCommitProp
david howellsdavid howells15233.48%29.09%
thomas gleixnerthomas gleixner7716.96%522.73%
al viroal viro6013.22%313.64%
roland mcgrathroland mcgrath367.93%313.64%
roman zippelroman zippel367.93%14.55%
steven rostedtsteven rostedt286.17%14.55%
jeremy fitzhardingejeremy fitzhardinge255.51%14.55%
linus torvaldslinus torvalds245.29%14.55%
peter zijlstrapeter zijlstra51.10%14.55%
darren hartdarren hart51.10%14.55%
hirofumi ogawahirofumi ogawa20.44%14.55%
namhyung kimnamhyung kim20.44%14.55%
vladimir davydovvladimir davydov20.44%14.55%
Total454100.00%22100.00%
Directory: include/linux
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}