Ignore:
File:
1 edited

Legend:

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

    receff5f rc0699467  
    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,
     
    9596fibril_t *fibril_setup(void)
    9697{
    97         tcb_t *tcb = tls_make();
     98        tcb_t *tcb = __make_tls();
    9899        if (!tcb)
    99100                return NULL;
     
    101102        fibril_t *fibril = malloc(sizeof(fibril_t));
    102103        if (!fibril) {
    103                 tls_free(tcb);
     104                __free_tls(tcb);
    104105                return NULL;
    105106        }
     
    122123void fibril_teardown(fibril_t *fibril)
    123124{
    124         tls_free(fibril->tcb);
     125        __free_tls(fibril->tcb);
    125126        free(fibril);
    126127}
     
    194195                                         * stack member filled.
    195196                                         */
    196                                         as_area_destroy(stack);
     197                                        free(stack);
    197198                                }
    198199                                fibril_teardown(srcf->clean_after_me);
     
    256257 * @param func Implementing function of the new fibril.
    257258 * @param arg Argument to pass to func.
    258  * @param stksz Stack size in bytes.
    259259 *
    260260 * @return 0 on failure or TLS of the new fibril.
    261261 *
    262262 */
    263 fid_t fibril_create_generic(int (*func)(void *), void *arg, size_t stksz)
     263fid_t fibril_create(int (*func)(void *), void *arg)
    264264{
    265265        fibril_t *fibril;
     
    269269                return 0;
    270270       
    271         size_t stack_size = (stksz == FIBRIL_DFLT_STK_SIZE) ?
    272             stack_size_get() : stksz;
    273         fibril->stack = as_area_create((void *) -1, stack_size,
    274             AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE | AS_AREA_GUARD |
    275             AS_AREA_LATE_RESERVE);
    276         if (fibril->stack == (void *) -1) {
     271        fibril->stack =
     272            (char *) malloc(FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize());
     273        if (!fibril->stack) {
    277274                fibril_teardown(fibril);
    278275                return 0;
     
    284281        context_save(&fibril->ctx);
    285282        context_set(&fibril->ctx, FADDR(fibril_main), fibril->stack,
    286             stack_size, fibril->tcb);
     283            FIBRIL_INITIAL_STACK_PAGES_NO * getpagesize(), fibril->tcb);
    287284
    288285        return (fid_t) fibril;
    289 }
    290 
    291 /** Delete a fibril that has never run.
    292  *
    293  * Free resources of a fibril that has been created with fibril_create()
    294  * but never readied using fibril_add_ready().
    295  *
    296  * @param fid Pointer to the fibril structure of the fibril to be
    297  *            added.
    298  */
    299 void fibril_destroy(fid_t fid)
    300 {
    301         fibril_t *fibril = (fibril_t *) fid;
    302        
    303         as_area_destroy(fibril->stack);
    304         fibril_teardown(fibril);
    305286}
    306287
Note: See TracChangeset for help on using the changeset viewer.