Rev 1787 | Rev 1839 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1787 | Rev 1820 | ||
|---|---|---|---|
| Line 121... | Line 121... | ||
| 121 | } |
121 | } |
| 122 | 122 | ||
| 123 | /** Initialization and allocation for thread_t structure */ |
123 | /** Initialization and allocation for thread_t structure */ |
| 124 | static int thr_constructor(void *obj, int kmflags) |
124 | static int thr_constructor(void *obj, int kmflags) |
| 125 | { |
125 | { |
| 126 | thread_t *t = (thread_t *)obj; |
126 | thread_t *t = (thread_t *) obj; |
| 127 | 127 | ||
| 128 | spinlock_initialize(&t->lock, "thread_t_lock"); |
128 | spinlock_initialize(&t->lock, "thread_t_lock"); |
| 129 | link_initialize(&t->rq_link); |
129 | link_initialize(&t->rq_link); |
| 130 | link_initialize(&t->wq_link); |
130 | link_initialize(&t->wq_link); |
| 131 | link_initialize(&t->th_link); |
131 | link_initialize(&t->th_link); |
| Line 153... | Line 153... | ||
| 153 | } |
153 | } |
| 154 | 154 | ||
| 155 | /** Destruction of thread_t object */ |
155 | /** Destruction of thread_t object */ |
| 156 | static int thr_destructor(void *obj) |
156 | static int thr_destructor(void *obj) |
| 157 | { |
157 | { |
| 158 | thread_t *t = (thread_t *)obj; |
158 | thread_t *t = (thread_t *) obj; |
| 159 | 159 | ||
| 160 | frame_free(KA2PA(t->kstack)); |
160 | frame_free(KA2PA(t->kstack)); |
| 161 | #ifdef ARCH_HAS_FPU |
161 | #ifdef ARCH_HAS_FPU |
| 162 | if (t->saved_fpu_context) |
162 | if (t->saved_fpu_context) |
| 163 | slab_free(fpu_context_slab,t->saved_fpu_context); |
163 | slab_free(fpu_context_slab,t->saved_fpu_context); |
| Line 297... | Line 297... | ||
| 297 | return NULL; |
297 | return NULL; |
| 298 | 298 | ||
| 299 | thread_create_arch(t); |
299 | thread_create_arch(t); |
| 300 | 300 | ||
| 301 | /* Not needed, but good for debugging */ |
301 | /* Not needed, but good for debugging */ |
| 302 | memsetb((uintptr_t)t->kstack, THREAD_STACK_SIZE * 1<<STACK_FRAMES, 0); |
302 | memsetb((uintptr_t) t->kstack, THREAD_STACK_SIZE * 1 << STACK_FRAMES, 0); |
| 303 | 303 | ||
| 304 | ipl = interrupts_disable(); |
304 | ipl = interrupts_disable(); |
| 305 | spinlock_lock(&tidlock); |
305 | spinlock_lock(&tidlock); |
| 306 | t->tid = ++last_tid; |
306 | t->tid = ++last_tid; |
| 307 | spinlock_unlock(&tidlock); |
307 | spinlock_unlock(&tidlock); |
| Line 316... | Line 316... | ||
| 316 | t->saved_context.ipl = interrupts_read(); |
316 | t->saved_context.ipl = interrupts_read(); |
| 317 | interrupts_restore(ipl); |
317 | interrupts_restore(ipl); |
| 318 | 318 | ||
| 319 | memcpy(t->name, name, THREAD_NAME_BUFLEN); |
319 | memcpy(t->name, name, THREAD_NAME_BUFLEN); |
| 320 | 320 | ||
| - | 321 | t->context = THE->context; |
|
| 321 | t->thread_code = func; |
322 | t->thread_code = func; |
| 322 | t->thread_arg = arg; |
323 | t->thread_arg = arg; |
| 323 | t->ticks = -1; |
324 | t->ticks = -1; |
| 324 | t->priority = -1; /* start in rq[0] */ |
325 | t->priority = -1; /* start in rq[0] */ |
| 325 | t->cpu = NULL; |
326 | t->cpu = NULL; |
| Line 531... | Line 532... | ||
| 531 | node = list_get_instance(cur, btree_node_t, leaf_link); |
532 | node = list_get_instance(cur, btree_node_t, leaf_link); |
| 532 | for (i = 0; i < node->keys; i++) { |
533 | for (i = 0; i < node->keys; i++) { |
| 533 | thread_t *t; |
534 | thread_t *t; |
| 534 | 535 | ||
| 535 | t = (thread_t *) node->value[i]; |
536 | t = (thread_t *) node->value[i]; |
| 536 | printf("%s: address=%#zx, tid=%zd, state=%s, task=%#zx, code=%#zx, stack=%#zx, cpu=", |
537 | printf("%s: address=%#zx, tid=%zd, context=%ld, state=%s, task=%#zx, code=%#zx, stack=%#zx, cpu=", |
| 537 | t->name, t, t->tid, thread_states[t->state], t->task, t->thread_code, t->kstack); |
538 | t->name, t, t->tid, t->context, thread_states[t->state], t->task, t->thread_code, t->kstack); |
| 538 | if (t->cpu) |
539 | if (t->cpu) |
| 539 | printf("cpu%zd", t->cpu->id); |
540 | printf("cpu%zd", t->cpu->id); |
| 540 | else |
541 | else |
| 541 | printf("none"); |
542 | printf("none"); |
| 542 | if (t->state == Sleeping) { |
543 | if (t->state == Sleeping) { |