Rev 1839 | Rev 1888 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1839 | Rev 1854 | ||
---|---|---|---|
Line 50... | Line 50... | ||
50 | #include <mm/slab.h> |
50 | #include <mm/slab.h> |
51 | #include <proc/uarg.h> |
51 | #include <proc/uarg.h> |
52 | 52 | ||
53 | #define THREAD_STACK_SIZE STACK_SIZE |
53 | #define THREAD_STACK_SIZE STACK_SIZE |
54 | 54 | ||
55 | /**< Thread states. */ |
55 | /** Thread states. */ |
56 | enum state { |
56 | enum state { |
57 | Invalid, /**< It is an error, if thread is found in this state. */ |
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. */ |
58 | Running, /**< State of a thread that is currently executing on some CPU. */ |
59 | Sleeping, /**< Thread in this state is waiting for an event. */ |
59 | Sleeping, /**< Thread in this state is waiting for an event. */ |
60 | Ready, /**< State of threads in a run queue. */ |
60 | Ready, /**< State of threads in a run queue. */ |
Line 63... | Line 63... | ||
63 | Undead /**< Threads that were not detached but exited are in the Undead state. */ |
63 | Undead /**< Threads that were not detached but exited are in the Undead state. */ |
64 | }; |
64 | }; |
65 | 65 | ||
66 | extern char *thread_states[]; |
66 | extern char *thread_states[]; |
67 | 67 | ||
68 | /**< Join types. */ |
68 | /** Join types. */ |
69 | typedef enum { |
69 | typedef enum { |
70 | None, |
70 | None, |
71 | TaskClnp, /**< The thread will be joined by ktaskclnp thread. */ |
71 | TaskClnp, /**< The thread will be joined by ktaskclnp thread. */ |
72 | TaskGC /**< The thread will be joined by ktaskgc thread. */ |
72 | TaskGC /**< The thread will be joined by ktaskgc thread. */ |
73 | } thread_join_type_t; |
73 | } thread_join_type_t; |
74 | 74 | ||
75 | #define X_WIRED (1<<0) |
75 | /* 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. */ |
|
76 | #define X_STOLEN (1<<1) |
78 | #define THREAD_FLAG_USPACE (1<<2) /**< Thread executes in userspace. */ |
77 | 79 | ||
78 | #define THREAD_NAME_BUFLEN 20 |
80 | #define THREAD_NAME_BUFLEN 20 |
79 | 81 | ||
80 | /** Thread structure. There is one per thread. */ |
82 | /** Thread structure. There is one per thread. */ |
81 | struct thread { |
83 | struct thread { |
Line 125... | Line 127... | ||
125 | int fpu_context_exists; |
127 | int fpu_context_exists; |
126 | 128 | ||
127 | /* |
129 | /* |
128 | * Defined only if thread doesn't run. |
130 | * Defined only if thread doesn't run. |
129 | * It means that fpu context is in CPU that last time executes this thread. |
131 | * It means that fpu context is in CPU that last time executes this thread. |
130 | * This disables migration |
132 | * This disables migration. |
131 | */ |
133 | */ |
132 | int fpu_context_engaged; |
134 | int fpu_context_engaged; |
133 | 135 | ||
134 | rwlock_type_t rwlock_holder_type; |
136 | rwlock_type_t rwlock_holder_type; |
135 | 137 | ||
Line 147... | Line 149... | ||
147 | int priority; /**< Thread's priority. Implemented as index to CPU->rq */ |
149 | int priority; /**< Thread's priority. Implemented as index to CPU->rq */ |
148 | uint32_t tid; /**< Thread ID. */ |
150 | uint32_t tid; /**< Thread ID. */ |
149 | 151 | ||
150 | thread_arch_t arch; /**< Architecture-specific data. */ |
152 | thread_arch_t arch; /**< Architecture-specific data. */ |
151 | 153 | ||
152 | uint8_t *kstack; /**< Thread's kernel stack. */ |
154 | uint8_t *kstack; /**< Thread's kernel stack. */ |
153 | }; |
155 | }; |
154 | 156 | ||
155 | /** Thread list lock. |
157 | /** Thread list lock. |
156 | * |
158 | * |
157 | * This lock protects all link_t structures chained in threads_head. |
159 | * This lock protects all link_t structures chained in threads_head. |
Line 168... | Line 170... | ||
168 | extern void thread_exit(void) __attribute__((noreturn)); |
170 | extern void thread_exit(void) __attribute__((noreturn)); |
169 | 171 | ||
170 | #ifndef thread_create_arch |
172 | #ifndef thread_create_arch |
171 | extern void thread_create_arch(thread_t *t); |
173 | extern void thread_create_arch(thread_t *t); |
172 | #endif |
174 | #endif |
- | 175 | #ifndef thr_constructor_arch |
|
- | 176 | extern void thr_constructor_arch(thread_t *t); |
|
- | 177 | #endif |
|
- | 178 | #ifndef thr_destructor_arch |
|
- | 179 | extern void thr_destructor_arch(thread_t *t); |
|
- | 180 | #endif |
|
173 | 181 | ||
174 | extern void thread_sleep(uint32_t sec); |
182 | extern void thread_sleep(uint32_t sec); |
175 | extern void thread_usleep(uint32_t usec); |
183 | extern void thread_usleep(uint32_t usec); |
176 | 184 | ||
177 | #define thread_join(t) thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE) |
185 | #define thread_join(t) thread_join_timeout((t), SYNCH_NO_TIMEOUT, SYNCH_FLAGS_NONE) |