From 20793fd6c61eda808fed607525e18893200f7802 Mon Sep 17 00:00:00 2001 From: Marian Buschsieweke Date: Tue, 4 Jan 2022 22:00:50 +0100 Subject: [PATCH] sys/atomic_utils: Add load/store for kernel PIDs This will make it easier to change the width of kernel_pid_t if needed without breaking code. --- sys/include/atomic_utils.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sys/include/atomic_utils.h b/sys/include/atomic_utils.h index 50dbaef208..16d4d2b467 100644 --- a/sys/include/atomic_utils.h +++ b/sys/include/atomic_utils.h @@ -139,6 +139,8 @@ #include #include "irq.h" +#include "sched.h" + #include "atomic_utils_arch.h" #ifdef __cplusplus @@ -263,6 +265,16 @@ static inline uintptr_t atomic_load_uintptr(const volatile uintptr_t *var) { static inline void * atomic_load_ptr(void **ptr_addr) { return (void *)atomic_load_uintptr((const volatile uintptr_t *)ptr_addr); } +/** + * @brief Load an `kernel_pid_t` atomically + * + * @param[in] var Variable to load atomically + * @return The value stored in @p var + */ +static inline kernel_pid_t atomic_load_kernel_pid(const volatile kernel_pid_t *var) +{ + return atomic_load_u16((const volatile uint16_t *)var); +} /** @} */ /** @@ -321,6 +333,17 @@ static inline void atomic_store_uintptr(volatile uintptr_t *dest, uintptr_t val) static inline void atomic_store_ptr(void **dest, const void *val) { atomic_store_uintptr((volatile uintptr_t *)dest, (uintptr_t)val); } +/** + * @brief Store an `kernel_pid_t` atomically + * + * @param[out] dest Location to atomically write the new value to + * @param[in] val Value to write + */ +static inline void atomic_store_kernel_pid(volatile kernel_pid_t *dest, + kernel_pid_t val) +{ + atomic_store_u16((volatile uint16_t *)dest, (uint16_t)val); +} /** @} */ /**