mirror of
https://github.com/apache/nuttx.git
synced 2026-08-20 04:58:28 +00:00
- `g_iob_sem.semcount` must be equal to the total number of free IOBs. It can also be negative if there are no free IOBs and there are threads waiting for an IOB. - g_throttle_sem.semcount represents the number of IOBs available for throttled IOB allocations. Like any other semaphore, it should only go negative if there is a thread waiting for it. - Both semaphores are related to the same resource (free IOBs), hence, they must be incremented/decremented simultaneously: - Whenever a IOB buffer is freed, if a thread is waiting for a non-throttled IOB or a thread is waiting for a throttled IOB and we have at least `CONFIG_IOB_THROTTLE` buffers available, the IOB is put in the committed list (`g_iob_committed`). Otherwise, it is put in the common free list (`g_iob_freelist`). - `g_iob_sem` is always incremented when an IOB buffer is freed, but `g_throttle_sem` is incremented only if we have at least CONFIG_IOB_THROTTLE buffers free. - Both semaphores are posted with the schedule locked to avoid any mismatches in the semaphores count. - If a task is waiting for an IOB semaphore (`iob_allocwait`) is awakened and would check the `g_iob_committed`. The highest priority task waiting for a semaphore will be awakened first. |
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| iob.h | ||
| iob_add_queue.c | ||
| iob_alloc.c | ||
| iob_alloc_qentry.c | ||
| iob_clone.c | ||
| iob_concat.c | ||
| iob_contig.c | ||
| iob_copyin.c | ||
| iob_copyout.c | ||
| iob_count.c | ||
| iob_dump.c | ||
| iob_free.c | ||
| iob_free_chain.c | ||
| iob_free_qentry.c | ||
| iob_free_queue.c | ||
| iob_free_queue_qentry.c | ||
| iob_get_queue_info.c | ||
| iob_initialize.c | ||
| iob_navail.c | ||
| iob_notifier.c | ||
| iob_pack.c | ||
| iob_peek_queue.c | ||
| iob_remove_queue.c | ||
| iob_reserve.c | ||
| iob_statistics.c | ||
| iob_tailroom.c | ||
| iob_test.c | ||
| iob_trimhead.c | ||
| iob_trimhead_queue.c | ||
| iob_trimtail.c | ||
| iob_update_pktlen.c | ||
| Kconfig | ||
| Make.defs | ||