kernel: atomics: support for 64-bit atomic operations

With this change, `atomic_t` is 32-bit for 32-bit architectures
and 64-bit for 64-bit architectures. More specifically,
`sizeof(atomic_t) == sizeof(long)`.

Fixes #39530

Signed-off-by: Christopher Friedt <chrisfriedt@gmail.com>
This commit is contained in:
Christopher Friedt 2021-10-26 13:57:37 -04:00 committed by Anas Nashif
commit 174cb7f9f1

View file

@ -13,12 +13,13 @@
#include <stddef.h>
#include <zephyr/types.h>
#include <sys/util_macro.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef int atomic_t;
typedef long atomic_t;
typedef atomic_t atomic_val_t;
typedef void *atomic_ptr_t;
typedef atomic_ptr_t atomic_ptr_val_t;
@ -76,7 +77,7 @@ typedef atomic_ptr_t atomic_ptr_val_t;
*/
#define ATOMIC_BITS (sizeof(atomic_val_t) * 8)
#define ATOMIC_MASK(bit) (1U << ((uint32_t)(bit) & (ATOMIC_BITS - 1U)))
#define ATOMIC_MASK(bit) BIT((unsigned long)(bit) & (ATOMIC_BITS - 1U))
#define ATOMIC_ELEM(addr, bit) ((addr) + ((bit) / ATOMIC_BITS))
/**