Changeset d574c11 in mainline


Ignore:
Timestamp:
2025-06-17T13:27:48Z (4 days ago)
Author:
Miroslav Cimerman <mc@…>
Children:
66ef60b
Parents:
f0950d2
Message:

hr: fge: use malloc_waitok()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/hr/fge.c

    rf0950d2 rd574c11  
    5252
    5353#include "fge.h"
     54#include "util.h"
    5455
    5556static void *hr_fpool_make_storage(hr_fpool_t *, ssize_t *);
     
    6465    size_t wu_storage_size)
    6566{
    66         /* TODO: allow wu_storage_size to be 0 (we want to save mem) */
    6767        assert(max_wus > 0 && wu_storage_size > 0);
    6868
     
    102102                result->fibrils[i] = fibril_create(fge_fibril, result);
    103103                fibril_start(result->fibrils[i]);
     104                /* fibril_detach(result->fibrils[i]); */
    104105        }
    105106
     
    139140        assert(wu_cnt > 0);
    140141
    141         /*
    142          * XXX: we can also get rid of this malloc() call,
    143          * somewhat...
    144          *
    145          * Have some fgroups also pre-allocated for maximum
    146          * pre-allocation power :-)
    147          */
    148         hr_fgroup_t *result = malloc(sizeof(hr_fgroup_t));
    149         if (result == NULL)
    150                 return NULL;
     142        hr_fgroup_t *result = malloc_waitok(sizeof(hr_fgroup_t));
    151143
    152144        result->reserved_cnt = 0;
     
    169161                 */
    170162                size_t taking = parent->wu_storage_free_count;
    171                 result->own_mem = malloc(parent->wu_size * (wu_cnt - taking));
    172                 if (result->own_mem == NULL)
    173                         goto bad;
     163                result->own_mem = malloc_waitok(parent->wu_size * (wu_cnt - taking));
    174164                result->reserved_cnt = taking;
    175165                parent->wu_storage_free_count = 0;
     
    178168        if (result->reserved_cnt > 0) {
    179169                result->memslots =
    180                     malloc(sizeof(size_t) * result->reserved_cnt);
    181                 if (result->memslots == NULL)
    182                         goto bad;
     170                    malloc_waitok(sizeof(size_t) * result->reserved_cnt);
    183171        }
    184172
     
    198186
    199187        return result;
    200 
    201 bad:
    202         parent->wu_storage_free_count += result->reserved_cnt;
    203         fibril_mutex_unlock(&parent->lock);
    204 
    205         if (result->memslots != NULL)
    206                 free(result->memslots);
    207         if (result->own_mem != NULL)
    208                 free(result->own_mem);
    209         free(result);
    210 
    211         return NULL;
    212188}
    213189
     
    217193
    218194        fibril_mutex_lock(&group->lock);
     195
     196        assert(group->submitted < group->wu_cnt);
    219197
    220198        if (group->reserved_avail > 0) {
     
    225203                group->memslots[group->submitted] = memslot;
    226204        } else {
     205                assert(group->own_mem != NULL);
    227206                storage =
    228207                    group->own_mem + group->pool->wu_size * group->own_used;
Note: See TracChangeset for help on using the changeset viewer.