Rev 2440 | Rev 2451 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2440 | Rev 2446 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | /* |
1 | /* |
| 2 | * Copyright (c) 2001-2004 Jakub Jermar |
2 | * Copyright (c) 2001-2007 Jakub Jermar |
| 3 | * All rights reserved. |
3 | * All rights reserved. |
| 4 | * |
4 | * |
| 5 | * Redistribution and use in source and binary forms, with or without |
5 | * Redistribution and use in source and binary forms, with or without |
| 6 | * modification, are permitted provided that the following conditions |
6 | * modification, are permitted provided that the following conditions |
| 7 | * are met: |
7 | * are met: |
| Line 38... | Line 38... | ||
| 38 | #include <synch/waitq.h> |
38 | #include <synch/waitq.h> |
| 39 | #include <proc/task.h> |
39 | #include <proc/task.h> |
| 40 | #include <time/timeout.h> |
40 | #include <time/timeout.h> |
| 41 | #include <cpu.h> |
41 | #include <cpu.h> |
| 42 | #include <synch/rwlock.h> |
42 | #include <synch/rwlock.h> |
| - | 43 | #include <synch/spinlock.h> |
|
| 43 | #include <adt/btree.h> |
44 | #include <adt/btree.h> |
| 44 | #include <mm/slab.h> |
45 | #include <mm/slab.h> |
| 45 | #include <arch/cpu.h> |
46 | #include <arch/cpu.h> |
| 46 | #include <mm/tlb.h> |
47 | #include <mm/tlb.h> |
| 47 | #include <proc/uarg.h> |
48 | #include <proc/uarg.h> |
| Line 78... | Line 79... | ||
| 78 | Ready, |
79 | Ready, |
| 79 | /** Threads are in this state before they are first readied. */ |
80 | /** Threads are in this state before they are first readied. */ |
| 80 | Entering, |
81 | Entering, |
| 81 | /** After a thread calls thread_exit(), it is put into Exiting state. */ |
82 | /** After a thread calls thread_exit(), it is put into Exiting state. */ |
| 82 | Exiting, |
83 | Exiting, |
| 83 | /** Threads that were not detached but exited are in the Undead state. */ |
84 | /** Threads that were not detached but exited are in the JoinMe state. */ |
| 84 | Undead |
85 | JoinMe |
| 85 | } state_t; |
86 | } state_t; |
| 86 | 87 | ||
| 87 | /** Join types. */ |
- | |
| 88 | typedef enum { |
- | |
| 89 | None, |
- | |
| 90 | TaskClnp, /**< The thread will be joined by ktaskclnp thread. */ |
- | |
| 91 | TaskGC /**< The thread will be joined by ktaskgc thread. */ |
- | |
| 92 | } thread_join_type_t; |
- | |
| 93 | - | ||
| 94 | /** Thread structure. There is one per thread. */ |
88 | /** Thread structure. There is one per thread. */ |
| 95 | typedef struct thread { |
89 | typedef struct thread { |
| 96 | link_t rq_link; /**< Run queue link. */ |
90 | link_t rq_link; /**< Run queue link. */ |
| 97 | link_t wq_link; /**< Wait queue link. */ |
91 | link_t wq_link; /**< Wait queue link. */ |
| 98 | link_t th_link; /**< Links to threads within containing task. */ |
92 | link_t th_link; /**< Links to threads within containing task. */ |
| Line 150... | Line 144... | ||
| 150 | * If true, the thread will not go to sleep at all and will call |
144 | * If true, the thread will not go to sleep at all and will call |
| 151 | * thread_exit() before returning to userspace. |
145 | * thread_exit() before returning to userspace. |
| 152 | */ |
146 | */ |
| 153 | bool interrupted; |
147 | bool interrupted; |
| 154 | 148 | ||
| 155 | /** Who joinins the thread. */ |
- | |
| 156 | thread_join_type_t join_type; |
- | |
| 157 | /** If true, thread_join_timeout() cannot be used on this thread. */ |
149 | /** If true, thread_join_timeout() cannot be used on this thread. */ |
| 158 | bool detached; |
150 | bool detached; |
| 159 | /** Waitq for thread_join_timeout(). */ |
151 | /** Waitq for thread_join_timeout(). */ |
| 160 | waitq_t join_wq; |
152 | waitq_t join_wq; |
| - | 153 | /** Link used in the joiner_head list. */ |
|
| - | 154 | link_t joiner_link; |
|
| 161 | 155 | ||
| 162 | fpu_context_t *saved_fpu_context; |
156 | fpu_context_t *saved_fpu_context; |
| 163 | int fpu_context_exists; |
157 | int fpu_context_exists; |
| 164 | 158 | ||
| 165 | /* |
159 | /* |