5 | | The [source:soft/giet_vm/giet_common/locks.c locks.c] and [source:soft/giet_vm/giet_common/locks.h locks.h] files define the functions used by the kernel to take & release locks protecting exclusive access to a shared resource. These locks are implemented as spin-locks, with a waiting queue (based on a ticket allocator scheme) to enforce fairness and avoid live-lock situations. The GIET_LOCK_MAX_TICKET define the wrapping value for the ticket allocator. |
| 5 | The [source:soft/giet_vm/giet_common/locks.c locks.c] and [source:soft/giet_vm/giet_common/locks.h locks.h] files define the functions used by the kernel to take & release locks protecting exclusive access to a shared resource. |
| 6 | |
| 7 | The GIET_VM kernel define two types of spin-lock: |
| 8 | * The '''spin_lock_t''' implements a spin-lock with a waiting queue (based on a ticket allocator scheme), to enforce fairness and avoid live-lock situations. The GIET_LOCK_MAX_TICKET define the wrapping value for the ticket allocator. |
| 9 | * The '''simple_lock_t''' implements a spin-lock without waiting queue. It is only used by the TTY0 access functions, to get exclusive access to the TTY0 kernel terminal |
23 | | === void '''_lock_release'''( giet_lock_t * lock ) === |
24 | | This function releases the spin-lock. It must always be called after a successful _lock_acquire(). |
| 27 | === void '''_lock_release'''( spin_lock_t * lock ) === |
| 28 | This function releases the lock. It must always be called after a successful _lock_acquire(). |
| 29 | |
| 30 | === void '''_simple_lock_acquire'''( simple_lock_t * lock ) === |
| 31 | This blocking function does not implement any ordered allocation. It returns only when the lock as been granted. |
| 32 | |
| 33 | === void '''_simple_lock_release'''( simple_lock_t * lock ) === |
| 34 | This function releases the lock. It must always be called after a successful _simple_lock_acquire(). |