From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 607B1CA9EB5 for ; Mon, 21 Oct 2019 08:27:14 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id CF0822064A for ; Mon, 21 Oct 2019 08:27:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="DtcuzTq8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CF0822064A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 223C844C7; Mon, 21 Oct 2019 10:27:13 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id 58855324D for ; Mon, 21 Oct 2019 10:27:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1571646431; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OvoLdlB0AM0lDvRV1oQ/XWRTRA/UJuPQ0qab9QgaEEs=; b=DtcuzTq8HZdfwL1f5Ps6zgu0IOrIj+9/ZYxdkPjIbRfd5mi2HGuV5S7i1299ITIhXWS0Sm OYIH5JVBdGV31yTtBx24eCywMhGx8Ub9/VZ5CrjLiV5knG9tLkpdDvdfA8jelCEfYDuyDN l20Z3BxGXirGYOazkM8m7rltFNMhiZg= Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-99-UbypG7jTPya0rQjkfSBuAg-1; Mon, 21 Oct 2019 04:27:10 -0400 Received: by mail-ua1-f69.google.com with SMTP id y4so1605047uaa.17 for ; Mon, 21 Oct 2019 01:27:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=QGXvE7nJcPJysx9pMyP8tJG+1nBObdyJAYq9eqQifc0=; b=Q+dVez65rAMFzsT5IZOq9LMyC6pj1U+1ZTQ5/Eoh90tWbbIJNLc4lkWJnJ9BxDfWi7 WepPWhuhwuMt/cGaav+ZTwE33jXj13814BwJx6rRJwEzul894zh4if/iHETf+wm6jQNF h09iOBmRoaCEPda9/5/3vOT4h4UpzBv626qDKkPgZVzkWIIoSVlOjYah0pTx9Cqa2oVP S7crEweTXaYqNv0l9vHg1/JMiTwFoWaE0JPZyJ9eNgnI4MOn4bogBrX/Ik34hOgx//5x r0j0aZDlnYTJ12Iyo3UQderp/N26HUIarjMJxjQwjO64HMhVNsQJz7y5k4ss7akGg3XO 8Jkg== X-Gm-Message-State: APjAAAV1z8X2s3QDcqp9raaZe91Z655ATDHqZDM2laxKp6tpT2yLc4J9 FEtstUmHGXkfsZMGOP92BMk9nTWmLNTWYhMC0ffwq+6Axu2sFTb/AIfBAcrqqezMbB0M7e5b58E 5qkOAXqKoLgSk6zj3K/E= X-Received: by 2002:a05:6102:387:: with SMTP id m7mr12917258vsq.105.1571646429335; Mon, 21 Oct 2019 01:27:09 -0700 (PDT) X-Google-Smtp-Source: APXvYqyIjpRG29kw+HVGUcgLuKoHvDJX0BV6ZabUZBnWPispYOX6Pjvzw5NgaXWlKW7rvSF6jwjUpZA02fnuvXcvuvQ= X-Received: by 2002:a05:6102:387:: with SMTP id m7mr12917240vsq.105.1571646428968; Mon, 21 Oct 2019 01:27:08 -0700 (PDT) MIME-Version: 1.0 References: <1571139508-21701-1-git-send-email-phil.yang@arm.com> <1571397690-14116-1-git-send-email-phil.yang@arm.com> <1571397690-14116-3-git-send-email-phil.yang@arm.com> In-Reply-To: <1571397690-14116-3-git-send-email-phil.yang@arm.com> From: David Marchand Date: Mon, 21 Oct 2019 10:26:57 +0200 Message-ID: To: Phil Yang Cc: Jerin Jacob Kollanukkaran , Gage Eads , dev , Thomas Monjalon , Hemant Agrawal , Honnappa Nagarahalli , Gavin Hu , nd X-MC-Unique: UbypG7jTPya0rQjkfSBuAg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH v11 3/3] eal/stack: enable lock-free stack for aarch64 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list 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 Fri, Oct 18, 2019 at 1:22 PM Phil Yang wrote: > > Enable both c11 atomic and non c11 atomic lock-free stack for aarch64. > > Introduced a new header to reduce the ifdef clutter across generic and c1= 1 > files. The rte_stack_lf_stubs.h contains stub implementations of > __rte_stack_lf_count, __rte_stack_lf_push_elems and > __rte_stack_lf_pop_elems. > > Suggested-by: Gage Eads > Suggested-by: Jerin Jacob > Signed-off-by: Phil Yang > Reviewed-by: Honnappa Nagarahalli > Tested-by: Honnappa Nagarahalli > Acked-by: Jerin Jacob > --- > doc/guides/prog_guide/env_abstraction_layer.rst | 4 +-- > doc/guides/rel_notes/release_19_11.rst | 3 ++ > lib/librte_stack/Makefile | 3 +- > lib/librte_stack/rte_stack_lf.h | 4 +++ > lib/librte_stack/rte_stack_lf_c11.h | 16 --------- > lib/librte_stack/rte_stack_lf_generic.h | 16 --------- > lib/librte_stack/rte_stack_lf_stubs.h | 44 +++++++++++++++++++= ++++++ > 7 files changed, 55 insertions(+), 35 deletions(-) > create mode 100644 lib/librte_stack/rte_stack_lf_stubs.h > > diff --git a/doc/guides/prog_guide/env_abstraction_layer.rst b/doc/guides= /prog_guide/env_abstraction_layer.rst > index 94f30fd..6e59fae 100644 > --- a/doc/guides/prog_guide/env_abstraction_layer.rst > +++ b/doc/guides/prog_guide/env_abstraction_layer.rst > @@ -648,8 +648,8 @@ Known Issues > Alternatively, applications can use the lock-free stack mempool handle= r. When > considering this handler, note that: > > - - It is currently limited to the x86_64 platform, because it uses an > - instruction (16-byte compare-and-swap) that is not yet available on = other > + - It is currently limited to the aarch64 and x86_64 platforms, because= it uses > + an instruction (16-byte compare-and-swap) that is not yet available = on other > platforms. > - It has worse average-case performance than the non-preemptive rte_ri= ng, but > software caching (e.g. the mempool cache) can mitigate this by reduc= ing the > diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_note= s/release_19_11.rst > index 85953b9..4f82f54 100644 > --- a/doc/guides/rel_notes/release_19_11.rst > +++ b/doc/guides/rel_notes/release_19_11.rst > @@ -115,6 +115,9 @@ New Features > Added eBPF JIT support for arm64 architecture to improve the eBPF prog= ram > performance. > > +* **Added Lock-free Stack for aarch64.** > + > + The lock-free stack implementation is enabled for aarch64 platforms. Missing line (paragraphs are separated with two empty lines). This entry should go with Core libs entries, so at the beginning of this li= st. I did the changes. > > Removed Items > ------------- > diff --git a/lib/librte_stack/Makefile b/lib/librte_stack/Makefile > index 8d18ce5..b5e5bed 100644 > --- a/lib/librte_stack/Makefile > +++ b/lib/librte_stack/Makefile > @@ -24,6 +24,7 @@ SYMLINK-$(CONFIG_RTE_LIBRTE_STACK)-include :=3D rte_sta= ck.h \ > rte_stack_std.h \ > rte_stack_lf.h \ > rte_stack_lf_generic.h \ > - rte_stack_lf_c11.h > + rte_stack_lf_c11.h \ > + rte_stack_lf_stubs.h > > include $(RTE_SDK)/mk/rte.lib.mk > diff --git a/lib/librte_stack/rte_stack_lf.h b/lib/librte_stack/rte_stack= _lf.h > index f5581f0..e67630c 100644 > --- a/lib/librte_stack/rte_stack_lf.h > +++ b/lib/librte_stack/rte_stack_lf.h > @@ -5,11 +5,15 @@ > #ifndef _RTE_STACK_LF_H_ > #define _RTE_STACK_LF_H_ > > +#if !(defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_ARM64)) > +#include "rte_stack_lf_stubs.h" > +#else > #ifdef RTE_USE_C11_MEM_MODEL > #include "rte_stack_lf_c11.h" > #else > #include "rte_stack_lf_generic.h" > #endif > +#endif > > /** > * @internal Push several objects on the lock-free stack (MT-safe). > diff --git a/lib/librte_stack/rte_stack_lf_c11.h b/lib/librte_stack/rte_s= tack_lf_c11.h > index 3d677ae..999359f 100644 > --- a/lib/librte_stack/rte_stack_lf_c11.h > +++ b/lib/librte_stack/rte_stack_lf_c11.h > @@ -36,12 +36,6 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *li= st, > struct rte_stack_lf_elem *last, > unsigned int num) > { > -#ifndef RTE_ARCH_X86_64 > - RTE_SET_USED(first); > - RTE_SET_USED(last); > - RTE_SET_USED(list); > - RTE_SET_USED(num); > -#else > struct rte_stack_lf_head old_head; > int success; > > @@ -79,7 +73,6 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *lis= t, > * to the LIFO len update. > */ > __atomic_add_fetch(&list->len, num, __ATOMIC_RELEASE); > -#endif > } > > static __rte_always_inline struct rte_stack_lf_elem * > @@ -88,14 +81,6 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *lis= t, > void **obj_table, > struct rte_stack_lf_elem **last) > { > -#ifndef RTE_ARCH_X86_64 > - RTE_SET_USED(obj_table); > - RTE_SET_USED(last); > - RTE_SET_USED(list); > - RTE_SET_USED(num); > - > - return NULL; > -#else > struct rte_stack_lf_head old_head; > uint64_t len; > int success; > @@ -169,7 +154,6 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *li= st, > } while (success =3D=3D 0); > > return old_head.top; > -#endif > } > > #endif /* _RTE_STACK_LF_C11_H_ */ > diff --git a/lib/librte_stack/rte_stack_lf_generic.h b/lib/librte_stack/r= te_stack_lf_generic.h > index 3182151..3abbb53 100644 > --- a/lib/librte_stack/rte_stack_lf_generic.h > +++ b/lib/librte_stack/rte_stack_lf_generic.h > @@ -36,12 +36,6 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *li= st, > struct rte_stack_lf_elem *last, > unsigned int num) > { > -#ifndef RTE_ARCH_X86_64 > - RTE_SET_USED(first); > - RTE_SET_USED(last); > - RTE_SET_USED(list); > - RTE_SET_USED(num); > -#else > struct rte_stack_lf_head old_head; > int success; > > @@ -75,7 +69,6 @@ __rte_stack_lf_push_elems(struct rte_stack_lf_list *lis= t, > } while (success =3D=3D 0); > > rte_atomic64_add((rte_atomic64_t *)&list->len, num); > -#endif > } > > static __rte_always_inline struct rte_stack_lf_elem * > @@ -84,14 +77,6 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *lis= t, > void **obj_table, > struct rte_stack_lf_elem **last) > { > -#ifndef RTE_ARCH_X86_64 > - RTE_SET_USED(obj_table); > - RTE_SET_USED(last); > - RTE_SET_USED(list); > - RTE_SET_USED(num); > - > - return NULL; > -#else > struct rte_stack_lf_head old_head; > int success; > > @@ -159,7 +144,6 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *li= st, > } while (success =3D=3D 0); > > return old_head.top; > -#endif > } > > #endif /* _RTE_STACK_LF_GENERIC_H_ */ > diff --git a/lib/librte_stack/rte_stack_lf_stubs.h b/lib/librte_stack/rte= _stack_lf_stubs.h > new file mode 100644 > index 0000000..a05abf1 > --- /dev/null > +++ b/lib/librte_stack/rte_stack_lf_stubs.h > @@ -0,0 +1,44 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2019 Arm Limited > + */ > + > +#ifndef _RTE_STACK_LF_STUBS_H_ > +#define _RTE_STACK_LF_STUBS_H_ > + > +#include > + > +static __rte_always_inline unsigned int > +__rte_stack_lf_count(struct rte_stack *s) > +{ > + RTE_SET_USED(s); > + > + return 0; > +} > + > +static __rte_always_inline void > +__rte_stack_lf_push_elems(struct rte_stack_lf_list *list, > + struct rte_stack_lf_elem *first, > + struct rte_stack_lf_elem *last, > + unsigned int num) > +{ > + RTE_SET_USED(first); > + RTE_SET_USED(last); > + RTE_SET_USED(list); > + RTE_SET_USED(num); > +} > + > +static __rte_always_inline struct rte_stack_lf_elem * > +__rte_stack_lf_pop_elems(struct rte_stack_lf_list *list, > + unsigned int num, > + void **obj_table, > + struct rte_stack_lf_elem **last) > +{ > + RTE_SET_USED(obj_table); > + RTE_SET_USED(last); > + RTE_SET_USED(list); > + RTE_SET_USED(num); > + > + return NULL; > +} > + > +#endif /* _RTE_STACK_LF_STUBS_H_ */ > -- > 2.7.4 > Applied, thanks. --=20 David Marchand