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 | - |