LCOV - code coverage report
Current view: top level - include/linux - thread_info.h (source / functions) Hit Total Coverage
Test: btrfstest.info Lines: 2 2 100.0 %
Date: 2014-11-28 Functions: 1 1 100.0 %

          Line data    Source code
       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             : #include <linux/bug.h>
      12             : 
      13             : struct timespec;
      14             : struct compat_timespec;
      15             : 
      16             : /*
      17             :  * System call restart block.
      18             :  */
      19             : struct restart_block {
      20             :         long (*fn)(struct restart_block *);
      21             :         union {
      22             :                 /* For futex_wait and futex_wait_requeue_pi */
      23             :                 struct {
      24             :                         u32 __user *uaddr;
      25             :                         u32 val;
      26             :                         u32 flags;
      27             :                         u32 bitset;
      28             :                         u64 time;
      29             :                         u32 __user *uaddr2;
      30             :                 } futex;
      31             :                 /* For nanosleep */
      32             :                 struct {
      33             :                         clockid_t clockid;
      34             :                         struct timespec __user *rmtp;
      35             : #ifdef CONFIG_COMPAT
      36             :                         struct compat_timespec __user *compat_rmtp;
      37             : #endif
      38             :                         u64 expires;
      39             :                 } nanosleep;
      40             :                 /* For poll */
      41             :                 struct {
      42             :                         struct pollfd __user *ufds;
      43             :                         int nfds;
      44             :                         int has_timeout;
      45             :                         unsigned long tv_sec;
      46             :                         unsigned long tv_nsec;
      47             :                 } poll;
      48             :         };
      49             : };
      50             : 
      51             : extern long do_no_restart_syscall(struct restart_block *parm);
      52             : 
      53             : #include <linux/bitops.h>
      54             : #include <asm/thread_info.h>
      55             : 
      56             : #ifdef __KERNEL__
      57             : 
      58             : #ifdef CONFIG_DEBUG_STACK_USAGE
      59             : # define THREADINFO_GFP         (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
      60             : #else
      61             : # define THREADINFO_GFP         (GFP_KERNEL | __GFP_NOTRACK)
      62             : #endif
      63             : 
      64             : /*
      65             :  * flag set/clear/test wrappers
      66             :  * - pass TIF_xxxx constants to these functions
      67             :  */
      68             : 
      69             : static inline void set_ti_thread_flag(struct thread_info *ti, int flag)
      70             : {
      71             :         set_bit(flag, (unsigned long *)&ti->flags);
      72             : }
      73             : 
      74             : static inline void clear_ti_thread_flag(struct thread_info *ti, int flag)
      75             : {
      76             :         clear_bit(flag, (unsigned long *)&ti->flags);
      77             : }
      78             : 
      79             : static inline int test_and_set_ti_thread_flag(struct thread_info *ti, int flag)
      80             : {
      81             :         return test_and_set_bit(flag, (unsigned long *)&ti->flags);
      82             : }
      83             : 
      84             : static inline int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag)
      85             : {
      86             :         return test_and_clear_bit(flag, (unsigned long *)&ti->flags);
      87             : }
      88             : 
      89      248947 : static inline int test_ti_thread_flag(struct thread_info *ti, int flag)
      90             : {
      91      497894 :         return test_bit(flag, (unsigned long *)&ti->flags);
      92             : }
      93             : 
      94             : #define set_thread_flag(flag) \
      95             :         set_ti_thread_flag(current_thread_info(), flag)
      96             : #define clear_thread_flag(flag) \
      97             :         clear_ti_thread_flag(current_thread_info(), flag)
      98             : #define test_and_set_thread_flag(flag) \
      99             :         test_and_set_ti_thread_flag(current_thread_info(), flag)
     100             : #define test_and_clear_thread_flag(flag) \
     101             :         test_and_clear_ti_thread_flag(current_thread_info(), flag)
     102             : #define test_thread_flag(flag) \
     103             :         test_ti_thread_flag(current_thread_info(), flag)
     104             : 
     105             : #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
     106             : 
     107             : #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK
     108             : /*
     109             :  * An arch can define its own version of set_restore_sigmask() to get the
     110             :  * job done however works, with or without TIF_RESTORE_SIGMASK.
     111             :  */
     112             : #define HAVE_SET_RESTORE_SIGMASK        1
     113             : 
     114             : /**
     115             :  * set_restore_sigmask() - make sure saved_sigmask processing gets done
     116             :  *
     117             :  * This sets TIF_RESTORE_SIGMASK and ensures that the arch signal code
     118             :  * will run before returning to user mode, to process the flag.  For
     119             :  * all callers, TIF_SIGPENDING is already set or it's no harm to set
     120             :  * it.  TIF_RESTORE_SIGMASK need not be in the set of bits that the
     121             :  * arch code will notice on return to user mode, in case those bits
     122             :  * are scarce.  We set TIF_SIGPENDING here to ensure that the arch
     123             :  * signal code always gets run when TIF_RESTORE_SIGMASK is set.
     124             :  */
     125             : static inline void set_restore_sigmask(void)
     126             : {
     127             :         set_thread_flag(TIF_RESTORE_SIGMASK);
     128             :         WARN_ON(!test_thread_flag(TIF_SIGPENDING));
     129             : }
     130             : static inline void clear_restore_sigmask(void)
     131             : {
     132             :         clear_thread_flag(TIF_RESTORE_SIGMASK);
     133             : }
     134             : static inline bool test_restore_sigmask(void)
     135             : {
     136             :         return test_thread_flag(TIF_RESTORE_SIGMASK);
     137             : }
     138             : static inline bool test_and_clear_restore_sigmask(void)
     139             : {
     140             :         return test_and_clear_thread_flag(TIF_RESTORE_SIGMASK);
     141             : }
     142             : #endif  /* TIF_RESTORE_SIGMASK && !HAVE_SET_RESTORE_SIGMASK */
     143             : 
     144             : #ifndef HAVE_SET_RESTORE_SIGMASK
     145             : #error "no set_restore_sigmask() provided and default one won't work"
     146             : #endif
     147             : 
     148             : #endif  /* __KERNEL__ */
     149             : 
     150             : #endif /* _LINUX_THREAD_INFO_H */

Generated by: LCOV version 1.10