On Fri, 25 Mar 2022 21:24:28 +0100 Mattias Rönnblom <mattias.ronnb...@ericsson.com> wrote:
> diff --git a/lib/eal/include/rte_seqlock.h b/lib/eal/include/rte_seqlock.h > new file mode 100644 > index 0000000000..b975ca848a > --- /dev/null > +++ b/lib/eal/include/rte_seqlock.h > @@ -0,0 +1,84 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2022 Ericsson AB > + */ > + > +#ifndef _RTE_SEQLOCK_H_ > +#define _RTE_SEQLOCK_H_ > + > +#include <stdbool.h> > +#include <stdint.h> > + > +#include <rte_atomic.h> > +#include <rte_branch_prediction.h> > +#include <rte_spinlock.h> > + > +struct rte_seqlock { > + uint64_t sn; > + rte_spinlock_t lock; > +}; > + > +typedef struct rte_seqlock rte_seqlock_t; > + Add a reference to Wikipedia and/or Linux since not every DPDK user maybe familar with this. > + > + sn = seqlock->sn + 1; > + > + __atomic_store_n(&seqlock->sn, sn, __ATOMIC_RELAXED); > + > + /* __ATOMIC_RELEASE to prevent stores after (in program order) > + * from happening before the sn store. > + */ > + rte_atomic_thread_fence(__ATOMIC_RELEASE); Could this just be __atomic_fetch_add() with __ATOMIC_RELEASE?