> From: Honnappa Nagarahalli [mailto:honnappa.nagaraha...@arm.com] > Sent: Saturday, 2 April 2022 02.22 > > > From: Mattias Rönnblom <mattias.ronnb...@ericsson.com> > > Sent: Friday, April 1, 2022 10:08 AM > > > > diff --git a/lib/eal/include/rte_seqlock.h > > b/lib/eal/include/rte_seqlock.h new file > Other lock implementations are in lib/eal/include/generic.
I'm not sure why what goes where... e.g. rte_branch_prediction.h and rte_bitops.h are not in include/generic. But I agree that keeping lock implementations in the same location makes sense. Also, other lock implementations have their init() function in their header file, so you could consider getting rid of the C file. I don't care, just mentioning it. > > +/** > > + * The RTE seqlock type. > > + */ > > +typedef struct { > > + uint32_t sn; /**< A sequence number for the protected data. */ > > + rte_spinlock_t lock; /**< Spinlock used to serialize writers. */ > } > Suggest using ticket lock for the writer side. It should have low > overhead when there is a single writer, but provides better > functionality when there are multiple writers. A spinlock and a ticket lock have the same size, so there is no memory cost either. Unless using a ticket lock stands in the way for future extensions to the seqlock library, then it seems like a good idea. > > +__rte_experimental > > +static inline bool > > +rte_seqlock_read_tryunlock(const rte_seqlock_t *seqlock, uint32_t > > +*begin_sn) { Did anyone object to adding the __attribute__((warn_unused_result))? Otherwise, I think you should add it.