[RFC v2 5/6] eal: add atomic bit operations
Morten Brørup
mb at smartsharesystems.com
Thu Apr 25 12:25:54 CEST 2024
> +#define rte_bit_atomic_test(addr, nr, memory_order) \
> + _Generic((addr), \
> + uint32_t *: __rte_bit_atomic_test32, \
> + uint64_t *: __rte_bit_atomic_test64)(addr, nr, memory_order)
I wonder if these should have RTE_ATOMIC qualifier:
+ RTE_ATOMIC(uint32_t) *: __rte_bit_atomic_test32, \
+ RTE_ATOMIC(uint64_t) *: __rte_bit_atomic_test64)(addr, nr, memory_order)
> +#define __RTE_GEN_BIT_ATOMIC_TEST(size) \
> + static inline bool \
> + __rte_bit_atomic_test ## size(const uint ## size ## _t *addr, \
I wonder if the "addr" parameter should have RTE_ATOMIC qualifier:
+ __rte_bit_atomic_test ## size(const RTE_ATOMIC(uint ## size ## _t) *addr, \
instead of casting into a_addr.
> + unsigned int nr, int memory_order) \
> + { \
> + RTE_ASSERT(nr < size); \
> + \
> + const RTE_ATOMIC(uint ## size ## _t) *a_addr = \
> + (const RTE_ATOMIC(uint ## size ## _t) *)addr; \
> + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \
> + return rte_atomic_load_explicit(a_addr, memory_order) & mask; \
> + }
Similar considerations regarding volatile qualifier for the "once" operations.
More information about the dev
mailing list