From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C5788A2EFC for ; Mon, 14 Oct 2019 17:45:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A20791C2F9; Mon, 14 Oct 2019 17:45:37 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id 2B65B1C2F8 for ; Mon, 14 Oct 2019 17:45:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1571067935; 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=XWHMm9e0mh8Rx1EttNloZt+qYMHatyuWjrA7mnp1Dzs=; b=Wm1Oc3MjZk83986hK1J47r1XW9BtEwZGCaO++K4fbmKmH20vIHdGyNtj5Y0nNCvTzLyq5N v+vWguS9GJbVetN/bosAN6Jsq1IzKHC9CnoA2oNIW6m5093rp8V1lQuXPIdYYJ1/9cJWKd 6R1aPdKAnJ4s0IxP8s5Q2LP3Uzv3PCM= Received: from mail-io1-f69.google.com (mail-io1-f69.google.com [209.85.166.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-148-dr2RunAIONScnf1hPLHyZg-1; Mon, 14 Oct 2019 11:45:33 -0400 Received: by mail-io1-f69.google.com with SMTP id e14so26829463iot.16 for ; Mon, 14 Oct 2019 08:45:33 -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=OBc7sIGHvlnk6uMCB4uPE/xlMqxKoRCJzn76f6gSHDU=; b=gK3Eb7l8bVhi59AbzDTZw4GVoqhFO9VeADwqMLQNbHSC7wGH+w/a070QdT3zMZLpRi c6fA/bOMf4C5qKuhnajzr/Hn4mM3IfzpdI1CD+VzRZ0JZOpEYC9F3kL5DlHlz4j69vT2 hq8pAqOHirTWMObYTkqfh2GmLau3wm8X2GK1m3l+qITkvGuAVOE6Cg/02gNkHzUyz368 ouisDqNcH1BuugnyHOJ7xMKlrMPKmqZijxDhSQ2RMv51HgcqwVRpXB3pDgMvsVYnf1g4 5CGk41I7O2t1FiEAIpCe6LmpglZn20WVx0vz5l5+W5eTcMZp0N2AQcrPYTNsK0TPgZLS mXDA== X-Gm-Message-State: APjAAAXBip3KpR1GBEpMkk5fBScoRaE4yHRYcYSDD8mORYTsDtxr8owT NPgL+z41yCWxb0V2rR8KZF7ryS1La0d3XLkfIzLUgtaJZJTOHoNH0sIIwrRfkgK//fV4vqDODpe gHLENKbtJzz5pceIGSA8= X-Received: by 2002:a92:b747:: with SMTP id c7mr1112200ilm.23.1571067932684; Mon, 14 Oct 2019 08:45:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqzBWAsC0tI9gx31lK9SNHmKpQ+Bobs1KCDySskBB2nYDA+zAJBSTU5uxDdzm783OQk/drm0CrIJaaU+sv1iyqI= X-Received: by 2002:a92:b747:: with SMTP id c7mr1112167ilm.23.1571067932322; Mon, 14 Oct 2019 08:45:32 -0700 (PDT) MIME-Version: 1.0 References: <20190723070536.30342-1-jerinj@marvell.com> <1565771263-27353-1-git-send-email-phil.yang@arm.com> <1565771263-27353-3-git-send-email-phil.yang@arm.com> In-Reply-To: <1565771263-27353-3-git-send-email-phil.yang@arm.com> From: David Marchand Date: Mon, 14 Oct 2019 17:45:21 +0200 Message-ID: To: Phil Yang Cc: Thomas Monjalon , Jerin Jacob Kollanukkaran , Gage Eads , dev , Hemant Agrawal , Honnappa Nagarahalli , Gavin Hu , nd X-MC-Unique: dr2RunAIONScnf1hPLHyZg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH v9 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 Wed, Aug 14, 2019 at 10:30 AM 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 8490d89..60ffd70 100644 > --- a/doc/guides/rel_notes/release_19_11.rst > +++ b/doc/guides/rel_notes/release_19_11.rst > @@ -56,6 +56,9 @@ New Features > Also, make sure to start the actual text at the margin. > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > +* **Added Lock-free Stack for aarch64.** > + > + The lock-free stack implementation is enabled for aarch64 platforms. > > Removed Items > ------------- > diff --git a/lib/librte_stack/Makefile b/lib/librte_stack/Makefile > index 8d18ce5..c337ab7 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 Please, use the same indentation type than the other lines. > > 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 >