Changes in uspace/lib/c/generic/fibril.c [32d19f7:c1b979a] in mainline
- File:
-
- 1 edited
-
uspace/lib/c/generic/fibril.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/fibril.c
r32d19f7 rc1b979a 37 37 #include <fibril.h> 38 38 #include <thread.h> 39 #include <stack.h> 39 40 #include <tls.h> 40 41 #include <malloc.h> 42 #include <abi/mm/as.h> 43 #include <as.h> 41 44 #include <unistd.h> 42 45 #include <stdio.h> … … 47 50 #include <async.h> 48 51 49 #ifndef FIBRIL_INITIAL_STACK_PAGES_NO50 #define FIBRIL_INITIAL_STACK_PAGES_NO 151 #endif52 53 52 /** 54 53 * This futex serializes access to ready_list, … … 60 59 static LIST_INITIALIZE(serialized_list); 61 60 static LIST_INITIALIZE(manager_list); 61 static LIST_INITIALIZE(fibril_list); 62 62 63 63 /** Number of threads that are executing a manager fibril. */ … … 96 96 fibril_t *fibril_setup(void) 97 97 { 98 tcb_t *tcb = __make_tls();98 tcb_t *tcb = tls_make(); 99 99 if (!tcb) 100 100 return NULL; … … 102 102 fibril_t *fibril = malloc(sizeof(fibril_t)); 103 103 if (!fibril) { 104 __free_tls(tcb);104 tls_free(tcb); 105 105 return NULL; 106 106 } … … 117 117 118 118 fibril->waits_for = NULL; 119 list_append(&fibril->all_link, &fibril_list); 119 120 120 121 return fibril; … … 123 124 void fibril_teardown(fibril_t *fibril) 124 125 { 125 __free_tls(fibril->tcb); 126 list_remove(&fibril->all_link); 127 tls_free(fibril->tcb); 126 128 free(fibril); 127 129 } … … 195 197 * stack member filled. 196 198 */ 197 free(stack);199 as_area_destroy(stack); 198 200 } 199 201 fibril_teardown(srcf->clean_after_me); … … 257 259 * @param func Implementing function of the new fibril. 258 260 * @param arg Argument to pass to func. 261 * @param stksz Stack size in bytes. 259 262 * 260 263 * @return 0 on failure or TLS of the new fibril. 261 264 * 262 265 */ 263 fid_t fibril_create (int (*func)(void *), void *arg)266 fid_t fibril_create_generic(int (*func)(void *), void *arg, size_t stksz) 264 267 { 265 268 fibril_t *fibril; … … 269 272 return 0; 270 273 271 fibril->stack = 272 (char *) malloc(FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize()); 273 if (!fibril->stack) { 274 size_t stack_size = (stksz == FIBRIL_DFLT_STK_SIZE) ? 275 stack_size_get() : stksz; 276 fibril->stack = as_area_create((void *) -1, stack_size, 277 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD | 278 AS_AREA_LATE_RESERVE); 279 if (fibril->stack == (void *) -1) { 274 280 fibril_teardown(fibril); 275 281 return 0; … … 281 287 context_save(&fibril->ctx); 282 288 context_set(&fibril->ctx, FADDR(fibril_main), fibril->stack, 283 FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize(), fibril->tcb);289 stack_size, fibril->tcb); 284 290 285 291 return (fid_t) fibril; … … 298 304 fibril_t *fibril = (fibril_t *) fid; 299 305 300 free(fibril->stack);306 as_area_destroy(fibril->stack); 301 307 fibril_teardown(fibril); 302 308 }
Note:
See TracChangeset
for help on using the changeset viewer.
