Changeset 4c60255 in mainline for kernel/generic/include/proc/thread.h
- Timestamp:
- 2007-01-29T17:59:25Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c27c988
- Parents:
- 3802fcd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/proc/thread.h
r3802fcd r4c60255 47 47 48 48 #define THREAD_STACK_SIZE STACK_SIZE 49 #define THREAD_NAME_BUFLEN 20 49 50 50 51 extern char *thread_states[]; … … 54 55 #define THREAD_FLAG_STOLEN (1 << 1) /**< Thread was migrated to another CPU and has not run yet. */ 55 56 #define THREAD_FLAG_USPACE (1 << 2) /**< Thread executes in userspace. */ 57 58 /** Thread structure. There is one per thread. */ 59 typedef struct thread { 60 link_t rq_link; /**< Run queue link. */ 61 link_t wq_link; /**< Wait queue link. */ 62 link_t th_link; /**< Links to threads within containing task. */ 63 64 /** Lock protecting thread structure. 65 * 66 * Protects the whole thread structure except list links above. 67 */ 68 SPINLOCK_DECLARE(lock); 69 70 char name[THREAD_NAME_BUFLEN]; 71 72 void (* thread_code)(void *); /**< Function implementing the thread. */ 73 void *thread_arg; /**< Argument passed to thread_code() function. */ 74 75 /** From here, the stored context is restored when the thread is scheduled. */ 76 context_t saved_context; 77 /** From here, the stored timeout context is restored when sleep times out. */ 78 context_t sleep_timeout_context; 79 /** From here, the stored interruption context is restored when sleep is interrupted. */ 80 context_t sleep_interruption_context; 81 82 bool sleep_interruptible; /**< If true, the thread can be interrupted from sleep. */ 83 waitq_t *sleep_queue; /**< Wait queue in which this thread sleeps. */ 84 timeout_t sleep_timeout; /**< Timeout used for timeoutable sleeping. */ 85 volatile int timeout_pending; /**< Flag signalling sleep timeout in progress. */ 86 87 /** True if this thread is executing copy_from_uspace(). False otherwise. */ 88 bool in_copy_from_uspace; 89 /** True if this thread is executing copy_to_uspace(). False otherwise. */ 90 bool in_copy_to_uspace; 91 92 /** 93 * If true, the thread will not go to sleep at all and will 94 * call thread_exit() before returning to userspace. 95 */ 96 bool interrupted; 97 98 thread_join_type_t join_type; /**< Who joinins the thread. */ 99 bool detached; /**< If true, thread_join_timeout() cannot be used on this thread. */ 100 waitq_t join_wq; /**< Waitq for thread_join_timeout(). */ 101 102 fpu_context_t *saved_fpu_context; 103 int fpu_context_exists; 104 105 /* 106 * Defined only if thread doesn't run. 107 * It means that fpu context is in CPU that last time executes this thread. 108 * This disables migration. 109 */ 110 int fpu_context_engaged; 111 112 rwlock_type_t rwlock_holder_type; 113 114 void (* call_me)(void *); /**< Funtion to be called in scheduler before the thread is put asleep. */ 115 void *call_me_with; /**< Argument passed to call_me(). */ 116 117 state_t state; /**< Thread's state. */ 118 int flags; /**< Thread's flags. */ 119 120 cpu_t *cpu; /**< Thread's CPU. */ 121 task_t *task; /**< Containing task. */ 122 123 uint64_t ticks; /**< Ticks before preemption. */ 124 125 uint64_t cycles; /**< Thread accounting. */ 126 uint64_t last_cycle; /**< Last sampled cycle. */ 127 bool uncounted; /**< Thread doesn't affect accumulated accounting. */ 128 129 int priority; /**< Thread's priority. Implemented as index to CPU->rq */ 130 uint32_t tid; /**< Thread ID. */ 131 132 thread_arch_t arch; /**< Architecture-specific data. */ 133 134 uint8_t *kstack; /**< Thread's kernel stack. */ 135 } thread_t; 56 136 57 137 /** Thread list lock.
Note:
See TracChangeset
for help on using the changeset viewer.