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 / arch / ia64 / include / asm / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.2 KB  |  146 lines

  1. /*
  2.  * Copyright (C) 2002-2003 Hewlett-Packard Co
  3.  *    David Mosberger-Tang <davidm@hpl.hp.com>
  4.  */
  5. #ifndef _ASM_IA64_THREAD_INFO_H
  6. #define _ASM_IA64_THREAD_INFO_H
  7.  
  8. #ifndef ASM_OFFSETS_C
  9. #include <asm/asm-offsets.h>
  10. #endif
  11. #include <asm/processor.h>
  12. #include <asm/ptrace.h>
  13.  
  14. #define PREEMPT_ACTIVE_BIT 30
  15. #define PREEMPT_ACTIVE    (1 << PREEMPT_ACTIVE_BIT)
  16.  
  17. #ifndef __ASSEMBLY__
  18.  
  19. /*
  20.  * On IA-64, we want to keep the task structure and kernel stack together, so they can be
  21.  * mapped by a single TLB entry and so they can be addressed by the "current" pointer
  22.  * without having to do pointer masking.
  23.  */
  24. struct thread_info {
  25.     struct task_struct *task;    /* XXX not really needed, except for dup_task_struct() */
  26.     struct exec_domain *exec_domain;/* execution domain */
  27.     __u32 flags;            /* thread_info flags (see TIF_*) */
  28.     __u32 cpu;            /* current CPU */
  29.     __u32 last_cpu;            /* Last CPU thread ran on */
  30.     __u32 status;            /* Thread synchronous flags */
  31.     mm_segment_t addr_limit;    /* user-level address space limit */
  32.     int preempt_count;        /* 0=premptable, <0=BUG; will also serve as bh-counter */
  33.     struct restart_block restart_block;
  34. #ifdef CONFIG_VIRT_CPU_ACCOUNTING
  35.     __u64 ac_stamp;
  36.     __u64 ac_leave;
  37.     __u64 ac_stime;
  38.     __u64 ac_utime;
  39. #endif
  40. };
  41.  
  42. #define THREAD_SIZE            KERNEL_STACK_SIZE
  43.  
  44. #define INIT_THREAD_INFO(tsk)            \
  45. {                        \
  46.     .task        = &tsk,            \
  47.     .exec_domain    = &default_exec_domain,    \
  48.     .flags        = 0,            \
  49.     .cpu        = 0,            \
  50.     .addr_limit    = KERNEL_DS,        \
  51.     .preempt_count    = 0,            \
  52.     .restart_block = {            \
  53.         .fn = do_no_restart_syscall,    \
  54.     },                    \
  55. }
  56.  
  57. #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
  58.  
  59. #ifndef ASM_OFFSETS_C
  60. /* how to get the thread information struct from C */
  61. #define current_thread_info()    ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
  62. #define alloc_thread_info(tsk)    ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
  63. #define task_thread_info(tsk)    ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
  64. #else
  65. #define current_thread_info()    ((struct thread_info *) 0)
  66. #define alloc_thread_info(tsk)    ((struct thread_info *) 0)
  67. #define task_thread_info(tsk)    ((struct thread_info *) 0)
  68. #endif
  69. #define free_thread_info(ti)    /* nothing */
  70. #define task_stack_page(tsk)    ((void *)(tsk))
  71.  
  72. #define __HAVE_THREAD_FUNCTIONS
  73. #ifdef CONFIG_VIRT_CPU_ACCOUNTING
  74. #define setup_thread_stack(p, org)            \
  75.     *task_thread_info(p) = *task_thread_info(org);    \
  76.     task_thread_info(p)->ac_stime = 0;        \
  77.     task_thread_info(p)->ac_utime = 0;        \
  78.     task_thread_info(p)->task = (p);
  79. #else
  80. #define setup_thread_stack(p, org) \
  81.     *task_thread_info(p) = *task_thread_info(org); \
  82.     task_thread_info(p)->task = (p);
  83. #endif
  84. #define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET)
  85.  
  86. #define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
  87. #define alloc_task_struct()    ((struct task_struct *)__get_free_pages(GFP_KERNEL | __GFP_COMP, KERNEL_STACK_SIZE_ORDER))
  88. #define free_task_struct(tsk)    free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)
  89.  
  90. #endif /* !__ASSEMBLY */
  91.  
  92. /*
  93.  * thread information flags
  94.  * - these are process state flags that various assembly files may need to access
  95.  * - pending work-to-be-done flags are in least-significant 16 bits, other flags
  96.  *   in top 16 bits
  97.  */
  98. #define TIF_SIGPENDING        0    /* signal pending */
  99. #define TIF_NEED_RESCHED    1    /* rescheduling necessary */
  100. #define TIF_SYSCALL_TRACE    2    /* syscall trace active */
  101. #define TIF_SYSCALL_AUDIT    3    /* syscall auditing active */
  102. #define TIF_SINGLESTEP        4    /* restore singlestep on return to user mode */
  103. #define TIF_NOTIFY_RESUME    6    /* resumption notification requested */
  104. #define TIF_POLLING_NRFLAG    16    /* true if poll_idle() is polling TIF_NEED_RESCHED */
  105. #define TIF_MEMDIE        17
  106. #define TIF_MCA_INIT        18    /* this task is processing MCA or INIT */
  107. #define TIF_DB_DISABLED        19    /* debug trap disabled for fsyscall */
  108. #define TIF_FREEZE        20    /* is freezing for suspend */
  109. #define TIF_RESTORE_RSE        21    /* user RBS is newer than kernel RBS */
  110.  
  111. #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
  112. #define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
  113. #define _TIF_SINGLESTEP        (1 << TIF_SINGLESTEP)
  114. #define _TIF_SYSCALL_TRACEAUDIT    (_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP)
  115. #define _TIF_NOTIFY_RESUME    (1 << TIF_NOTIFY_RESUME)
  116. #define _TIF_SIGPENDING        (1 << TIF_SIGPENDING)
  117. #define _TIF_NEED_RESCHED    (1 << TIF_NEED_RESCHED)
  118. #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
  119. #define _TIF_MCA_INIT        (1 << TIF_MCA_INIT)
  120. #define _TIF_DB_DISABLED    (1 << TIF_DB_DISABLED)
  121. #define _TIF_FREEZE        (1 << TIF_FREEZE)
  122. #define _TIF_RESTORE_RSE    (1 << TIF_RESTORE_RSE)
  123.  
  124. /* "work to do on user-return" bits */
  125. #define TIF_ALLWORK_MASK    (_TIF_SIGPENDING|_TIF_NOTIFY_RESUME|_TIF_SYSCALL_AUDIT|\
  126.                  _TIF_NEED_RESCHED|_TIF_SYSCALL_TRACE)
  127. /* like TIF_ALLWORK_BITS but sans TIF_SYSCALL_TRACE or TIF_SYSCALL_AUDIT */
  128. #define TIF_WORK_MASK        (TIF_ALLWORK_MASK&~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT))
  129.  
  130. #define TS_POLLING        1     /* true if in idle loop and not sleeping */
  131. #define TS_RESTORE_SIGMASK    2    /* restore signal mask in do_signal() */
  132.  
  133. #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING)
  134.  
  135. #ifndef __ASSEMBLY__
  136. #define HAVE_SET_RESTORE_SIGMASK    1
  137. static inline void set_restore_sigmask(void)
  138. {
  139.     struct thread_info *ti = current_thread_info();
  140.     ti->status |= TS_RESTORE_SIGMASK;
  141.     set_bit(TIF_SIGPENDING, &ti->flags);
  142. }
  143. #endif    /* !__ASSEMBLY__ */
  144.  
  145. #endif /* _ASM_IA64_THREAD_INFO_H */
  146.