Message ID | 20200426083909.897-2-gavin.hu@arm.com |
---|---|
State | New |
Delegated to: | David Marchand |
Headers | show |
Series |
|
Related | show |
Context | Check | Description |
---|---|---|
ci/Intel-compilation | success | Compilation OK |
ci/iol-testing | fail | Testing issues |
ci/iol-nxp-Performance | success | Performance Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-mellanox-Performance | fail | Performance Testing issues |
ci/checkpatch | success | coding style OK |
On Sun, Apr 26, 2020 at 2:09 PM Gavin Hu <gavin.hu@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.hu@arm.com> > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com> > Reviewed-by: Phil Yang <phil.yang@arm.com> > Reviewed-by: Steve Capper <steve.capper@arm.com> > Reviewed-by: Ola Liljedahl <ola.liljedahl@arm.com> > Reviewed-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com> > Tested-by: Pavan Nikhilesh <pbhagavatula@marvell.com> Acked-by: Jerin Jacob <jerinj@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 >
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; } }