From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Rybchenko Subject: Re: [PATCH 1/3] eal: add 128-bit cmpset (x86-64 only) Date: Sun, 13 Jan 2019 15:18:42 +0300 Message-ID: References: <20190110205538.24435-1-gage.eads@intel.com> <20190110205538.24435-2-gage.eads@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Cc: , , To: Gage Eads , Return-path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 989011B137 for ; Sun, 13 Jan 2019 13:18:53 +0100 (CET) In-Reply-To: <20190110205538.24435-2-gage.eads@intel.com> Content-Language: en-GB List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 1/10/19 11:55 PM, Gage Eads wrote: > This operation can be used for non-blocking algorithms, such as a > non-blocking stack or ring. > > Signed-off-by: Gage Eads > --- > .../common/include/arch/x86/rte_atomic_64.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h > index fd2ec9c53..34c2addf8 100644 > --- a/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h > +++ b/lib/librte_eal/common/include/arch/x86/rte_atomic_64.h > @@ -34,6 +34,7 @@ > /* > * Inspired from FreeBSD src/sys/amd64/include/atomic.h > * Copyright (c) 1998 Doug Rabson > + * Copyright (c) 2019 Intel Corporation > * All rights reserved. > */ > > @@ -208,4 +209,25 @@ static inline void rte_atomic64_clear(rte_atomic64_t *v) > } > #endif > > +static inline int > +rte_atomic128_cmpset(volatile uint64_t *dst, uint64_t *exp, uint64_t *src) > +{ > + uint8_t res; > + > + asm volatile ( > + MPLOCKED > + "cmpxchg16b %[dst];" > + " sete %[res]" > + : [dst] "=m" (*dst), > + [res] "=r" (res) > + : "c" (src[1]), > + "b" (src[0]), > + "m" (*dst), > + "d" (exp[1]), > + "a" (exp[0]) > + : "memory"); > + > + return res; > +} > + > #endif /* _RTE_ATOMIC_X86_64_ Is it OK to add it to rte_atomic_64.h header which is for 64-bit integer ops? Andrew. > H_ */