Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_attach_thread() | N/A | ✅ |
evl_attach_self() | N/A | ✅ |
evl_detach_thread() | ▽ | ✕ |
evl_detach_self() | ▽ | ✕ |
evl_demote_thread() | ⚊ | ✅ |
evl_get_self() | ⚊ | ✕ |
evl_get_state() | ⚊ | ✅ |
evl_is_inband() | ⚊ | ✅ |
evl_set_thread_mode() | ⚊ | ✅ |
evl_subscribe() | ▽ | ✕ |
evl_switch_inband() | ▽ | ✕ |
evl_switch_oob() | △ | ✕ |
evl_unblock_thread() | ⚊ | ✅ |
evl_unsubscribe() | ▽ | ✕ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_get_schedattr() | ⚊ | ✅ |
evl_set_schedattr() | ⚊ | ✅ |
evl_control_sched() | ⚊ | ✅ |
evl_get_cpustate() | ⚊ | ✅ |
evl_yield() | △ | ✕ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_read_clock() | ⚊ | ✅ |
evl_set_clock() | ⚊ | ✅ |
evl_get_clock_resolution() | ⚊ | ✅ |
evl_sleep_until() | △ | ✕ |
evl_usleep() | △ | ✕ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_new_timer() | ▽ | ✅ |
evl_set_timer() | ⚊ | ✅ |
evl_get_timer() | ⚊ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_mutex() | ▽ | ✅ |
evl_new_mutex() | ▽ | ✅ |
evl_open_mutex() | ▽ | ✅ |
evl_lock_mutex() | △4 | ✕ |
evl_trylock_mutex() | △4 | ✕ |
evl_timedlock_mutex() | △4 | ✕ |
evl_unlock_mutex() | ⚊3 | ✕ |
evl_get_mutex_ceiling() | ⚊ | ✅ |
evl_set_mutex_ceiling() | ⚊ | ✅ |
evl_close_mutex() | ▽ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_rwlock() | ▽ | ✅ |
evl_new_rwlock() | ▽ | ✅ |
evl_lock_read() | △4 | ✕ |
evl_trylock_read() | △4 | ✅ |
evl_unlock_read() | ⚊ | ✅ |
evl_lock_write() | △4 | ✕ |
evl_trylock_write() | △4 | ✅ |
evl_unlock_write() | ⚊ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_event() | ▽ | ✅ |
evl_new_event() | ▽ | ✅ |
evl_open_event() | ▽ | ✅ |
evl_wait_event() | ⚊4 | ✕ |
evl_timedwait_event() | ⚊4 | ✕ |
evl_signal_event() | ⚊4 | ✕ |
evl_signal_thread() | ⚊4 | ✕ |
evl_broadcast_event() | ⚊4 | ✕ |
evl_close_event() | ▽ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_flags() | ▽ | ✅ |
evl_new_flags() | ▽ | ✅ |
evl_open_flags() | ▽ | ✅ |
evl_wait_flags() | △4 | ✕ |
evl_wait_some_flags() | △4 | ✕ |
evl_wait_exact_flags() | △4 | ✕ |
evl_timedwait_flags() | △4 | ✕ |
evl_timedwait_some_flags() | △4 | ✕ |
evl_timedwait_exact_flags() | △4 | ✕ |
evl_trywait_flags() | ⚊4 | ✅ |
evl_trywait_some_flags() | ⚊4 | ✅ |
evl_trywait_exact_flags() | ⚊4 | ✅ |
evl_peek_flags() | ⚊ | ✅ |
evl_post_flags() | ⚊4 | ✅ |
evl_broadcast_flags() | ⚊4 | ✅ |
evl_close_flags() | ▽ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_sem() | ▽ | ✅ |
evl_new_sem() | ▽ | ✅ |
evl_open_sem() | ▽ | ✅ |
evl_get_sem() | △4 | ✕ |
evl_timedget_sem() | △4 | ✕ |
evl_tryget_sem() | ⚊4 | ✅ |
evl_peek_sem() | ⚊ | ✅ |
evl_put_sem() | ⚊4 | ✅ |
evl_close_sem() | ▽ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_observable() | ▽ | ✅ |
evl_new_observable() | ▽ | ✅ |
evl_read_observable() | △5 | ✅ |
evl_update_observable() | △5 | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_new_poll() | ▽ | ✅ |
evl_add_pollfd() | △ | ✕ |
evl_mod_pollfd() | △ | ✕ |
evl_del_pollfd() | △ | ✕ |
evl_poll_sem() | △ | ✕ |
evl_timedpoll_sem() | △ | ✕ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_init_heap() | ▽ | ✅ |
evl_init_heap_unlocked() | ⚊ | ✅ |
evl_extend_heap() | ⚊ | ✕ |
evl_extend_heap_unlocked() | ⚊ | ✅ |
evl_alloc_block() | △3 | ✕ |
evl_alloc_block_unlocked() | ⚊ | ✅ |
evl_free_block() | △3 | ✕ |
evl_free_block_unlocked() | ⚊ | ✅ |
evl_check_block() | △3 | ✕ |
evl_check_block_unlocked() | ⚊ | ✅ |
evl_destroy_heap() | ▽ | ✅ |
evl_destroy_heap_unlocked() | ⚊ | ✅ |
evl_heap_raw_size() | ⚊ | ✅ |
evl_heap_size() | ⚊ | ✅ |
evl_heap_used() | ⚊ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_proxy() | ▽ | ✅ |
evl_new_proxy() | ▽ | ✅ |
evl_write_proxy() | ⚊ | ✅ |
evl_read_proxy() | ⚊ | ✅ |
evl_vprint_proxy() | ⚊ | ✅ |
evl_print_proxy() | ⚊ | ✅ |
evl_printf() | ⚊ | ✅ |
evl_eprintf() | ⚊ | ✅ |
evl_stdout() | ⚊ | ✅ |
evl_stderr() | ⚊ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_create_xbuf() | ▽ | ✅ |
evl_new_xbuf() | ▽ | ✅ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
oob_read() | △ | ✕ |
oob_write() | △ | ✕ |
oob_ioctl() | △ | ✕ |
Function name | EVL Switch1 | non-EVL2 |
---|---|---|
evl_init() | N/A | ✅ |
evl_get_version() | ⚊ | ✅ |
evl_sigdebug_handler() | N/A | ✅ |
1 Defines the stage switching behavior for EVL threads:
△ the core may promote the caller to the out-of-band execution stage if running in-band at the time of the call.
▽ the core may demote the caller to the in-band execution stage if running out-of-band at the time of the call.
⚊ the call does not entail any stage switch.
2 Whether this call is also available to non-EVL threads, i.e. threads not attached to the EVL core.
3 Except if the caller undergoes the SCHED_WEAK policy, in which case it is switched back to in-band mode if it has released the last EVL mutex it holds by the end of the call.
4 As an exception, if this synchronization object was
statically initialized (EVL_*_INITIALIZER()
), this routine may
switch the caller to the in-band stage at the first access in order to
finalize the construction before carrying out the requested
operation. This is required only once in the object’s lifetime.
5 If the caller undergoes the SCHED_WEAK policy, or is not attached to the core, this system call is directly handled from the in-band stage. In all other cases, the caller may be switched to the out-of-band execution stage.