On Sun, Apr 26, 2020 at 2:09 PM Gavin Hu <gavin...@arm.com> wrote: > > In acquiring a spinlock, cores repeatedly poll the lock variable. > This is replaced by rte_wait_until_equal API. > > Running the micro benchmarking and the testpmd and l3fwd traffic tests > on ThunderX2, Ampere eMAG80 and Arm N1SDP, everything went well and no > notable performance gain nor degradation was measured. > > Signed-off-by: Gavin Hu <gavin...@arm.com> > Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com> > Reviewed-by: Phil Yang <phil.y...@arm.com> > Reviewed-by: Steve Capper <steve.cap...@arm.com> > Reviewed-by: Ola Liljedahl <ola.liljed...@arm.com> > Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> > Tested-by: Pavan Nikhilesh <pbhagavat...@marvell.com>
Acked-by: Jerin Jacob <jer...@marvell.com> > --- > lib/librte_eal/include/generic/rte_spinlock.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_eal/include/generic/rte_spinlock.h > b/lib/librte_eal/include/generic/rte_spinlock.h > index 87ae7a4f1..40fe49d5a 100644 > --- a/lib/librte_eal/include/generic/rte_spinlock.h > +++ b/lib/librte_eal/include/generic/rte_spinlock.h > @@ -65,8 +65,8 @@ rte_spinlock_lock(rte_spinlock_t *sl) > > while (!__atomic_compare_exchange_n(&sl->locked, &exp, 1, 0, > __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) { > - while (__atomic_load_n(&sl->locked, __ATOMIC_RELAXED)) > - rte_pause(); > + rte_wait_until_equal_32((volatile uint32_t *)&sl->locked, > + 0, __ATOMIC_RELAXED); > exp = 0; > } > } > -- > 2.17.1 >