Changeset b3f8fb7 in mainline for kernel/generic/include/proc/thread.h
- Timestamp:
- 2007-01-28T13:25:49Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8e8c1a5
- Parents:
- 1ba41c5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/proc/thread.h
r1ba41c5 rb3f8fb7 36 36 #define KERN_THREAD_H_ 37 37 38 #include <arch/proc/thread.h> 39 #include <synch/spinlock.h> 40 #include <arch/context.h> 41 #include <fpu_context.h> 42 #include <arch/types.h> 43 #include <typedefs.h> 44 #include <time/timeout.h> 38 #include <synch/waitq.h> 39 #include <proc/task.h> 40 #include <cpu.h> 45 41 #include <synch/rwlock.h> 46 #include <synch/synch.h>47 #include <config.h>48 42 #include <adt/btree.h> 49 #include <adt/list.h>50 43 #include <mm/slab.h> 44 #include <arch/cpu.h> 45 #include <mm/tlb.h> 51 46 #include <proc/uarg.h> 52 47 53 48 #define THREAD_STACK_SIZE STACK_SIZE 54 49 55 /** Thread states. */56 typedef enum {57 Invalid, /**< It is an error, if thread is found in this state. */58 Running, /**< State of a thread that is currently executing on some CPU. */59 Sleeping, /**< Thread in this state is waiting for an event. */60 Ready, /**< State of threads in a run queue. */61 Entering, /**< Threads are in this state before they are first readied. */62 Exiting, /**< After a thread calls thread_exit(), it is put into Exiting state. */63 Undead /**< Threads that were not detached but exited are in the Undead state. */64 } state_t;65 66 50 extern char *thread_states[]; 67 51 68 /** Join types. */69 typedef enum {70 None,71 TaskClnp, /**< The thread will be joined by ktaskclnp thread. */72 TaskGC /**< The thread will be joined by ktaskgc thread. */73 } thread_join_type_t;74 75 52 /* Thread flags */ 76 #define THREAD_FLAG_WIRED (1<<0) /**< Thread cannot be migrated to another CPU. */ 77 #define THREAD_FLAG_STOLEN (1<<1) /**< Thread was migrated to another CPU and has not run yet. */ 78 #define THREAD_FLAG_USPACE (1<<2) /**< Thread executes in userspace. */ 79 80 #define THREAD_NAME_BUFLEN 20 81 82 /** Thread structure. There is one per thread. */ 83 struct thread { 84 link_t rq_link; /**< Run queue link. */ 85 link_t wq_link; /**< Wait queue link. */ 86 link_t th_link; /**< Links to threads within containing task. */ 87 88 /** Lock protecting thread structure. 89 * 90 * Protects the whole thread structure except list links above. 91 */ 92 SPINLOCK_DECLARE(lock); 93 94 char name[THREAD_NAME_BUFLEN]; 95 96 void (* thread_code)(void *); /**< Function implementing the thread. */ 97 void *thread_arg; /**< Argument passed to thread_code() function. */ 98 99 /** From here, the stored context is restored when the thread is scheduled. */ 100 context_t saved_context; 101 /** From here, the stored timeout context is restored when sleep times out. */ 102 context_t sleep_timeout_context; 103 /** From here, the stored interruption context is restored when sleep is interrupted. */ 104 context_t sleep_interruption_context; 105 106 bool sleep_interruptible; /**< If true, the thread can be interrupted from sleep. */ 107 waitq_t *sleep_queue; /**< Wait queue in which this thread sleeps. */ 108 timeout_t sleep_timeout; /**< Timeout used for timeoutable sleeping. */ 109 volatile int timeout_pending; /**< Flag signalling sleep timeout in progress. */ 110 111 /** True if this thread is executing copy_from_uspace(). False otherwise. */ 112 bool in_copy_from_uspace; 113 /** True if this thread is executing copy_to_uspace(). False otherwise. */ 114 bool in_copy_to_uspace; 115 116 /** 117 * If true, the thread will not go to sleep at all and will 118 * call thread_exit() before returning to userspace. 119 */ 120 bool interrupted; 121 122 thread_join_type_t join_type; /**< Who joinins the thread. */ 123 bool detached; /**< If true, thread_join_timeout() cannot be used on this thread. */ 124 waitq_t join_wq; /**< Waitq for thread_join_timeout(). */ 125 126 fpu_context_t *saved_fpu_context; 127 int fpu_context_exists; 128 129 /* 130 * Defined only if thread doesn't run. 131 * It means that fpu context is in CPU that last time executes this thread. 132 * This disables migration. 133 */ 134 int fpu_context_engaged; 135 136 rwlock_type_t rwlock_holder_type; 137 138 void (* call_me)(void *); /**< Funtion to be called in scheduler before the thread is put asleep. */ 139 void *call_me_with; /**< Argument passed to call_me(). */ 140 141 state_t state; /**< Thread's state. */ 142 int flags; /**< Thread's flags. */ 143 144 cpu_t *cpu; /**< Thread's CPU. */ 145 task_t *task; /**< Containing task. */ 146 147 uint64_t ticks; /**< Ticks before preemption. */ 148 149 uint64_t cycles; /**< Thread accounting. */ 150 uint64_t last_cycle; /**< Last sampled cycle. */ 151 bool uncounted; /**< Thread doesn't affect accumulated accounting. */ 152 153 int priority; /**< Thread's priority. Implemented as index to CPU->rq */ 154 uint32_t tid; /**< Thread ID. */ 155 156 thread_arch_t arch; /**< Architecture-specific data. */ 157 158 uint8_t *kstack; /**< Thread's kernel stack. */ 159 }; 53 #define THREAD_FLAG_WIRED (1 << 0) /**< Thread cannot be migrated to another CPU. */ 54 #define THREAD_FLAG_STOLEN (1 << 1) /**< Thread was migrated to another CPU and has not run yet. */ 55 #define THREAD_FLAG_USPACE (1 << 2) /**< Thread executes in userspace. */ 160 56 161 57 /** Thread list lock. … … 196 92 extern void thread_update_accounting(void); 197 93 extern bool thread_exists(thread_t *t); 94 extern void thread_interrupt_sleep(thread_t *t); 198 95 199 96 /* Fpu context slab cache */
Note:
See TracChangeset
for help on using the changeset viewer.