Changeset d574c11 in mainline
- Timestamp:
- 2025-06-17T13:27:48Z (4 days ago)
- Children:
- 66ef60b
- Parents:
- f0950d2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/fge.c
rf0950d2 rd574c11 52 52 53 53 #include "fge.h" 54 #include "util.h" 54 55 55 56 static void *hr_fpool_make_storage(hr_fpool_t *, ssize_t *); … … 64 65 size_t wu_storage_size) 65 66 { 66 /* TODO: allow wu_storage_size to be 0 (we want to save mem) */67 67 assert(max_wus > 0 && wu_storage_size > 0); 68 68 … … 102 102 result->fibrils[i] = fibril_create(fge_fibril, result); 103 103 fibril_start(result->fibrils[i]); 104 /* fibril_detach(result->fibrils[i]); */ 104 105 } 105 106 … … 139 140 assert(wu_cnt > 0); 140 141 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)); 151 143 152 144 result->reserved_cnt = 0; … … 169 161 */ 170 162 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)); 174 164 result->reserved_cnt = taking; 175 165 parent->wu_storage_free_count = 0; … … 178 168 if (result->reserved_cnt > 0) { 179 169 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); 183 171 } 184 172 … … 198 186 199 187 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;212 188 } 213 189 … … 217 193 218 194 fibril_mutex_lock(&group->lock); 195 196 assert(group->submitted < group->wu_cnt); 219 197 220 198 if (group->reserved_avail > 0) { … … 225 203 group->memslots[group->submitted] = memslot; 226 204 } else { 205 assert(group->own_mem != NULL); 227 206 storage = 228 207 group->own_mem + group->pool->wu_size * group->own_used;
Note:
See TracChangeset
for help on using the changeset viewer.