Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/fibril.c

    rc1b979a r32d19f7  
    3737#include <fibril.h>
    3838#include <thread.h>
    39 #include <stack.h>
    4039#include <tls.h>
    4140#include <malloc.h>
    42 #include <abi/mm/as.h>
    43 #include <as.h>
    4441#include <unistd.h>
    4542#include <stdio.h>
     
    5047#include <async.h>
    5148
     49#ifndef FIBRIL_INITIAL_STACK_PAGES_NO
     50        #define FIBRIL_INITIAL_STACK_PAGES_NO  1
     51#endif
     52
    5253/**
    5354 * This futex serializes access to ready_list,
     
    5960static LIST_INITIALIZE(serialized_list);
    6061static LIST_INITIALIZE(manager_list);
    61 static LIST_INITIALIZE(fibril_list);
    6262
    6363/** Number of threads that are executing a manager fibril. */
     
    9696fibril_t *fibril_setup(void)
    9797{
    98         tcb_t *tcb = tls_make();
     98        tcb_t *tcb = __make_tls();
    9999        if (!tcb)
    100100                return NULL;
     
    102102        fibril_t *fibril = malloc(sizeof(fibril_t));
    103103        if (!fibril) {
    104                 tls_free(tcb);
     104                __free_tls(tcb);
    105105                return NULL;
    106106        }
     
    117117       
    118118        fibril->waits_for = NULL;
    119         list_append(&fibril->all_link, &fibril_list);
    120119       
    121120        return fibril;
     
    124123void fibril_teardown(fibril_t *fibril)
    125124{
    126         list_remove(&fibril->all_link);
    127         tls_free(fibril->tcb);
     125        __free_tls(fibril->tcb);
    128126        free(fibril);
    129127}
     
    197195                                         * stack member filled.
    198196                                         */
    199                                         as_area_destroy(stack);
     197                                        free(stack);
    200198                                }
    201199                                fibril_teardown(srcf->clean_after_me);
     
    259257 * @param func Implementing function of the new fibril.
    260258 * @param arg Argument to pass to func.
    261  * @param stksz Stack size in bytes.
    262259 *
    263260 * @return 0 on failure or TLS of the new fibril.
    264261 *
    265262 */
    266 fid_t fibril_create_generic(int (*func)(void *), void *arg, size_t stksz)
     263fid_t fibril_create(int (*func)(void *), void *arg)
    267264{
    268265        fibril_t *fibril;
     
    272269                return 0;
    273270       
    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) {
     271        fibril->stack =
     272            (char *) malloc(FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize());
     273        if (!fibril->stack) {
    280274                fibril_teardown(fibril);
    281275                return 0;
     
    287281        context_save(&fibril->ctx);
    288282        context_set(&fibril->ctx, FADDR(fibril_main), fibril->stack,
    289             stack_size, fibril->tcb);
     283            FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize(), fibril->tcb);
    290284
    291285        return (fid_t) fibril;
     
    304298        fibril_t *fibril = (fibril_t *) fid;
    305299       
    306         as_area_destroy(fibril->stack);
     300        free(fibril->stack);
    307301        fibril_teardown(fibril);
    308302}
Note: See TracChangeset for help on using the changeset viewer.