30 asm volatile(
"pause");
34 panic(
NULL,
"Deadlock in rwlock_read_acquire detected");
45 panic(
NULL,
"Deadlock in rwlock_read_acquire detected");
48 asm volatile(
"pause");
77 panic(
NULL,
"Deadlock in rwlock_write_acquire detected");
80 asm volatile(
"pause");
88 panic(
NULL,
"Deadlock in rwlock_write_acquire detected");
91 asm volatile(
"pause");
94 bool expected =
false;
101 panic(
NULL,
"Deadlock in rwlock_write_acquire detected");
105 asm volatile(
"pause");
void interrupt_disable(void)
Disable interrupts and increment the disableDepth.
void interrupt_enable(void)
Decrement the CLI depth and enable interrupts if depth reaches zero and interrupts were previously en...
NORETURN void panic(const interrupt_frame_t *frame, const char *format,...)
Panic the kernel, printing a message and halting.
void rwlock_write_acquire(rwlock_t *lock)
Acquires a rwlock for writing, blocking until it is available.
void rwlock_read_acquire(rwlock_t *lock)
Acquires a rwlock for reading, blocking until it is available.
void rwlock_read_release(rwlock_t *lock)
Releases a rwlock from reading.
void rwlock_write_release(rwlock_t *lock)
Releases a rwlock from writing.
#define RWLOCK_DEADLOCK_ITERATIONS
Number of iterations before we consider a deadlock to have occurred in a rwlock operation....
void rwlock_init(rwlock_t *lock)
Initializes a rwlock.
#define NULL
Pointer error value.
#define atomic_fetch_add_explicit(object, operand, order)
#define atomic_load_explicit(object, order)
#define atomic_store_explicit(object, desired, order)
#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure)
#define atomic_init(obj, value)
#define atomic_fetch_sub_explicit(object, operand, order)
__UINT_FAST16_TYPE__ uint_fast16_t
Read-Write Ticket Lock structure.