Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/130099/?format=api
http://patches.dpdk.org/api/patches/130099/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1691717521-1025-2-git-send-email-roretzla@linux.microsoft.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1691717521-1025-2-git-send-email-roretzla@linux.microsoft.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1691717521-1025-2-git-send-email-roretzla@linux.microsoft.com", "date": "2023-08-11T01:31:56", "name": "[1/6] eal: provide rte stdatomics optional atomics API", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "98dc22c1265bfd29c41ad952c64a16f6406ec32b", "submitter": { "id": 2077, "url": "http://patches.dpdk.org/api/people/2077/?format=api", "name": "Tyler Retzlaff", "email": "roretzla@linux.microsoft.com" }, "delegate": { "id": 1, "url": "http://patches.dpdk.org/api/users/1/?format=api", "username": "tmonjalo", "first_name": "Thomas", "last_name": "Monjalon", "email": "thomas@monjalon.net" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1691717521-1025-2-git-send-email-roretzla@linux.microsoft.com/mbox/", "series": [ { "id": 29170, "url": "http://patches.dpdk.org/api/series/29170/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=29170", "date": "2023-08-11T01:31:55", "name": "RFC optional rte optional stdatomics API", "version": 1, "mbox": "http://patches.dpdk.org/series/29170/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/130099/comments/", "check": "warning", "checks": "http://patches.dpdk.org/api/patches/130099/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id DB0EC43028;\n\tFri, 11 Aug 2023 03:32:21 +0200 (CEST)", "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8062543260;\n\tFri, 11 Aug 2023 03:32:10 +0200 (CEST)", "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id B361A40E03;\n Fri, 11 Aug 2023 03:32:05 +0200 (CEST)", "by linux.microsoft.com (Postfix, from userid 1086)\n id CEA3120FD058; Thu, 10 Aug 2023 18:32:04 -0700 (PDT)" ], "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com CEA3120FD058", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1691717524;\n bh=WBxylC/yIzi0ZZD0MzOcfR5x7hYDwTUx8GXZv8EhP7A=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=PMpdhBzi4ERx6RJIi13rFbeDItohXNMyUs2nvz7InAoxm4255LbfGZ48fQqwRtyGz\n HuOV5m/Jpio0LQ8bF5MBbn7OeJTWvM2YqONUlAcwAR9IiMsOT/soKdzF/mQ5FbN5Dw\n 76tq4m6WpnWFXLBXHQ8NxB2WTFVKqNEYXj3mOnpQ=", "From": "Tyler Retzlaff <roretzla@linux.microsoft.com>", "To": "dev@dpdk.org", "Cc": "techboard@dpdk.org, Bruce Richardson <bruce.richardson@intel.com>,\n Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>,\n Ruifeng Wang <ruifeng.wang@arm.com>, Jerin Jacob <jerinj@marvell.com>,\n Sunil Kumar Kori <skori@marvell.com>,\n =?utf-8?q?Mattias_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>,\n Joyce Kong <joyce.kong@arm.com>, David Christensen <drc@linux.vnet.ibm.com>,\n Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,\n David Hunt <david.hunt@intel.com>, Thomas Monjalon <thomas@monjalon.net>,\n David Marchand <david.marchand@redhat.com>,\n Tyler Retzlaff <roretzla@linux.microsoft.com>", "Subject": "[PATCH 1/6] eal: provide rte stdatomics optional atomics API", "Date": "Thu, 10 Aug 2023 18:31:56 -0700", "Message-Id": "<1691717521-1025-2-git-send-email-roretzla@linux.microsoft.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1691717521-1025-1-git-send-email-roretzla@linux.microsoft.com>", "References": "<1691717521-1025-1-git-send-email-roretzla@linux.microsoft.com>", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org" }, "content": "Provide API for atomic operations in the rte namespace that may\noptionally be configured to use C11 atomics with meson\noption enable_stdatomics=true\n\nSigned-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>\n---\n config/meson.build | 1 +\n config/rte_config.h | 1 +\n lib/eal/include/meson.build | 1 +\n lib/eal/include/rte_stdatomic.h | 162 ++++++++++++++++++++++++++++++++++++++++\n meson_options.txt | 1 +\n 5 files changed, 166 insertions(+)\n create mode 100644 lib/eal/include/rte_stdatomic.h", "diff": "diff --git a/config/meson.build b/config/meson.build\nindex d822371..ec49964 100644\n--- a/config/meson.build\n+++ b/config/meson.build\n@@ -303,6 +303,7 @@ endforeach\n # set other values pulled from the build options\n dpdk_conf.set('RTE_MAX_ETHPORTS', get_option('max_ethports'))\n dpdk_conf.set('RTE_LIBEAL_USE_HPET', get_option('use_hpet'))\n+dpdk_conf.set('RTE_ENABLE_STDATOMIC', get_option('enable_stdatomic'))\n dpdk_conf.set('RTE_ENABLE_TRACE_FP', get_option('enable_trace_fp'))\n # values which have defaults which may be overridden\n dpdk_conf.set('RTE_MAX_VFIO_GROUPS', 64)\ndiff --git a/config/rte_config.h b/config/rte_config.h\nindex 400e44e..f17b6ae 100644\n--- a/config/rte_config.h\n+++ b/config/rte_config.h\n@@ -13,6 +13,7 @@\n #define _RTE_CONFIG_H_\n \n #include <rte_build_config.h>\n+#include <rte_stdatomic.h>\n \n /* legacy defines */\n #ifdef RTE_EXEC_ENV_LINUX\ndiff --git a/lib/eal/include/meson.build b/lib/eal/include/meson.build\nindex b0db9b3..f8a47b3 100644\n--- a/lib/eal/include/meson.build\n+++ b/lib/eal/include/meson.build\n@@ -43,6 +43,7 @@ headers += files(\n 'rte_seqlock.h',\n 'rte_service.h',\n 'rte_service_component.h',\n+ 'rte_stdatomic.h',\n 'rte_string_fns.h',\n 'rte_tailq.h',\n 'rte_thread.h',\ndiff --git a/lib/eal/include/rte_stdatomic.h b/lib/eal/include/rte_stdatomic.h\nnew file mode 100644\nindex 0000000..832fd07\n--- /dev/null\n+++ b/lib/eal/include/rte_stdatomic.h\n@@ -0,0 +1,162 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2023 Microsoft Corporation\n+ */\n+\n+#ifndef _RTE_STDATOMIC_H_\n+#define _RTE_STDATOMIC_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+typedef int rte_memory_order;\n+\n+#ifdef RTE_ENABLE_STDATOMIC\n+#ifdef __STDC_NO_ATOMICS__\n+#error enable_stdatomics=true but atomics not supported by toolchain\n+#endif\n+\n+#include <stdatomic.h>\n+\n+#define __rte_atomic _Atomic\n+\n+#define rte_memory_order_relaxed memory_order_relaxed\n+#ifdef __ATOMIC_RELAXED\n+_Static_assert(rte_memory_order_relaxed == __ATOMIC_RELAXED,\n+\t\"rte_memory_order_relaxed == __ATOMIC_RELAXED\");\n+#endif\n+\n+#define rte_memory_order_consume memory_order_consume\n+#ifdef __ATOMIC_CONSUME\n+_Static_assert(rte_memory_order_consume == __ATOMIC_CONSUME,\n+\t\"rte_memory_order_consume == __ATOMIC_CONSUME\");\n+#endif\n+\n+#define rte_memory_order_acquire memory_order_acquire\n+#ifdef __ATOMIC_ACQUIRE\n+_Static_assert(rte_memory_order_acquire == __ATOMIC_ACQUIRE,\n+\t\"rte_memory_order_acquire == __ATOMIC_ACQUIRE\");\n+#endif\n+\n+#define rte_memory_order_release memory_order_release\n+#ifdef __ATOMIC_RELEASE\n+_Static_assert(rte_memory_order_release == __ATOMIC_RELEASE,\n+\t\"rte_memory_order_release == __ATOMIC_RELEASE\");\n+#endif\n+\n+#define rte_memory_order_acq_rel memory_order_acq_rel\n+#ifdef __ATOMIC_ACQ_REL\n+_Static_assert(rte_memory_order_acq_rel == __ATOMIC_ACQ_REL,\n+\t\"rte_memory_order_acq_rel == __ATOMIC_ACQ_REL\");\n+#endif\n+\n+#define rte_memory_order_seq_cst memory_order_seq_cst\n+#ifdef __ATOMIC_SEQ_CST\n+_Static_assert(rte_memory_order_seq_cst == __ATOMIC_SEQ_CST,\n+\t\"rte_memory_order_seq_cst == __ATOMIC_SEQ_CST\");\n+#endif\n+\n+#define rte_atomic_load_explicit(ptr, memorder) \\\n+\tatomic_load_explicit(ptr, memorder)\n+\n+#define rte_atomic_store_explicit(ptr, val, memorder) \\\n+\tatomic_store_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_exchange_explicit(ptr, val, memorder) \\\n+\tatomic_exchange_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_compare_exchange_strong_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder) \\\n+\tatomic_compare_exchange_strong_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder)\n+\n+#define rte_atomic_compare_exchange_weak_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder) \\\n+\tatomic_compare_exchange_strong_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder)\n+\n+#define rte_atomic_fetch_add_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_add_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_sub_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_sub_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_and_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_and_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_xor_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_xor_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_or_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_or_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_nand_explicit(ptr, val, memorder) \\\n+\tatomic_fetch_nand_explicit(ptr, val, memorder)\n+\n+#define rte_atomic_flag_test_and_set_explict(ptr, memorder) \\\n+\tatomic_flag_test_and_set_explicit(ptr, memorder)\n+\n+#define rte_atomic_flag_clear_explicit(ptr, memorder) \\\n+\tatomic_flag_clear(ptr, memorder)\n+\n+#else\n+\n+#define __rte_atomic\n+\n+#define rte_memory_order_relaxed __ATOMIC_RELAXED\n+#define rte_memory_order_consume __ATOMIC_CONSUME\n+#define rte_memory_order_acquire __ATOMIC_ACQUIRE\n+#define rte_memory_order_release __ATOMIC_RELEASE\n+#define rte_memory_order_acq_rel __ATOMIC_ACQ_REL\n+#define rte_memory_order_seq_cst __ATOMIC_SEQ_CST\n+\n+#define rte_atomic_load_explicit(ptr, memorder) \\\n+\t__atomic_load_n(ptr, memorder)\n+\n+#define rte_atomic_store_explicit(ptr, val, memorder) \\\n+\t__atomic_store_n(ptr, val, memorder)\n+\n+#define rte_atomic_exchange_explicit(ptr, val, memorder) \\\n+\t__atomic_exchange_n(ptr, val, memorder)\n+\n+#define rte_atomic_compare_exchange_strong_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder) \\\n+\t__atomic_compare_exchange_n( \\\n+\t ptr, expected, desired, 0, succ_memorder, fail_memorder)\n+\n+#define rte_atomic_compare_exchange_weak_explicit( \\\n+\t ptr, expected, desired, succ_memorder, fail_memorder) \\\n+\t__atomic_compare_exchange_n( \\\n+\t ptr, expected, desired, 1, succ_memorder, fail_memorder)\n+\n+#define rte_atomic_fetch_add_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_add(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_sub_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_sub(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_and_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_and(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_xor_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_xor(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_or_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_or(ptr, val, memorder)\n+\n+#define rte_atomic_fetch_nand_explicit(ptr, val, memorder) \\\n+\t__atomic_fetch_nand(ptr, val, memorder)\n+\n+#define rte_atomic_flag_test_and_set_explicit(ptr, memorder) \\\n+\t__atomic_test_and_set(ptr, memorder)\n+\n+#define rte_atomic_flag_clear_explicit(ptr, memorder) \\\n+\t__atomic_clear(ptr, memorder)\n+\n+#endif\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_STDATOMIC_H_ */\ndiff --git a/meson_options.txt b/meson_options.txt\nindex 621e1ca..7d6784d 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -46,6 +46,7 @@ option('mbuf_refcnt_atomic', type: 'boolean', value: true, description:\n 'Atomically access the mbuf refcnt.')\n option('platform', type: 'string', value: 'native', description:\n 'Platform to build, either \"native\", \"generic\" or a SoC. Please refer to the Linux build guide for more information.')\n+option('enable_stdatomic', type: 'boolean', value: false, description: 'enable use of C11 stdatomic')\n option('enable_trace_fp', type: 'boolean', value: false, description:\n 'enable fast path trace points.')\n option('tests', type: 'boolean', value: true, description:\n", "prefixes": [ "1/6" ] }{ "id": 130099, "url": "