DPDK patches and discussions
 help / color / mirror / Atom feed
From: Tyler Retzlaff <roretzla@linux.microsoft.com>
To: dev@dpdk.org
Cc: techboard@dpdk.org,
	"Bruce Richardson" <bruce.richardson@intel.com>,
	"Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>,
	"Ruifeng Wang" <ruifeng.wang@arm.com>,
	"Jerin Jacob" <jerinj@marvell.com>,
	"Sunil Kumar Kori" <skori@marvell.com>,
	"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
	"Joyce Kong" <joyce.kong@arm.com>,
	"David Christensen" <drc@linux.vnet.ibm.com>,
	"Konstantin Ananyev" <konstantin.v.ananyev@yandex.ru>,
	"David Hunt" <david.hunt@intel.com>,
	"Thomas Monjalon" <thomas@monjalon.net>,
	"David Marchand" <david.marchand@redhat.com>,
	"Tyler Retzlaff" <roretzla@linux.microsoft.com>
Subject: [PATCH v2 0/6] RFC optional rte optional stdatomics API
Date: Fri, 11 Aug 2023 10:32:10 -0700	[thread overview]
Message-ID: <1691775136-6460-1-git-send-email-roretzla@linux.microsoft.com> (raw)
In-Reply-To: <1691717521-1025-1-git-send-email-roretzla@linux.microsoft.com>

This series introduces API additions prefixed in the rte namespace that allow
the optional use of stdatomics.h from C11 using enable_stdatomics=true for
targets where enable_stdatomics=false no functional change is intended.

Be aware this does not contain all changes to use stdatomics across the DPDK
tree it only introduces the minimum to allow the option to be used which is
a pre-requisite for a clean CI (probably using clang) that can be run
with enable_stdatomics=true enabled.

It is planned that subsequent series will be introduced per lib/driver as
appropriate to further enable stdatomics use when enable_stdatomics=true.

Notes:

* Additional libraries beyond EAL make visible atomics use across the
  API/ABI surface they will be converted in the subsequent series.

* The eal: add rte atomic qualifier with casts patch needs some discussion
  as to whether or not the legacy rte_atomic APIs should be converted to
  work with enable_stdatomic=true right now some implementation dependent
  casts are used to prevent cascading / having to convert too much in
  the intial series.

* Windows will obviously need complete conversion of libraries including
  atomics that are not crossing API/ABI boundaries. those conversions will
  introduced in separate series as new along side the existing msvc series.

Please keep in mind we would like to prioritize the review / acceptance of
this patch since it needs to be completed in the 23.11 merge window.

Thank you all for the discussion that lead to the formation of this series.

v2:
  * Wrap meson_options.txt option description to newline and indent to
    be consistent with other options.
  * Provide separate typedef of rte_memory_order for enable_stdatomic=true
    VS enable_stdatomic=false instead of a single typedef to int
    note: slight tweak to reviewers feedback i've chosen to use a typedef
          for both enable_stdatomic={true,false} (just seemed more consistent)
  * Bring in assert.h and use static_assert macro instead of _Static_assert
    keyword to better interoperate with c/c++
  * Directly include rte_stdatomic.h where into other places it is consumed
    instead of hacking it globally into rte_config.h
  * Provide and use __rte_atomic_thread_fence to allow conditional expansion
    within the body of existing rte_atomic_thread_fence inline function to
    maintain per-arch optimizations when enable_stdatomic=false

Tyler Retzlaff (6):
  eal: provide rte stdatomics optional atomics API
  eal: adapt EAL to present rte optional atomics API
  eal: add rte atomic qualifier with casts
  distributor: adapt for EAL optional atomics API changes
  bpf: adapt for EAL optional atomics API changes
  devtools: forbid new direct use of GCC atomic builtins

 app/test/test_mcslock.c                  |   6 +-
 config/meson.build                       |   1 +
 devtools/checkpatches.sh                 |   6 +-
 lib/bpf/bpf_pkt.c                        |   6 +-
 lib/distributor/distributor_private.h    |   2 +-
 lib/distributor/rte_distributor_single.c |  44 ++++----
 lib/eal/arm/include/rte_atomic_32.h      |   4 +-
 lib/eal/arm/include/rte_atomic_64.h      |  36 +++---
 lib/eal/arm/include/rte_pause_64.h       |  26 ++---
 lib/eal/arm/rte_power_intrinsics.c       |   8 +-
 lib/eal/common/eal_common_trace.c        |  16 +--
 lib/eal/include/generic/rte_atomic.h     |  67 +++++++-----
 lib/eal/include/generic/rte_pause.h      |  42 +++----
 lib/eal/include/generic/rte_rwlock.h     |  48 ++++----
 lib/eal/include/generic/rte_spinlock.h   |  20 ++--
 lib/eal/include/meson.build              |   1 +
 lib/eal/include/rte_mcslock.h            |  51 ++++-----
 lib/eal/include/rte_pflock.h             |  25 +++--
 lib/eal/include/rte_seqcount.h           |  19 ++--
 lib/eal/include/rte_stdatomic.h          | 182 +++++++++++++++++++++++++++++++
 lib/eal/include/rte_ticketlock.h         |  43 ++++----
 lib/eal/include/rte_trace_point.h        |   5 +-
 lib/eal/loongarch/include/rte_atomic.h   |   4 +-
 lib/eal/ppc/include/rte_atomic.h         |  54 ++++-----
 lib/eal/riscv/include/rte_atomic.h       |   4 +-
 lib/eal/x86/include/rte_atomic.h         |   8 +-
 lib/eal/x86/include/rte_spinlock.h       |   2 +-
 lib/eal/x86/rte_power_intrinsics.c       |   7 +-
 meson_options.txt                        |   2 +
 29 files changed, 481 insertions(+), 258 deletions(-)
 create mode 100644 lib/eal/include/rte_stdatomic.h

-- 
1.8.3.1


  parent reply	other threads:[~2023-08-11 17:32 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-11  1:31 [PATCH " Tyler Retzlaff
2023-08-11  1:31 ` [PATCH 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-08-11  8:56   ` Bruce Richardson
2023-08-11  9:42   ` Morten Brørup
2023-08-11 15:54     ` Tyler Retzlaff
2023-08-14  9:04       ` Morten Brørup
2023-08-11  1:31 ` [PATCH 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-11  1:31 ` [PATCH 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-11  1:31 ` [PATCH 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-11  1:32 ` [PATCH 5/6] bpf: " Tyler Retzlaff
2023-08-11  1:32 ` [PATCH 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-11  8:57   ` Bruce Richardson
2023-08-11  9:51   ` Morten Brørup
2023-08-11 15:56     ` Tyler Retzlaff
2023-08-14  6:37       ` Morten Brørup
2023-08-11 17:32 ` Tyler Retzlaff [this message]
2023-08-11 17:32   ` [PATCH v2 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-08-14  7:06     ` Morten Brørup
2023-08-11 17:32   ` [PATCH v2 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-14  8:00     ` Morten Brørup
2023-08-14 17:47       ` Tyler Retzlaff
2023-08-16 20:13         ` Morten Brørup
2023-08-16 20:32           ` Tyler Retzlaff
2023-08-11 17:32   ` [PATCH v2 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-14  8:05     ` Morten Brørup
2023-08-11 17:32   ` [PATCH v2 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-14  8:07     ` Morten Brørup
2023-08-11 17:32   ` [PATCH v2 5/6] bpf: " Tyler Retzlaff
2023-08-14  8:11     ` Morten Brørup
2023-08-11 17:32   ` [PATCH v2 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-14  8:12     ` Morten Brørup
2023-08-16 19:19 ` [PATCH v3 0/6] RFC optional rte optional stdatomics API Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-08-16 20:55     ` Morten Brørup
2023-08-16 21:04       ` Tyler Retzlaff
2023-08-16 21:08         ` Morten Brørup
2023-08-16 21:10         ` Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 5/6] bpf: " Tyler Retzlaff
2023-08-16 19:19   ` [PATCH v3 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-16 21:38 ` [PATCH v4 0/6] RFC optional rte optional stdatomics API Tyler Retzlaff
2023-08-16 21:38   ` [PATCH v4 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-08-17 11:45     ` Morten Brørup
2023-08-17 19:09       ` Tyler Retzlaff
2023-08-18  6:55         ` Morten Brørup
2023-08-16 21:38   ` [PATCH v4 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-16 21:38   ` [PATCH v4 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-16 21:38   ` [PATCH v4 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-16 21:38   ` [PATCH v4 5/6] bpf: " Tyler Retzlaff
2023-08-16 21:38   ` [PATCH v4 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-17 11:57     ` Morten Brørup
2023-08-17 19:14       ` Tyler Retzlaff
2023-08-18  7:13         ` Morten Brørup
2023-08-22 18:14           ` Tyler Retzlaff
2023-08-17 21:42 ` [PATCH v5 0/6] optional rte optional stdatomics API Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 5/6] bpf: " Tyler Retzlaff
2023-08-17 21:42   ` [PATCH v5 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-21 22:27   ` [PATCH v5 0/6] optional rte optional stdatomics API Konstantin Ananyev
2023-08-22 21:00 ` [PATCH v6 0/6] rte atomics API for optional stdatomic Tyler Retzlaff
2023-08-22 21:00   ` [PATCH v6 1/6] eal: provide rte stdatomics optional atomics API Tyler Retzlaff
2023-09-28  8:06     ` Thomas Monjalon
2023-09-29  8:04       ` David Marchand
2023-09-29  8:54         ` Morten Brørup
2023-09-29  9:02           ` David Marchand
2023-09-29  9:26             ` Bruce Richardson
2023-09-29  9:34               ` David Marchand
2023-09-29 10:26                 ` Thomas Monjalon
2023-09-29 11:38                   ` David Marchand
2023-09-29 11:51                     ` Thomas Monjalon
2023-08-22 21:00   ` [PATCH v6 2/6] eal: adapt EAL to present rte " Tyler Retzlaff
2023-08-22 21:00   ` [PATCH v6 3/6] eal: add rte atomic qualifier with casts Tyler Retzlaff
2023-08-22 21:00   ` [PATCH v6 4/6] distributor: adapt for EAL optional atomics API changes Tyler Retzlaff
2023-08-22 21:00   ` [PATCH v6 5/6] bpf: " Tyler Retzlaff
2023-08-22 21:00   ` [PATCH v6 6/6] devtools: forbid new direct use of GCC atomic builtins Tyler Retzlaff
2023-08-29 15:57   ` [PATCH v6 0/6] rte atomics API for optional stdatomic Tyler Retzlaff
2023-09-29 14:09   ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1691775136-6460-1-git-send-email-roretzla@linux.microsoft.com \
    --to=roretzla@linux.microsoft.com \
    --cc=bruce.richardson@intel.com \
    --cc=david.hunt@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=drc@linux.vnet.ibm.com \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=jerinj@marvell.com \
    --cc=joyce.kong@arm.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=mattias.ronnblom@ericsson.com \
    --cc=ruifeng.wang@arm.com \
    --cc=skori@marvell.com \
    --cc=techboard@dpdk.org \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).