[dpdk-dev] [PATCH v7 1/6] lib/eal: implement the family of PMD bit operation APIs
Stephen Hemminger
stephen at networkplumber.org
Mon Mar 9 16:50:40 CET 2020
On Mon, 9 Mar 2020 17:54:05 +0800
Joyce Kong <joyce.kong at arm.com> wrote:
> /**
> + * @warning
> + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
> + *
> + * Return the original bit from a 64-bit value, then clear it to 0 without
> + * memory ordering.
> + *
> + * @param nr
> + * The target bit to get and clear.
> + * @param addr
> + * The address holding the bit.
> + * @return
> + * The original bit.
> + */
> +__rte_experimental
> +static inline uint64_t
> +rte_test_and_clear_bit64_relaxed(unsigned int nr, volatile uint64_t *addr)
> +{
> + RTE_ASSERT(nr < 64);
> +
> + uint64_t mask = UINT64_C(1) << nr;
> + uint64_t val = *addr;
> + *addr = (*addr) & (~mask);
> + return val & mask;
> +}
> +
This is not thread safe. You should use the existing GCC builtins.
More information about the dev
mailing list