diff --git a/exosphere/src/lock.h b/exosphere/src/lock.h index 5a4ca4a28..e122de503 100644 --- a/exosphere/src/lock.h +++ b/exosphere/src/lock.h @@ -1,25 +1,26 @@ #ifndef EXOSPHERE_LOCK_H #define EXOSPHERE_LOCK_H +#include #include /* Simple atomics driver for Exosphere. */ /* Acquire a lock. */ -static inline void lock_acquire(bool *l) { - while (__atomic_test_and_set(l, __ATOMIC_ACQUIRE)) { +static inline void lock_acquire(atomic_flag *flag) { + while (atomic_flag_test_and_set_explicit(flag, memory_order_acquire)) { /* Wait to acquire lock. */ } } /* Release a lock. */ -static inline void lock_release(bool *l) { - __atomic_clear(l, __ATOMIC_RELEASE); +static inline void lock_release(atomic_flag *flag) { + atomic_flag_clear_explicit(flag, memory_order_release); } /* Try to acquire a lock. */ -static inline bool lock_try_acquire(bool *l) { - return __atomic_test_and_set(l, __ATOMIC_ACQUIRE); +static inline bool lock_try_acquire(atomic_flag *flag) { + return atomic_flag_test_and_set_explicit(flag, memory_order_acquire); } #endif \ No newline at end of file diff --git a/exosphere/src/smc_api.c b/exosphere/src/smc_api.c index f282d0dd9..b5ff36168 100644 --- a/exosphere/src/smc_api.c +++ b/exosphere/src/smc_api.c @@ -1,3 +1,4 @@ +#include #include #include "utils.h" @@ -106,8 +107,8 @@ smc_table_t g_smc_tables[2] = { } }; -bool g_is_user_smc_in_progress = false; -bool g_is_priv_smc_in_progress = false; +static atomic_flag g_is_user_smc_in_progress = ATOMIC_FLAG_INIT; +static atomic_flag g_is_priv_smc_in_progress = ATOMIC_FLAG_INIT; uintptr_t get_smc_core012_stack_address(void) { return tzram_get_segment_address(TZRAM_SEGMENT_ID_CORE012_STACK) + 0x1000;