Rev 1709 | Rev 1720 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1709 | Rev 1719 | ||
|---|---|---|---|
| Line 24... | Line 24... | ||
| 24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | */ |
27 | */ |
| 28 | 28 | ||
| 29 | /** @addtogroup libc |
29 | /** @addtogroup libc |
| 30 | * @{ |
30 | * @{ |
| 31 | */ |
31 | */ |
| 32 | /** @file |
32 | /** @file |
| 33 | */ |
33 | */ |
| 34 | 34 | ||
| Line 49... | Line 49... | ||
| 49 | 49 | ||
| 50 | static LIST_INITIALIZE(ready_list); |
50 | static LIST_INITIALIZE(ready_list); |
| 51 | static LIST_INITIALIZE(serialized_list); |
51 | static LIST_INITIALIZE(serialized_list); |
| 52 | static LIST_INITIALIZE(manager_list); |
52 | static LIST_INITIALIZE(manager_list); |
| 53 | 53 | ||
| 54 | static void psthread_exit(void) __attribute__ ((noinline)); |
- | |
| 55 | static void psthread_main(void); |
54 | static void psthread_main(void); |
| 56 | 55 | ||
| 57 | static atomic_t psthread_futex = FUTEX_INITIALIZER; |
56 | static atomic_t psthread_futex = FUTEX_INITIALIZER; |
| 58 | /** Count of real threads that are in async_serialized mode */ |
57 | /** Count of real threads that are in async_serialized mode */ |
| 59 | static int serialized_threads; /* Protected by async_futex */ |
58 | static int serialized_threads; /* Protected by async_futex */ |
| Line 189... | Line 188... | ||
| 189 | * |
188 | * |
| 190 | * @return Value returned by the finished thread. |
189 | * @return Value returned by the finished thread. |
| 191 | */ |
190 | */ |
| 192 | int psthread_join(pstid_t psthrid) |
191 | int psthread_join(pstid_t psthrid) |
| 193 | { |
192 | { |
| 194 | volatile psthread_data_t *pt, *mypt; |
193 | volatile psthread_data_t *pt; |
| 195 | volatile int retval; |
194 | volatile int retval; |
| 196 | 195 | ||
| 197 | /* Handle psthrid = Kernel address -> it is wait for call */ |
196 | /* Handle psthrid = Kernel address -> it is wait for call */ |
| 198 | pt = (psthread_data_t *) psthrid; |
197 | pt = (psthread_data_t *) psthrid; |
| 199 | 198 | ||
| Line 236... | Line 235... | ||
| 236 | pt->finished = 0; |
235 | pt->finished = 0; |
| 237 | pt->waiter = NULL; |
236 | pt->waiter = NULL; |
| 238 | pt->flags = 0; |
237 | pt->flags = 0; |
| 239 | 238 | ||
| 240 | context_save(&pt->ctx); |
239 | context_save(&pt->ctx); |
| 241 | context_set(&pt->ctx, FADDR(psthread_main), pt->stack, PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize(), |
240 | context_set(&pt->ctx, FADDR(psthread_main), pt->stack, PSTHREAD_INITIAL_STACK_PAGES_NO*getpagesize(), pt->tcb); |
| 242 | pt->tcb); |
- | |
| 243 | 241 | ||
| 244 | return (pstid_t )pt; |
242 | return (pstid_t )pt; |
| 245 | } |
243 | } |
| 246 | 244 | ||
| 247 | /** Add a thread to ready list */ |
245 | /** Add a thread to ready list */ |
| Line 305... | Line 303... | ||
| 305 | { |
303 | { |
| 306 | serialization_count--; |
304 | serialization_count--; |
| 307 | } |
305 | } |
| 308 | 306 | ||
| 309 | 307 | ||
| 310 | /** @} |
308 | /** @} |
| 311 | */ |
309 | */ |
| 312 | - | ||
| 313 | - | ||