home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.4 KB  |  131 lines

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