> +#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.

Reply via email to