walnux/mm
Tiago Medicci Serrano 50aeea2dc0 mm/iob: Simplify IOB alloc/free logic
- `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.
2024-06-25 15:21:00 +08:00
..
bin build: add initial cmake build system 2023-07-08 13:50:48 +08:00
circbuf mm: Fix some typos 2023-11-24 09:57:10 -08:00
iob mm/iob: Simplify IOB alloc/free logic 2024-06-25 15:21:00 +08:00
kasan kasan: Implementing global variable out of bounds detection 2024-04-07 23:31:13 +08:00
kbin build: add initial cmake build system 2023-07-08 13:50:48 +08:00
kmap mm/kmap: Finalize kmap implementation for RISC-V 2023-11-23 16:38:41 -08:00
kmm_heap cmake:complete missing changes during cmake reforming for mm 2023-09-08 21:20:16 +03:00
map mm/map: revise device mapping functions 2024-05-03 23:58:39 +08:00
mempool mm: seperate mm_pool and mm_pool init 2024-06-23 11:09:39 +08:00
mm_gran mm/gran: Fix GRAN_ALIGNED() macro 2024-06-03 22:06:38 +08:00
mm_heap mm: seperate mm_pool and mm_pool init 2024-06-23 11:09:39 +08:00
shm Documentation: remove all migrated READMEs 2023-10-29 21:03:54 -03:00
tlsf mm: seperate mm_pool and mm_pool init 2024-06-23 11:09:39 +08:00
ubsan cmake:complete missing changes during cmake reforming for mm 2023-09-08 21:20:16 +03:00
umm_heap cmake:complete missing changes during cmake reforming for mm 2023-09-08 21:20:16 +03:00
CMakeLists.txt build: add initial cmake build system 2023-07-08 13:50:48 +08:00
Kconfig mm: seperate mm_pool and mm_pool init 2024-06-23 11:09:39 +08:00
Makefile mm/kmm_map: Add support to dynamically map pages into kernel virtual memory 2023-06-02 10:50:26 +08:00