On Wed, 30 Mar 2022 16:26:02 +0200
Mattias Rönnblom <mattias.ronnb...@ericsson.com> wrote:

> +/**
> + * A static seqlock initializer.
> + */
> +#define RTE_SEQLOCK_INITIALIZER { 0, RTE_SPINLOCK_INITIALIZER }

Used named field initializers here please.

> +/**
> + * Initialize the seqlock.
> + *
> + * This function initializes the seqlock, and leaves the writer-side
> + * spinlock unlocked.
> + *
> + * @param seqlock
> + *   A pointer to the seqlock.
> + */
> +__rte_experimental
> +void
> +rte_seqlock_init(rte_seqlock_t *seqlock);

You need to add the standard experimental prefix
to the comment so that doxygen marks the API as experimental
in documentation.

> +static inline bool
> +rte_seqlock_read_retry(const rte_seqlock_t *seqlock, uint32_t begin_sn)
> +{
> +     uint32_t end_sn;
> +
> +     /* make sure the data loads happens before the sn load */
> +     rte_atomic_thread_fence(__ATOMIC_ACQUIRE);
> +
> +     end_sn = __atomic_load_n(&seqlock->sn, __ATOMIC_RELAXED);
> +
> +     return unlikely(begin_sn & 1 || begin_sn != end_sn);

Please add parenthesis around the and to test if odd.
It would be good to document why if begin_sn is odd it returns false.


Reply via email to