Changeset 49da044 in mainline
- Timestamp:
- 2025-05-20T19:24:46Z (4 weeks ago)
- Children:
- da80de9
- Parents:
- c5b60e25
- Location:
- uspace/srv/bd/hr
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/fge.c
rc5b60e25 r49da044 53 53 #include "fge.h" 54 54 55 /* forward declarations */56 struct fge_fibril_data;57 typedef struct fge_fibril_data fge_fibril_data_t;58 struct wu_queue;59 typedef struct wu_queue wu_queue_t;60 61 55 static void *hr_fpool_make_storage(hr_fpool_t *, ssize_t *); 62 56 static void hr_fpool_group_epilogue(hr_fpool_t *); … … 66 60 static void wu_queue_pop(wu_queue_t *, fge_fibril_data_t *); 67 61 static ssize_t hr_fpool_get_free_slot(hr_fpool_t *); 68 69 struct fge_fibril_data {70 hr_wu_t wu; /* work unit function pointer */71 void *arg; /* work unit function argument */72 hr_fgroup_t *group; /* back-pointer to group */73 ssize_t memslot; /* index to pool bitmap slot */74 };75 76 struct wu_queue {77 fibril_mutex_t lock;78 fibril_condvar_t not_empty;79 fibril_condvar_t not_full;80 fge_fibril_data_t *fexecs; /* circ-buf memory */81 circ_buf_t cbuf;82 };83 84 struct hr_fpool {85 fibril_mutex_t lock;86 bitmap_t bitmap; /* memory slot bitmap */87 wu_queue_t queue;88 fid_t *fibrils;89 uint8_t *wu_storage; /* pre-allocated pool storage */90 size_t fibril_cnt;91 size_t max_wus;92 size_t active_groups;93 bool stop;94 size_t wu_size;95 size_t wu_storage_free_count;96 fibril_condvar_t all_wus_done;97 };98 99 struct hr_fgroup {100 hr_fpool_t *pool;/* back-pointer to pool */101 size_t wu_cnt;/* upper bound of work units */102 size_t submitted; /* number of submitted jobs */103 size_t reserved_cnt; /* no. of reserved wu storage slots */104 size_t reserved_avail;105 size_t *memslots; /* indices to pool bitmap */106 void *own_mem; /* own allocated memory */107 size_t own_used; /* own memory slots used counter */108 errno_t final_errno; /* agreggated errno */109 size_t finished_okay; /* no. of wus that ended with EOK */110 size_t finished_fail; /* no. of wus that ended with != EOK */111 fibril_mutex_t lock;112 fibril_condvar_t all_done;113 };114 62 115 63 hr_fpool_t *hr_fpool_create(size_t fibril_cnt, size_t max_wus, -
uspace/srv/bd/hr/fge.h
rc5b60e25 r49da044 38 38 #define _HR_FGE_H 39 39 40 #include <adt/bitmap.h> 41 #include <adt/circ_buf.h> 40 42 #include <errno.h> 41 43 #include <stddef.h> 42 44 43 struct hr_fpool; 45 /* forward declarations */ 44 46 typedef struct hr_fpool hr_fpool_t; 45 struct hr_fgroup;46 47 typedef struct hr_fgroup hr_fgroup_t; 48 typedef struct fge_fibril_data fge_fibril_data_t; 49 typedef struct wu_queue wu_queue_t; 47 50 48 51 typedef errno_t (*hr_wu_t)(void *); 52 53 struct fge_fibril_data { 54 hr_wu_t wu; /* work unit function pointer */ 55 void *arg; /* work unit function argument */ 56 hr_fgroup_t *group; /* back-pointer to group */ 57 ssize_t memslot; /* index to pool bitmap slot */ 58 }; 59 60 struct wu_queue { 61 fibril_mutex_t lock; 62 fibril_condvar_t not_empty; 63 fibril_condvar_t not_full; 64 fge_fibril_data_t *fexecs; /* circ-buf memory */ 65 circ_buf_t cbuf; 66 }; 67 68 struct hr_fpool { 69 fibril_mutex_t lock; 70 bitmap_t bitmap; /* memory slot bitmap */ 71 wu_queue_t queue; 72 fid_t *fibrils; 73 uint8_t *wu_storage; /* pre-allocated pool storage */ 74 size_t fibril_cnt; 75 size_t max_wus; 76 size_t active_groups; 77 bool stop; 78 size_t wu_size; 79 size_t wu_storage_free_count; 80 fibril_condvar_t all_wus_done; 81 }; 82 83 struct hr_fgroup { 84 hr_fpool_t *pool;/* back-pointer to pool */ 85 size_t wu_cnt;/* upper bound of work units */ 86 size_t submitted; /* number of submitted jobs */ 87 size_t reserved_cnt; /* no. of reserved wu storage slots */ 88 size_t reserved_avail; 89 size_t *memslots; /* indices to pool bitmap */ 90 void *own_mem; /* own allocated memory */ 91 size_t own_used; /* own memory slots used counter */ 92 errno_t final_errno; /* agreggated errno */ 93 size_t finished_okay; /* no. of wus that ended with EOK */ 94 size_t finished_fail; /* no. of wus that ended with != EOK */ 95 fibril_mutex_t lock; 96 fibril_condvar_t all_done; 97 }; 49 98 50 99 extern hr_fpool_t *hr_fpool_create(size_t, size_t, size_t);
Note:
See TracChangeset
for help on using the changeset viewer.