Line data Source code
1 : #ifndef HEADER_fd_src_flamenco_runtime_fd_pending_slots_h 2 : #define HEADER_fd_src_flamenco_runtime_fd_pending_slots_h 3 : 4 : #include "../../util/fd_util.h" 5 : 6 : 7 0 : #define FD_PENDING_MAX ( 1U << 16U ) /* 128 kb */ 8 0 : #define FD_PENDING_MASK ( FD_PENDING_MAX - 1U ) 9 : 10 : struct fd_pending_slots { 11 : ulong start; 12 : ulong end; 13 : ulong lo_wmark; 14 : ulong lock; 15 : long * pending; /* pending slots to try to prepare */ 16 : }; 17 : typedef struct fd_pending_slots fd_pending_slots_t; 18 : 19 : FD_PROTOTYPES_BEGIN 20 : 21 : FD_FN_CONST static inline ulong 22 0 : fd_pending_slots_align( void ) { 23 0 : return alignof( fd_pending_slots_t ); 24 0 : } 25 : 26 : FD_FN_CONST static inline ulong 27 0 : fd_pending_slots_footprint( void ) { 28 0 : return sizeof( fd_pending_slots_t ) + (sizeof(long) * FD_PENDING_MAX); 29 0 : } 30 : 31 : void * 32 : fd_pending_slots_new( void * mem, ulong lo_wmark ); 33 : 34 : fd_pending_slots_t * 35 : fd_pending_slots_join( void * pending_slots ); 36 : 37 : void * 38 : fd_pending_slots_leave( fd_pending_slots_t const * pending_slots ); 39 : 40 : void * 41 : fd_pending_slots_delete( void * pending_slots ); 42 : 43 : int 44 : fd_pending_slots_check( fd_pending_slots_t const * pending_slots, 45 : ulong slot ); 46 : 47 : void 48 : fd_pending_slots_add( fd_pending_slots_t * pending_slots, 49 : ulong slot, 50 : long when ); 51 : 52 : void 53 : fd_pending_slots_set_lo_wmark( fd_pending_slots_t * pending_slots, 54 : ulong slot ); 55 : 56 : ulong 57 : fd_pending_slots_iter_init( fd_pending_slots_t * pending_slots ); 58 : 59 : ulong 60 : fd_pending_slots_iter_next( fd_pending_slots_t * pending_slots, 61 : long now, 62 : ulong i ); 63 : 64 : long 65 : fd_pending_slots_get( fd_pending_slots_t * pending_slots, 66 : ulong slot ); 67 : 68 : FD_PROTOTYPES_END 69 : 70 : #endif