Ping! On 1 December 2014 at 14:34, Ola Liljedahl <[email protected]> wrote: > Signed-off-by: Ola Liljedahl <[email protected]> > --- > Replaced an atomic RMW add with separate load, add and store operations. > This avoids generating a "locked" instruction on x86 which implies unnecessary > strong memory ordering and improves performance. This change could also prove > beneficial on other architectures. > > platform/linux-generic/odp_ticketlock.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/platform/linux-generic/odp_ticketlock.c > b/platform/linux-generic/odp_ticketlock.c > index 6c5e74e..1e67ff5 100644 > --- a/platform/linux-generic/odp_ticketlock.c > +++ b/platform/linux-generic/odp_ticketlock.c > @@ -32,7 +32,10 @@ void odp_ticketlock_lock(odp_ticketlock_t *ticketlock) > > void odp_ticketlock_unlock(odp_ticketlock_t *ticketlock) > { > - _odp_atomic_u32_add_mm(&ticketlock->cur_ticket, 1, _ODP_MEMMODEL_RLS); > + uint32_t cur = _odp_atomic_u32_load_mm(&ticketlock->cur_ticket, > + _ODP_MEMMODEL_RLX); > + _odp_atomic_u32_store_mm(&ticketlock->cur_ticket, cur + 1, > + _ODP_MEMMODEL_RLS); > > #if defined __OCTEON__ > odp_sync_stores(); /* SYNCW to flush write buffer */ > -- > 1.9.1 >
_______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
