From patchwork Wed Sep 18 09:04:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144246 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 108C044191; Wed, 18 Sep 2024 11:14:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3597942F57; Wed, 18 Sep 2024 11:14:14 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2065.outbound.protection.outlook.com [40.107.21.65]) by mails.dpdk.org (Postfix) with ESMTP id 87F3B42E57 for ; Wed, 18 Sep 2024 11:14:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=av7OThkCPtVRchkSfLJhsYfNUtK8k1vec3sTpDyFsPSv8+I1N5C7sdFD4Iwk7We4PJpsBU7vEhq5ugys/ZuapxCKJiKCDbs9jop4sTkOIB1jGJWkwLBmKKZydLqpnwlW9/lXczq8ttXURw806RB+k5yzrRAHunbTkmZ1UBzQK0A0Wt6jfzqD6lveNPQ7cgZxQeQU256sAFYJB2uFhpl/QxDifGFUXuw9NPz9nqLxbONS02UUjVtJ8XBDFfjjvXNlTBqmtuH+W/yIwIg/WEmslcuoDCwwGe/bMptPrF1P5mgUXODvIlnbcVHWPJWXnbKP5/IuCU0+4kDW23fKb2RDRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=PJekQ7kSTpkjWQ9HrtzxocGvMRDWrNL+8bDtYwcRpp8=; b=LhAg9TPlRekKg5fxQOxWJkju44DJtGfvw4XNlsetvWs4xIvpxKcRal1Z2j9y4vXZywwTfBpa0ciEhU3Py4IHmaA6TMAOsTZEHzX08GUrPywy5FsyHomJW+dKzcyKadwQ1xRRqhvNnUfbP4rKArWXmLpNN6DZQXPwTS1fL3Pn108ugL3CxECJ30A91BPU42vefXCJawybzlHupJyTgp2pRhB1WKtNSViLN7RbBCf+xE/9sF/9Rc+KD/WpjkpywVsnvjtxiuoXjrRl6upl1wl3J0ULNqN2Tf7nGrRl8nAZ0JxAGrUaKLjTmU+kcftFMz6MMES3AKNFvhSC+pIaazDoMA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PJekQ7kSTpkjWQ9HrtzxocGvMRDWrNL+8bDtYwcRpp8=; b=kFW79ZX2ZUdGgF9cAGy0v/pIDLS38V4+cIoclwlYtEGTQZVGK56WYCBMn2lr/vWseVcvfL0vqQKoNYNUzB1pKu6mVyQsU/3EjvWqLFc2XmLeMQU7ZBAUZx1kFLSx90wlulmd+/A0/alTe9WgvyJueeEp7JWIS42hXmhNH4PmntAgkCHrXcoe7NRRVFVc0FNjwvd6scYxHo1TREAi1N4z8IxqwalJ7525TCfr0jJyHJfE9rLcXFgN5xwANq1L+glPc37m6B6LzV0ZZnegpf4bZHIaSnbxFy/tsVbtwQbvLTZSSKTY6hngol3o/PYwGV+HbqOAB8wgcNJQyk2IuDERKA== Received: from AS9PR06CA0647.eurprd06.prod.outlook.com (2603:10a6:20b:46f::22) by DU2PR07MB9486.eurprd07.prod.outlook.com (2603:10a6:10:493::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.24; Wed, 18 Sep 2024 09:14:04 +0000 Received: from AMS0EPF000001A5.eurprd05.prod.outlook.com (2603:10a6:20b:46f:cafe::e2) by AS9PR06CA0647.outlook.office365.com (2603:10a6:20b:46f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.30 via Frontend Transport; Wed, 18 Sep 2024 09:14:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by AMS0EPF000001A5.mail.protection.outlook.com (10.167.16.232) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.69) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id DA041380070; Wed, 18 Sep 2024 11:14:02 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 1/6] dpdk: do not force C linkage on include file dependencies Date: Wed, 18 Sep 2024 11:04:40 +0200 Message-ID: <20240918090445.725283-2-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF000001A5:EE_|DU2PR07MB9486:EE_ X-MS-Office365-Filtering-Correlation-Id: 615934a6-c555-45cc-155f-08dcd7c23db2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|82310400026|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?+yU2uMgEraOjE4ndyPjD+BOVq83YFT8?= =?utf-8?q?RgXsOQ7H33KJZdWWd9b+V171ykrN5AREWdkm/GhJZC1RLVLTa91+hxc7sxVbo9CQ3?= =?utf-8?q?q1/TEnKUUIgurufPiXfH6XBJ45xfmro69T7zXvA/m+4oe2EpML6b94687QxSNPV07?= =?utf-8?q?ZLVjOAyyuiGml07ZXmiFlZiQFN0CTMqTHN+HJRNebmJJYPyRlEYzcAm6bLAq3/1mM?= =?utf-8?q?ZWC23EuDW04/O1nENmVsZgWZmPC6x+GfdsXqcHxh/1orX4RJmd/B+7vLzsLR8zCoC?= =?utf-8?q?hXNE6RJQS6FCoAiymxTD9DqvzOjGc4jl3wyy1pYMzHJ5HwdZAFKdL3Od5nuOsAHST?= =?utf-8?q?gLHPV88rZdxtupgNLuHSrv1T/Os+0EIlf70+YFspnW1ge+5gOGyPHes0KAexYf+89?= =?utf-8?q?YuyklZoQXwDDx0DMEJK6gQ352l313o5gaDDgNxQkkxKJT6yOg9f/TOMoZi71cy858?= =?utf-8?q?GcPnDzuFwGtWfu7NpqIjKjG5lxjj/rrswfRuKzwbyhuOkJiLp6BUS++HCuofU7/ki?= =?utf-8?q?V+DnkwNOfKME8J+Yr+Zxxsiycj7Ybt8ND5Fc9g4fyOoEejI65EJBjW9PKtSqt0POb?= =?utf-8?q?PC5/oUURophWahjvjoAnyRR+Y2CDZu1vY1qhaTxNDDdlkKQ9ix6mfPk3Ci3bV8lr9?= =?utf-8?q?eonFN6DWrxkuNTTgptacITM+WcmALeKeH4/QftxxwWJ6dZUsTuePcDKdKwoDDq305?= =?utf-8?q?t+iZucB3YMx2QbBW52ljsAw/He5zkuBu1YBVl19d2+VVifX+HNep+ntK5r4El7EZD?= =?utf-8?q?rmwxTtJrfCskIkEMcgggFnYpe5aeJ0aJCfQTb1Hf8lWWDTEzxbYr2OEacZXxxg64W?= =?utf-8?q?9Mr+ht5TC1zL23IElb1DRA1MUJXBHzaoQPBe/CbCcgd0qx8hbTroGz8m/vCmMkAhE?= =?utf-8?q?tuu/ZUR5SjoMYig16lXUkabhuBi2Blw+ulW5nqNbO2QhxJuZbcbYuVDxGeCMBfZjW?= =?utf-8?q?ZKmEUqRsKiC04UtvBfUY9royLJRD25Pwx/mN3gVDzkRm+E4rVMNlOKeW/04eCDNjM?= =?utf-8?q?5pohL4RhWvYrPyuP+fBo7TWVfc4hl/ljkhWnylJ3RNpvyoGUn3l5VEzL4sgGia/Xz?= =?utf-8?q?mS71GPlPWSJkTiU5sDm3F8zczz8BEy49Gbg+oBzPLUwGeAYsmQVwwjJTB7JUPoFB8?= =?utf-8?q?OqJBxICefAad8hapc00gqfBz5gxvFM8ozHb3pcMDP095mh9Ks57TnHa6jYa1Flkpr?= =?utf-8?q?dixzN4WvlePaV+0PHwL+/uQPNuKbrS9C3CR2c+TDlS0IJRZ9LNmD2+rjmLSJkZgot?= =?utf-8?q?9hTP6EtypxyKA?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(36860700013)(82310400026)(1800799024)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:03.7851 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 615934a6-c555-45cc-155f-08dcd7c23db2 X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF000001A5.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR07MB9486 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Assure that 'extern "C" { /../ }' do not cover files included from a particular header file, and address minor issues resulting from this change of order. Dealing with C++ should delegate to the individual include file level, rather than being imposed by the user of that file. For example, forcing C linkage prevents __Generic macros being replaced with overloaded static inline functions in C++ translation units. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup --- PATCH v9: * Fix yet another issue in the ARM build. Author really needs an ARM system powerful enough to build DPDK. PATCH v8: * Fix issues in rte_memcpy_64.h causing build failures on ARM. PATCH v7: * Fix issues in rte_io.h, rte_pause.h and rte_thash_gfni.h causing build failures on ARM. (David Marchand) * Fix issue in rte_vfio.h, causing build failures unless VFIO_PRESENT. PATCH v6: * Add missing extern "C" in rte_atomic.h, rte_cpuflags.h, rte_io.h, rte_vect.h. * Fix 32-bit x86 build issues in rte_atomic.h. PATCH v5: * rte_dmadev.h was still including files under extern "C" { /../ }. (Chengwen Feng) * Fix rte_byteorder.h, broken on 32-bit x86. --- app/test/packet_burst_generator.h | 8 +++--- app/test/virtual_pmd.h | 4 +-- drivers/bus/auxiliary/bus_auxiliary_driver.h | 8 +++--- drivers/bus/cdx/bus_cdx_driver.h | 8 +++--- drivers/bus/dpaa/include/fsl_qman.h | 8 +++--- drivers/bus/fslmc/bus_fslmc_driver.h | 8 +++--- drivers/bus/pci/bus_pci_driver.h | 8 +++--- drivers/bus/pci/rte_bus_pci.h | 8 +++--- drivers/bus/platform/bus_platform_driver.h | 8 +++--- drivers/bus/vdev/bus_vdev_driver.h | 8 +++--- drivers/bus/vmbus/bus_vmbus_driver.h | 8 +++--- drivers/bus/vmbus/rte_bus_vmbus.h | 8 +++--- drivers/dma/cnxk/cnxk_dma_event_dp.h | 8 +++--- drivers/dma/ioat/ioat_hw_defs.h | 4 +-- drivers/event/dlb2/rte_pmd_dlb2.h | 8 +++--- drivers/mempool/dpaa2/rte_dpaa2_mempool.h | 6 ++--- drivers/net/avp/rte_avp_fifo.h | 8 +++--- drivers/net/bonding/rte_eth_bond.h | 4 +-- drivers/net/i40e/rte_pmd_i40e.h | 8 +++--- drivers/net/mlx5/mlx5_trace.h | 8 +++--- drivers/net/ring/rte_eth_ring.h | 4 +-- drivers/net/vhost/rte_eth_vhost.h | 8 +++--- drivers/raw/ifpga/afu_pmd_core.h | 8 +++--- drivers/raw/ifpga/afu_pmd_he_hssi.h | 6 ++--- drivers/raw/ifpga/afu_pmd_he_lpbk.h | 6 ++--- drivers/raw/ifpga/afu_pmd_he_mem.h | 6 ++--- drivers/raw/ifpga/afu_pmd_n3000.h | 6 ++--- drivers/raw/ifpga/rte_pmd_afu.h | 4 +-- drivers/raw/ifpga/rte_pmd_ifpga.h | 4 +-- examples/ethtool/lib/rte_ethtool.h | 8 +++--- examples/qos_sched/main.h | 4 +-- examples/vm_power_manager/channel_manager.h | 8 +++--- lib/acl/rte_acl_osdep.h | 8 +++--- lib/bbdev/rte_bbdev.h | 8 +++--- lib/bbdev/rte_bbdev_op.h | 8 +++--- lib/bbdev/rte_bbdev_pmd.h | 8 +++--- lib/bpf/bpf_def.h | 8 +++--- lib/compressdev/rte_comp.h | 4 +-- lib/compressdev/rte_compressdev.h | 6 ++--- lib/compressdev/rte_compressdev_internal.h | 8 +++--- lib/compressdev/rte_compressdev_pmd.h | 8 +++--- lib/cryptodev/cryptodev_pmd.h | 8 +++--- lib/cryptodev/cryptodev_trace.h | 8 +++--- lib/cryptodev/rte_crypto.h | 8 +++--- lib/cryptodev/rte_crypto_asym.h | 8 +++--- lib/cryptodev/rte_crypto_sym.h | 8 +++--- lib/cryptodev/rte_cryptodev.h | 8 +++--- lib/cryptodev/rte_cryptodev_trace_fp.h | 4 +-- lib/dispatcher/rte_dispatcher.h | 8 +++--- lib/dmadev/rte_dmadev.h | 8 ++++++ lib/eal/arm/include/rte_atomic_32.h | 4 +-- lib/eal/arm/include/rte_atomic_64.h | 8 +++--- lib/eal/arm/include/rte_byteorder.h | 8 +++--- lib/eal/arm/include/rte_cpuflags_32.h | 8 +++--- lib/eal/arm/include/rte_cpuflags_64.h | 8 +++--- lib/eal/arm/include/rte_cycles_32.h | 4 +-- lib/eal/arm/include/rte_cycles_64.h | 4 +-- lib/eal/arm/include/rte_io.h | 8 +++--- lib/eal/arm/include/rte_io_64.h | 8 +++--- lib/eal/arm/include/rte_memcpy_32.h | 8 +++--- lib/eal/arm/include/rte_memcpy_64.h | 23 +++++++++++------ lib/eal/arm/include/rte_pause.h | 8 +++--- lib/eal/arm/include/rte_pause_32.h | 6 ++--- lib/eal/arm/include/rte_pause_64.h | 8 +++--- lib/eal/arm/include/rte_power_intrinsics.h | 8 +++--- lib/eal/arm/include/rte_prefetch_32.h | 8 +++--- lib/eal/arm/include/rte_prefetch_64.h | 8 +++--- lib/eal/arm/include/rte_rwlock.h | 4 +-- lib/eal/arm/include/rte_spinlock.h | 6 ++--- lib/eal/freebsd/include/rte_os.h | 8 +++--- lib/eal/include/bus_driver.h | 8 +++--- lib/eal/include/dev_driver.h | 6 ++--- lib/eal/include/eal_trace_internal.h | 8 +++--- lib/eal/include/generic/rte_atomic.h | 8 ++++++ lib/eal/include/generic/rte_byteorder.h | 8 ++++++ lib/eal/include/generic/rte_cpuflags.h | 8 ++++++ lib/eal/include/generic/rte_cycles.h | 8 ++++++ lib/eal/include/generic/rte_io.h | 8 ++++++ lib/eal/include/generic/rte_memcpy.h | 8 ++++++ lib/eal/include/generic/rte_pause.h | 8 ++++++ .../include/generic/rte_power_intrinsics.h | 8 ++++++ lib/eal/include/generic/rte_prefetch.h | 8 ++++++ lib/eal/include/generic/rte_rwlock.h | 8 +++--- lib/eal/include/generic/rte_spinlock.h | 8 ++++++ lib/eal/include/generic/rte_vect.h | 8 ++++++ lib/eal/include/rte_alarm.h | 4 +-- lib/eal/include/rte_bitmap.h | 8 +++--- lib/eal/include/rte_bus.h | 8 +++--- lib/eal/include/rte_class.h | 4 +-- lib/eal/include/rte_common.h | 8 +++--- lib/eal/include/rte_dev.h | 8 +++--- lib/eal/include/rte_devargs.h | 8 +++--- lib/eal/include/rte_eal_trace.h | 4 +-- lib/eal/include/rte_errno.h | 4 +-- lib/eal/include/rte_fbarray.h | 8 +++--- lib/eal/include/rte_keepalive.h | 6 ++--- lib/eal/include/rte_mcslock.h | 8 +++--- lib/eal/include/rte_memory.h | 8 +++--- lib/eal/include/rte_pci_dev_features.h | 4 +-- lib/eal/include/rte_pflock.h | 8 +++--- lib/eal/include/rte_random.h | 4 +-- lib/eal/include/rte_seqcount.h | 8 +++--- lib/eal/include/rte_seqlock.h | 8 +++--- lib/eal/include/rte_service.h | 8 +++--- lib/eal/include/rte_service_component.h | 4 +-- lib/eal/include/rte_stdatomic.h | 5 +--- lib/eal/include/rte_string_fns.h | 17 +++++++++---- lib/eal/include/rte_tailq.h | 6 ++--- lib/eal/include/rte_ticketlock.h | 8 +++--- lib/eal/include/rte_time.h | 6 ++--- lib/eal/include/rte_trace.h | 8 +++--- lib/eal/include/rte_trace_point.h | 8 +++--- lib/eal/include/rte_trace_point_register.h | 8 +++--- lib/eal/include/rte_uuid.h | 8 +++--- lib/eal/include/rte_version.h | 6 ++--- lib/eal/include/rte_vfio.h | 8 +++--- lib/eal/linux/include/rte_os.h | 8 +++--- lib/eal/loongarch/include/rte_atomic.h | 6 ++--- lib/eal/loongarch/include/rte_byteorder.h | 4 +-- lib/eal/loongarch/include/rte_cpuflags.h | 8 +++--- lib/eal/loongarch/include/rte_cycles.h | 4 +-- lib/eal/loongarch/include/rte_io.h | 4 +-- lib/eal/loongarch/include/rte_memcpy.h | 4 +-- lib/eal/loongarch/include/rte_pause.h | 8 +++--- .../loongarch/include/rte_power_intrinsics.h | 8 +++--- lib/eal/loongarch/include/rte_prefetch.h | 8 +++--- lib/eal/loongarch/include/rte_rwlock.h | 4 +-- lib/eal/loongarch/include/rte_spinlock.h | 6 ++--- lib/eal/ppc/include/rte_atomic.h | 6 ++--- lib/eal/ppc/include/rte_byteorder.h | 6 ++--- lib/eal/ppc/include/rte_cpuflags.h | 8 +++--- lib/eal/ppc/include/rte_cycles.h | 8 +++--- lib/eal/ppc/include/rte_io.h | 4 +-- lib/eal/ppc/include/rte_memcpy.h | 4 +-- lib/eal/ppc/include/rte_pause.h | 8 +++--- lib/eal/ppc/include/rte_power_intrinsics.h | 8 +++--- lib/eal/ppc/include/rte_prefetch.h | 8 +++--- lib/eal/ppc/include/rte_rwlock.h | 4 +-- lib/eal/ppc/include/rte_spinlock.h | 8 +++--- lib/eal/riscv/include/rte_atomic.h | 8 +++--- lib/eal/riscv/include/rte_byteorder.h | 8 +++--- lib/eal/riscv/include/rte_cpuflags.h | 8 +++--- lib/eal/riscv/include/rte_cycles.h | 4 +-- lib/eal/riscv/include/rte_io.h | 4 +-- lib/eal/riscv/include/rte_memcpy.h | 4 +-- lib/eal/riscv/include/rte_pause.h | 8 +++--- lib/eal/riscv/include/rte_power_intrinsics.h | 8 +++--- lib/eal/riscv/include/rte_prefetch.h | 8 +++--- lib/eal/riscv/include/rte_rwlock.h | 4 +-- lib/eal/riscv/include/rte_spinlock.h | 6 ++--- lib/eal/windows/include/pthread.h | 6 ++--- lib/eal/windows/include/regex.h | 8 +++--- lib/eal/windows/include/rte_windows.h | 8 +++--- lib/eal/x86/include/rte_atomic.h | 25 +++++++++++++------ lib/eal/x86/include/rte_byteorder.h | 16 ++++++------ lib/eal/x86/include/rte_cpuflags.h | 8 +++--- lib/eal/x86/include/rte_cycles.h | 8 +++--- lib/eal/x86/include/rte_io.h | 8 +++--- lib/eal/x86/include/rte_pause.h | 7 +++--- lib/eal/x86/include/rte_power_intrinsics.h | 8 +++--- lib/eal/x86/include/rte_prefetch.h | 8 +++--- lib/eal/x86/include/rte_rwlock.h | 6 ++--- lib/eal/x86/include/rte_spinlock.h | 9 +++---- lib/ethdev/ethdev_driver.h | 8 +++--- lib/ethdev/ethdev_pci.h | 8 +++--- lib/ethdev/ethdev_trace.h | 8 +++--- lib/ethdev/ethdev_vdev.h | 8 +++--- lib/ethdev/rte_cman.h | 4 +-- lib/ethdev/rte_dev_info.h | 4 +-- lib/ethdev/rte_ethdev.h | 8 +++--- lib/ethdev/rte_ethdev_trace_fp.h | 4 +-- lib/eventdev/event_timer_adapter_pmd.h | 4 +-- lib/eventdev/eventdev_pmd.h | 8 +++--- lib/eventdev/eventdev_pmd_pci.h | 8 +++--- lib/eventdev/eventdev_pmd_vdev.h | 8 +++--- lib/eventdev/eventdev_trace.h | 8 +++--- lib/eventdev/rte_event_crypto_adapter.h | 8 +++--- lib/eventdev/rte_event_eth_rx_adapter.h | 8 +++--- lib/eventdev/rte_event_eth_tx_adapter.h | 8 +++--- lib/eventdev/rte_event_ring.h | 8 +++--- lib/eventdev/rte_event_timer_adapter.h | 8 +++--- lib/eventdev/rte_eventdev.h | 8 +++--- lib/eventdev/rte_eventdev_trace_fp.h | 4 +-- lib/graph/rte_graph_model_mcore_dispatch.h | 8 +++--- lib/graph/rte_graph_worker.h | 6 ++--- lib/gso/rte_gso.h | 6 ++--- lib/hash/rte_fbk_hash.h | 8 +++--- lib/hash/rte_hash_crc.h | 8 +++--- lib/hash/rte_jhash.h | 8 +++--- lib/hash/rte_thash.h | 8 +++--- lib/hash/rte_thash_gfni.h | 8 +++--- lib/ip_frag/rte_ip_frag.h | 8 +++--- lib/ipsec/rte_ipsec.h | 8 +++--- lib/log/rte_log.h | 8 +++--- lib/lpm/rte_lpm.h | 8 +++--- lib/member/rte_member.h | 8 +++--- lib/member/rte_member_sketch.h | 6 ++--- lib/member/rte_member_sketch_avx512.h | 8 +++--- lib/member/rte_member_x86.h | 4 +-- lib/member/rte_xxh64_avx512.h | 6 ++--- lib/mempool/mempool_trace.h | 8 +++--- lib/mempool/rte_mempool_trace_fp.h | 4 +-- lib/meter/rte_meter.h | 8 +++--- lib/mldev/mldev_utils.h | 8 +++--- lib/mldev/rte_mldev_core.h | 8 +++--- lib/mldev/rte_mldev_pmd.h | 8 +++--- lib/net/rte_ether.h | 8 +++--- lib/net/rte_net.h | 8 +++--- lib/net/rte_sctp.h | 8 +++--- lib/node/rte_node_eth_api.h | 8 +++--- lib/node/rte_node_ip4_api.h | 8 +++--- lib/node/rte_node_ip6_api.h | 6 ++--- lib/node/rte_node_udp4_input_api.h | 8 +++--- lib/pci/rte_pci.h | 8 +++--- lib/pdcp/rte_pdcp.h | 8 +++--- lib/pipeline/rte_pipeline.h | 8 +++--- lib/pipeline/rte_port_in_action.h | 8 +++--- lib/pipeline/rte_swx_ctl.h | 8 +++--- lib/pipeline/rte_swx_extern.h | 8 +++--- lib/pipeline/rte_swx_ipsec.h | 8 +++--- lib/pipeline/rte_swx_pipeline.h | 8 +++--- lib/pipeline/rte_swx_pipeline_spec.h | 8 +++--- lib/pipeline/rte_table_action.h | 8 +++--- lib/port/rte_port.h | 8 +++--- lib/port/rte_port_ethdev.h | 8 +++--- lib/port/rte_port_eventdev.h | 8 +++--- lib/port/rte_port_fd.h | 8 +++--- lib/port/rte_port_frag.h | 8 +++--- lib/port/rte_port_ras.h | 8 +++--- lib/port/rte_port_ring.h | 8 +++--- lib/port/rte_port_sched.h | 8 +++--- lib/port/rte_port_source_sink.h | 8 +++--- lib/port/rte_port_sym_crypto.h | 8 +++--- lib/port/rte_swx_port.h | 8 +++--- lib/port/rte_swx_port_ethdev.h | 8 +++--- lib/port/rte_swx_port_fd.h | 8 +++--- lib/port/rte_swx_port_ring.h | 8 +++--- lib/port/rte_swx_port_source_sink.h | 8 +++--- lib/rawdev/rte_rawdev.h | 6 ++--- lib/rawdev/rte_rawdev_pmd.h | 8 +++--- lib/rcu/rte_rcu_qsbr.h | 8 +++--- lib/regexdev/rte_regexdev.h | 8 +++--- lib/ring/rte_ring.h | 6 ++--- lib/ring/rte_ring_core.h | 8 +++--- lib/ring/rte_ring_elem.h | 8 +++--- lib/ring/rte_ring_hts.h | 4 +-- lib/ring/rte_ring_peek.h | 4 +-- lib/ring/rte_ring_peek_zc.h | 4 +-- lib/ring/rte_ring_rts.h | 4 +-- lib/sched/rte_approx.h | 8 +++--- lib/sched/rte_pie.h | 8 +++--- lib/sched/rte_red.h | 8 +++--- lib/sched/rte_sched.h | 8 +++--- lib/sched/rte_sched_common.h | 6 ++--- lib/security/rte_security.h | 8 +++--- lib/security/rte_security_driver.h | 6 ++--- lib/stack/rte_stack.h | 8 +++--- lib/table/rte_lru.h | 12 +++------ lib/table/rte_lru_arm64.h | 8 +++--- lib/table/rte_lru_x86.h | 8 ------ lib/table/rte_swx_hash_func.h | 8 +++--- lib/table/rte_swx_keycmp.h | 8 +++--- lib/table/rte_swx_table.h | 8 +++--- lib/table/rte_swx_table_em.h | 8 +++--- lib/table/rte_swx_table_learner.h | 8 +++--- lib/table/rte_swx_table_selector.h | 8 +++--- lib/table/rte_swx_table_wm.h | 8 +++--- lib/table/rte_table.h | 8 +++--- lib/table/rte_table_acl.h | 8 +++--- lib/table/rte_table_array.h | 8 +++--- lib/table/rte_table_hash.h | 8 +++--- lib/table/rte_table_hash_cuckoo.h | 8 +++--- lib/table/rte_table_hash_func.h | 12 ++++++--- lib/table/rte_table_lpm.h | 8 +++--- lib/table/rte_table_lpm_ipv6.h | 8 +++--- lib/table/rte_table_stub.h | 8 +++--- lib/telemetry/rte_telemetry.h | 8 +++--- lib/vhost/rte_vdpa.h | 8 +++--- lib/vhost/rte_vhost.h | 8 +++--- lib/vhost/rte_vhost_async.h | 8 +++--- lib/vhost/rte_vhost_crypto.h | 4 +-- lib/vhost/vdpa_driver.h | 8 +++--- 282 files changed, 1093 insertions(+), 983 deletions(-) diff --git a/app/test/packet_burst_generator.h b/app/test/packet_burst_generator.h index b99286f50e..cce41bcd0f 100644 --- a/app/test/packet_burst_generator.h +++ b/app/test/packet_burst_generator.h @@ -5,10 +5,6 @@ #ifndef PACKET_BURST_GENERATOR_H_ #define PACKET_BURST_GENERATOR_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -17,6 +13,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define IPV4_ADDR(a, b, c, d)(((a & 0xff) << 24) | ((b & 0xff) << 16) | \ ((c & 0xff) << 8) | (d & 0xff)) diff --git a/app/test/virtual_pmd.h b/app/test/virtual_pmd.h index 120b58b273..a5a71d7cb4 100644 --- a/app/test/virtual_pmd.h +++ b/app/test/virtual_pmd.h @@ -5,12 +5,12 @@ #ifndef __VIRTUAL_ETHDEV_H_ #define __VIRTUAL_ETHDEV_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - int virtual_ethdev_init(void); diff --git a/drivers/bus/auxiliary/bus_auxiliary_driver.h b/drivers/bus/auxiliary/bus_auxiliary_driver.h index 58fb7c7f69..40ab1f0912 100644 --- a/drivers/bus/auxiliary/bus_auxiliary_driver.h +++ b/drivers/bus/auxiliary/bus_auxiliary_driver.h @@ -11,10 +11,6 @@ * Auxiliary Bus Interface. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -28,6 +24,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_BUS_AUXILIARY_NAME "auxiliary" /* Forward declarations */ diff --git a/drivers/bus/cdx/bus_cdx_driver.h b/drivers/bus/cdx/bus_cdx_driver.h index 211f8e406b..d390e7b5a1 100644 --- a/drivers/bus/cdx/bus_cdx_driver.h +++ b/drivers/bus/cdx/bus_cdx_driver.h @@ -10,10 +10,6 @@ * AMD CDX bus interface */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -22,6 +18,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Forward declarations */ struct rte_cdx_device; struct rte_cdx_driver; diff --git a/drivers/bus/dpaa/include/fsl_qman.h b/drivers/bus/dpaa/include/fsl_qman.h index c0677976e8..f39007b84d 100644 --- a/drivers/bus/dpaa/include/fsl_qman.h +++ b/drivers/bus/dpaa/include/fsl_qman.h @@ -8,14 +8,14 @@ #ifndef __FSL_QMAN_H #define __FSL_QMAN_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* FQ lookups (turn this on for 64bit user-space) */ #ifdef RTE_ARCH_64 #define CONFIG_FSL_QMAN_FQ_LOOKUP diff --git a/drivers/bus/fslmc/bus_fslmc_driver.h b/drivers/bus/fslmc/bus_fslmc_driver.h index 7ac5fe6ff1..3095458133 100644 --- a/drivers/bus/fslmc/bus_fslmc_driver.h +++ b/drivers/bus/fslmc/bus_fslmc_driver.h @@ -13,10 +13,6 @@ * RTE FSLMC Bus Interface */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -40,6 +36,10 @@ extern "C" { #include "portal/dpaa2_hw_pvt.h" #include "portal/dpaa2_hw_dpio.h" +#ifdef __cplusplus +extern "C" { +#endif + #define FSLMC_OBJECT_MAX_LEN 32 /**< Length of each device on bus */ #define DPAA2_INVALID_MBUF_SEQN 0 diff --git a/drivers/bus/pci/bus_pci_driver.h b/drivers/bus/pci/bus_pci_driver.h index be32263a82..2cc1119072 100644 --- a/drivers/bus/pci/bus_pci_driver.h +++ b/drivers/bus/pci/bus_pci_driver.h @@ -6,14 +6,14 @@ #ifndef BUS_PCI_DRIVER_H #define BUS_PCI_DRIVER_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** Pathname of PCI devices directory. */ __rte_internal const char *rte_pci_get_sysfs_path(void); diff --git a/drivers/bus/pci/rte_bus_pci.h b/drivers/bus/pci/rte_bus_pci.h index a3798cb1cb..19a7b15b99 100644 --- a/drivers/bus/pci/rte_bus_pci.h +++ b/drivers/bus/pci/rte_bus_pci.h @@ -11,10 +11,6 @@ * PCI device & driver interface */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -27,6 +23,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Forward declarations */ struct rte_pci_device; struct rte_pci_driver; diff --git a/drivers/bus/platform/bus_platform_driver.h b/drivers/bus/platform/bus_platform_driver.h index 5ac54fb739..a6f246f7c4 100644 --- a/drivers/bus/platform/bus_platform_driver.h +++ b/drivers/bus/platform/bus_platform_driver.h @@ -10,10 +10,6 @@ * Platform bus interface. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -23,6 +19,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Forward declarations */ struct rte_platform_bus; struct rte_platform_device; diff --git a/drivers/bus/vdev/bus_vdev_driver.h b/drivers/bus/vdev/bus_vdev_driver.h index bc7e30d7c6..cba1fb5269 100644 --- a/drivers/bus/vdev/bus_vdev_driver.h +++ b/drivers/bus/vdev/bus_vdev_driver.h @@ -5,15 +5,15 @@ #ifndef BUS_VDEV_DRIVER_H #define BUS_VDEV_DRIVER_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_vdev_device { RTE_TAILQ_ENTRY(rte_vdev_device) next; /**< Next attached vdev */ struct rte_device device; /**< Inherit core device */ diff --git a/drivers/bus/vmbus/bus_vmbus_driver.h b/drivers/bus/vmbus/bus_vmbus_driver.h index e2475a642d..bc394208de 100644 --- a/drivers/bus/vmbus/bus_vmbus_driver.h +++ b/drivers/bus/vmbus/bus_vmbus_driver.h @@ -6,14 +6,14 @@ #ifndef BUS_VMBUS_DRIVER_H #define BUS_VMBUS_DRIVER_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct vmbus_channel; struct vmbus_mon_page; diff --git a/drivers/bus/vmbus/rte_bus_vmbus.h b/drivers/bus/vmbus/rte_bus_vmbus.h index 9467bd8f3d..fd18bca73c 100644 --- a/drivers/bus/vmbus/rte_bus_vmbus.h +++ b/drivers/bus/vmbus/rte_bus_vmbus.h @@ -11,10 +11,6 @@ * * VMBUS Interface */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -28,6 +24,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Forward declarations */ struct rte_vmbus_device; struct rte_vmbus_driver; diff --git a/drivers/dma/cnxk/cnxk_dma_event_dp.h b/drivers/dma/cnxk/cnxk_dma_event_dp.h index 06b5ca8279..8c6cf5dd9a 100644 --- a/drivers/dma/cnxk/cnxk_dma_event_dp.h +++ b/drivers/dma/cnxk/cnxk_dma_event_dp.h @@ -5,16 +5,16 @@ #ifndef _CNXK_DMA_EVENT_DP_H_ #define _CNXK_DMA_EVENT_DP_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + __rte_internal uint16_t cn10k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events); diff --git a/drivers/dma/ioat/ioat_hw_defs.h b/drivers/dma/ioat/ioat_hw_defs.h index dc3493a78f..11893951f2 100644 --- a/drivers/dma/ioat/ioat_hw_defs.h +++ b/drivers/dma/ioat/ioat_hw_defs.h @@ -5,12 +5,12 @@ #ifndef IOAT_HW_DEFS_H #define IOAT_HW_DEFS_H +#include + #ifdef __cplusplus extern "C" { #endif -#include - #define IOAT_PCI_CHANERR_INT_OFFSET 0x180 #define IOAT_VER_3_0 0x30 diff --git a/drivers/event/dlb2/rte_pmd_dlb2.h b/drivers/event/dlb2/rte_pmd_dlb2.h index 334c6c356d..dba7fd2f43 100644 --- a/drivers/event/dlb2/rte_pmd_dlb2.h +++ b/drivers/event/dlb2/rte_pmd_dlb2.h @@ -11,14 +11,14 @@ #ifndef _RTE_PMD_DLB2_H_ #define _RTE_PMD_DLB2_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @warning * @b EXPERIMENTAL: this API may change, or be removed, without prior notice diff --git a/drivers/mempool/dpaa2/rte_dpaa2_mempool.h b/drivers/mempool/dpaa2/rte_dpaa2_mempool.h index 7fe3d93f61..0286090b1b 100644 --- a/drivers/mempool/dpaa2/rte_dpaa2_mempool.h +++ b/drivers/mempool/dpaa2/rte_dpaa2_mempool.h @@ -12,13 +12,13 @@ * */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** * Get BPID corresponding to the packet pool * diff --git a/drivers/net/avp/rte_avp_fifo.h b/drivers/net/avp/rte_avp_fifo.h index c1658da685..879de3b1c0 100644 --- a/drivers/net/avp/rte_avp_fifo.h +++ b/drivers/net/avp/rte_avp_fifo.h @@ -8,10 +8,6 @@ #include "rte_avp_common.h" -#ifdef __cplusplus -extern "C" { -#endif - #ifdef __KERNEL__ /* Write memory barrier for kernel compiles */ #define AVP_WMB() smp_wmb() @@ -27,6 +23,10 @@ extern "C" { #ifndef __KERNEL__ #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Initializes the avp fifo structure */ diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index f10165f2c6..e59ff8793e 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -17,12 +17,12 @@ * load balancing of network ports */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /* Supported modes of operation of link bonding library */ #define BONDING_MODE_ROUND_ROBIN (0) diff --git a/drivers/net/i40e/rte_pmd_i40e.h b/drivers/net/i40e/rte_pmd_i40e.h index a802f989e9..5af7e2330f 100644 --- a/drivers/net/i40e/rte_pmd_i40e.h +++ b/drivers/net/i40e/rte_pmd_i40e.h @@ -14,14 +14,14 @@ * */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Response sent back to i40e driver from user app after callback */ diff --git a/drivers/net/mlx5/mlx5_trace.h b/drivers/net/mlx5/mlx5_trace.h index 888d96f60b..a8f0b372c8 100644 --- a/drivers/net/mlx5/mlx5_trace.h +++ b/drivers/net/mlx5/mlx5_trace.h @@ -11,14 +11,14 @@ * API for mlx5 PMD trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* TX burst subroutines trace points. */ RTE_TRACE_POINT_FP( rte_pmd_mlx5_trace_tx_entry, diff --git a/drivers/net/ring/rte_eth_ring.h b/drivers/net/ring/rte_eth_ring.h index 59e074d0ad..98292c7b33 100644 --- a/drivers/net/ring/rte_eth_ring.h +++ b/drivers/net/ring/rte_eth_ring.h @@ -5,12 +5,12 @@ #ifndef _RTE_ETH_RING_H_ #define _RTE_ETH_RING_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Create a new ethdev port from a set of rings * diff --git a/drivers/net/vhost/rte_eth_vhost.h b/drivers/net/vhost/rte_eth_vhost.h index 0e68b9f668..6ec59a7adc 100644 --- a/drivers/net/vhost/rte_eth_vhost.h +++ b/drivers/net/vhost/rte_eth_vhost.h @@ -5,15 +5,15 @@ #ifndef _RTE_ETH_VHOST_H_ #define _RTE_ETH_VHOST_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Event description. */ diff --git a/drivers/raw/ifpga/afu_pmd_core.h b/drivers/raw/ifpga/afu_pmd_core.h index a8f1afe343..abf9e491f7 100644 --- a/drivers/raw/ifpga/afu_pmd_core.h +++ b/drivers/raw/ifpga/afu_pmd_core.h @@ -5,10 +5,6 @@ #ifndef AFU_PMD_CORE_H #define AFU_PMD_CORE_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -20,6 +16,10 @@ extern "C" { #include "ifpga_rawdev.h" +#ifdef __cplusplus +extern "C" { +#endif + #define AFU_RAWDEV_MAX_DRVS 32 struct afu_rawdev; diff --git a/drivers/raw/ifpga/afu_pmd_he_hssi.h b/drivers/raw/ifpga/afu_pmd_he_hssi.h index aebbe32d54..282289d912 100644 --- a/drivers/raw/ifpga/afu_pmd_he_hssi.h +++ b/drivers/raw/ifpga/afu_pmd_he_hssi.h @@ -5,13 +5,13 @@ #ifndef AFU_PMD_HE_HSSI_H #define AFU_PMD_HE_HSSI_H +#include "afu_pmd_core.h" +#include "rte_pmd_afu.h" + #ifdef __cplusplus extern "C" { #endif -#include "afu_pmd_core.h" -#include "rte_pmd_afu.h" - #define HE_HSSI_UUID_L 0xbb370242ac130002 #define HE_HSSI_UUID_H 0x823c334c98bf11ea #define NUM_HE_HSSI_PORTS 8 diff --git a/drivers/raw/ifpga/afu_pmd_he_lpbk.h b/drivers/raw/ifpga/afu_pmd_he_lpbk.h index eab7b55199..67b3653c21 100644 --- a/drivers/raw/ifpga/afu_pmd_he_lpbk.h +++ b/drivers/raw/ifpga/afu_pmd_he_lpbk.h @@ -5,13 +5,13 @@ #ifndef AFU_PMD_HE_LPBK_H #define AFU_PMD_HE_LPBK_H +#include "afu_pmd_core.h" +#include "rte_pmd_afu.h" + #ifdef __cplusplus extern "C" { #endif -#include "afu_pmd_core.h" -#include "rte_pmd_afu.h" - #define HE_LPBK_UUID_L 0xb94b12284c31e02b #define HE_LPBK_UUID_H 0x56e203e9864f49a7 #define HE_MEM_LPBK_UUID_L 0xbb652a578330a8eb diff --git a/drivers/raw/ifpga/afu_pmd_he_mem.h b/drivers/raw/ifpga/afu_pmd_he_mem.h index 998ca92416..41854d8c58 100644 --- a/drivers/raw/ifpga/afu_pmd_he_mem.h +++ b/drivers/raw/ifpga/afu_pmd_he_mem.h @@ -5,13 +5,13 @@ #ifndef AFU_PMD_HE_MEM_H #define AFU_PMD_HE_MEM_H +#include "afu_pmd_core.h" +#include "rte_pmd_afu.h" + #ifdef __cplusplus extern "C" { #endif -#include "afu_pmd_core.h" -#include "rte_pmd_afu.h" - #define HE_MEM_TG_UUID_L 0xa3dc5b831f5cecbb #define HE_MEM_TG_UUID_H 0x4dadea342c7848cb diff --git a/drivers/raw/ifpga/afu_pmd_n3000.h b/drivers/raw/ifpga/afu_pmd_n3000.h index 403cc64b91..f6b6e07c6b 100644 --- a/drivers/raw/ifpga/afu_pmd_n3000.h +++ b/drivers/raw/ifpga/afu_pmd_n3000.h @@ -5,13 +5,13 @@ #ifndef AFU_PMD_N3000_H #define AFU_PMD_N3000_H +#include "afu_pmd_core.h" +#include "rte_pmd_afu.h" + #ifdef __cplusplus extern "C" { #endif -#include "afu_pmd_core.h" -#include "rte_pmd_afu.h" - #define N3000_AFU_UUID_L 0xc000c9660d824272 #define N3000_AFU_UUID_H 0x9aeffe5f84570612 #define N3000_NLB0_UUID_L 0xf89e433683f9040b diff --git a/drivers/raw/ifpga/rte_pmd_afu.h b/drivers/raw/ifpga/rte_pmd_afu.h index 5403ed25f5..0edacc3a9c 100644 --- a/drivers/raw/ifpga/rte_pmd_afu.h +++ b/drivers/raw/ifpga/rte_pmd_afu.h @@ -14,12 +14,12 @@ * */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - #define RTE_PMD_AFU_N3000_NLB 1 #define RTE_PMD_AFU_N3000_DMA 2 diff --git a/drivers/raw/ifpga/rte_pmd_ifpga.h b/drivers/raw/ifpga/rte_pmd_ifpga.h index 791543f2cd..36b7f9c018 100644 --- a/drivers/raw/ifpga/rte_pmd_ifpga.h +++ b/drivers/raw/ifpga/rte_pmd_ifpga.h @@ -14,12 +14,12 @@ * */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - #define IFPGA_MAX_PORT_NUM 4 /** diff --git a/examples/ethtool/lib/rte_ethtool.h b/examples/ethtool/lib/rte_ethtool.h index d27e0102b1..c7dd3d9755 100644 --- a/examples/ethtool/lib/rte_ethtool.h +++ b/examples/ethtool/lib/rte_ethtool.h @@ -30,14 +30,14 @@ * rte_ethtool_net_set_rx_mode net_device_ops::ndo_set_rx_mode * */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Retrieve the Ethernet device driver information according to * attributes described by ethtool data structure, ethtool_drvinfo. diff --git a/examples/qos_sched/main.h b/examples/qos_sched/main.h index 04e77a4a10..ea66df0434 100644 --- a/examples/qos_sched/main.h +++ b/examples/qos_sched/main.h @@ -5,12 +5,12 @@ #ifndef _MAIN_H_ #define _MAIN_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - #define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1 /* diff --git a/examples/vm_power_manager/channel_manager.h b/examples/vm_power_manager/channel_manager.h index eb989b20ad..6f70539815 100644 --- a/examples/vm_power_manager/channel_manager.h +++ b/examples/vm_power_manager/channel_manager.h @@ -5,16 +5,16 @@ #ifndef CHANNEL_MANAGER_H_ #define CHANNEL_MANAGER_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Maximum name length including '\0' terminator */ #define CHANNEL_MGR_MAX_NAME_LEN 64 diff --git a/lib/acl/rte_acl_osdep.h b/lib/acl/rte_acl_osdep.h index 3c1dc402ca..e4c7d07c69 100644 --- a/lib/acl/rte_acl_osdep.h +++ b/lib/acl/rte_acl_osdep.h @@ -5,10 +5,6 @@ #ifndef _RTE_ACL_OSDEP_H_ #define _RTE_ACL_OSDEP_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * @@ -49,6 +45,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/bbdev/rte_bbdev.h b/lib/bbdev/rte_bbdev.h index 0cbfdd1c95..9e83dd2bb0 100644 --- a/lib/bbdev/rte_bbdev.h +++ b/lib/bbdev/rte_bbdev.h @@ -20,10 +20,6 @@ * from the same queue. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -32,6 +28,10 @@ extern "C" { #include "rte_bbdev_op.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_BBDEV_MAX_DEVS #define RTE_BBDEV_MAX_DEVS 128 /**< Max number of devices */ #endif diff --git a/lib/bbdev/rte_bbdev_op.h b/lib/bbdev/rte_bbdev_op.h index 459631d0d0..6f4bae7d0f 100644 --- a/lib/bbdev/rte_bbdev_op.h +++ b/lib/bbdev/rte_bbdev_op.h @@ -11,10 +11,6 @@ * Defines wireless base band layer 1 operations and capabilities */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -23,6 +19,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Number of columns in sub-block interleaver (36.212, section 5.1.4.1.1) */ #define RTE_BBDEV_TURBO_C_SUBBLOCK (32) /* Maximum size of Transport Block (36.213, Table, Table 7.1.7.2.5-1) */ diff --git a/lib/bbdev/rte_bbdev_pmd.h b/lib/bbdev/rte_bbdev_pmd.h index 442b23943d..0a1738fc05 100644 --- a/lib/bbdev/rte_bbdev_pmd.h +++ b/lib/bbdev/rte_bbdev_pmd.h @@ -14,15 +14,15 @@ * bbdev interface. User applications should not use this API. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "rte_bbdev.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Suggested value for SW based devices */ #define RTE_BBDEV_DEFAULT_MAX_NB_QUEUES RTE_MAX_LCORE diff --git a/lib/bpf/bpf_def.h b/lib/bpf/bpf_def.h index f08cd9106b..9f2e162914 100644 --- a/lib/bpf/bpf_def.h +++ b/lib/bpf/bpf_def.h @@ -7,10 +7,6 @@ #ifndef _RTE_BPF_DEF_H_ #define _RTE_BPF_DEF_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * @@ -25,6 +21,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /* * The instruction encodings. diff --git a/lib/compressdev/rte_comp.h b/lib/compressdev/rte_comp.h index 830a240b6b..d66a4b1cb9 100644 --- a/lib/compressdev/rte_comp.h +++ b/lib/compressdev/rte_comp.h @@ -11,12 +11,12 @@ * RTE definitions for Data Compression Service */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * compression service feature flags * diff --git a/lib/compressdev/rte_compressdev.h b/lib/compressdev/rte_compressdev.h index e0294a18bd..b3392553a6 100644 --- a/lib/compressdev/rte_compressdev.h +++ b/lib/compressdev/rte_compressdev.h @@ -13,13 +13,13 @@ * Defines comp device APIs for the provisioning of compression operations. */ + +#include "rte_comp.h" + #ifdef __cplusplus extern "C" { #endif - -#include "rte_comp.h" - /** * Parameter log base 2 range description. * Final value will be 2^value. diff --git a/lib/compressdev/rte_compressdev_internal.h b/lib/compressdev/rte_compressdev_internal.h index 67f8b51a37..a980d74cbf 100644 --- a/lib/compressdev/rte_compressdev_internal.h +++ b/lib/compressdev/rte_compressdev_internal.h @@ -5,10 +5,6 @@ #ifndef _RTE_COMPRESSDEV_INTERNAL_H_ #define _RTE_COMPRESSDEV_INTERNAL_H_ -#ifdef __cplusplus -extern "C" { -#endif - /* rte_compressdev_internal.h * This file holds Compressdev private data structures. */ @@ -16,6 +12,10 @@ extern "C" { #include "rte_comp.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_COMPRESSDEV_NAME_MAX_LEN (64) /**< Max length of name of comp PMD */ diff --git a/lib/compressdev/rte_compressdev_pmd.h b/lib/compressdev/rte_compressdev_pmd.h index 32e29c9d16..ea721f014d 100644 --- a/lib/compressdev/rte_compressdev_pmd.h +++ b/lib/compressdev/rte_compressdev_pmd.h @@ -13,10 +13,6 @@ * them directly. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -24,6 +20,10 @@ extern "C" { #include "rte_compressdev.h" #include "rte_compressdev_internal.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_COMPRESSDEV_PMD_NAME_ARG ("name") #define RTE_COMPRESSDEV_PMD_SOCKET_ID_ARG ("socket_id") diff --git a/lib/cryptodev/cryptodev_pmd.h b/lib/cryptodev/cryptodev_pmd.h index 6c114f7181..3e2e2673b8 100644 --- a/lib/cryptodev/cryptodev_pmd.h +++ b/lib/cryptodev/cryptodev_pmd.h @@ -5,10 +5,6 @@ #ifndef _CRYPTODEV_PMD_H_ #define _CRYPTODEV_PMD_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** @file * RTE Crypto PMD APIs * @@ -28,6 +24,10 @@ extern "C" { #include "rte_crypto.h" #include "rte_cryptodev.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS 8 diff --git a/lib/cryptodev/cryptodev_trace.h b/lib/cryptodev/cryptodev_trace.h index 935f0d564b..e186f0f3c1 100644 --- a/lib/cryptodev/cryptodev_trace.h +++ b/lib/cryptodev/cryptodev_trace.h @@ -11,14 +11,14 @@ * API for cryptodev trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_cryptodev.h" +#ifdef __cplusplus +extern "C" { +#endif + RTE_TRACE_POINT( rte_cryptodev_trace_configure, RTE_TRACE_POINT_ARGS(uint8_t dev_id, diff --git a/lib/cryptodev/rte_crypto.h b/lib/cryptodev/rte_crypto.h index dbc2700da5..dcf4a36fb2 100644 --- a/lib/cryptodev/rte_crypto.h +++ b/lib/cryptodev/rte_crypto.h @@ -11,10 +11,6 @@ * RTE Cryptography Common Definitions */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -24,6 +20,10 @@ extern "C" { #include "rte_crypto_sym.h" #include "rte_crypto_asym.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Crypto operation types */ enum rte_crypto_op_type { RTE_CRYPTO_OP_TYPE_UNDEFINED, diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h index 39d3da3952..4b7ea36961 100644 --- a/lib/cryptodev/rte_crypto_asym.h +++ b/lib/cryptodev/rte_crypto_asym.h @@ -14,10 +14,6 @@ * asymmetric crypto operations. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -27,6 +23,10 @@ extern "C" { #include "rte_crypto_sym.h" +#ifdef __cplusplus +extern "C" { +#endif + struct rte_cryptodev_asym_session; /** asym key exchange operation type name strings */ diff --git a/lib/cryptodev/rte_crypto_sym.h b/lib/cryptodev/rte_crypto_sym.h index 53b18b9412..fb73024010 100644 --- a/lib/cryptodev/rte_crypto_sym.h +++ b/lib/cryptodev/rte_crypto_sym.h @@ -14,10 +14,6 @@ * as supported symmetric crypto operation combinations. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -26,6 +22,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Crypto IO Vector (in analogy with struct iovec) * Supposed be used to pass input/output data buffers for crypto data-path diff --git a/lib/cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h index bec947f6d5..8051c5a6a3 100644 --- a/lib/cryptodev/rte_cryptodev.h +++ b/lib/cryptodev/rte_cryptodev.h @@ -14,10 +14,6 @@ * authentication operations. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_kvargs.h" #include "rte_crypto.h" @@ -1859,6 +1855,10 @@ int rte_cryptodev_remove_deq_callback(uint8_t dev_id, struct rte_cryptodev_cb *cb); #include + +#ifdef __cplusplus +extern "C" { +#endif /** * * Dequeue a burst of processed crypto operations from a queue on the crypto diff --git a/lib/cryptodev/rte_cryptodev_trace_fp.h b/lib/cryptodev/rte_cryptodev_trace_fp.h index dbfbc7b2e5..f23f882804 100644 --- a/lib/cryptodev/rte_cryptodev_trace_fp.h +++ b/lib/cryptodev/rte_cryptodev_trace_fp.h @@ -5,12 +5,12 @@ #ifndef _RTE_CRYPTODEV_TRACE_FP_H_ #define _RTE_CRYPTODEV_TRACE_FP_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - RTE_TRACE_POINT_FP( rte_cryptodev_trace_enqueue_burst, RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint16_t qp_id, void **ops, diff --git a/lib/dispatcher/rte_dispatcher.h b/lib/dispatcher/rte_dispatcher.h index d8182d5f2c..ba2c353073 100644 --- a/lib/dispatcher/rte_dispatcher.h +++ b/lib/dispatcher/rte_dispatcher.h @@ -19,16 +19,16 @@ * event device. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Function prototype for match callbacks. * diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h index 5474a5281d..d174d325a1 100644 --- a/lib/dmadev/rte_dmadev.h +++ b/lib/dmadev/rte_dmadev.h @@ -772,9 +772,17 @@ struct rte_dma_sge { uint32_t length; /**< The DMA operation length. */ }; +#ifdef __cplusplus +} +#endif + #include "rte_dmadev_core.h" #include "rte_dmadev_trace_fp.h" +#ifdef __cplusplus +extern "C" { +#endif + /**@{@name DMA operation flag * @see rte_dma_copy() * @see rte_dma_copy_sg() diff --git a/lib/eal/arm/include/rte_atomic_32.h b/lib/eal/arm/include/rte_atomic_32.h index 62fc33773d..0b9a0dfa30 100644 --- a/lib/eal/arm/include/rte_atomic_32.h +++ b/lib/eal/arm/include/rte_atomic_32.h @@ -9,12 +9,12 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif +#include "generic/rte_atomic.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_atomic.h" - #define rte_mb() __sync_synchronize() #define rte_wmb() do { asm volatile ("dmb st" : : : "memory"); } while (0) diff --git a/lib/eal/arm/include/rte_atomic_64.h b/lib/eal/arm/include/rte_atomic_64.h index 7c99fc0a02..181bb60929 100644 --- a/lib/eal/arm/include/rte_atomic_64.h +++ b/lib/eal/arm/include/rte_atomic_64.h @@ -10,14 +10,14 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif -#ifdef __cplusplus -extern "C" { -#endif - #include "generic/rte_atomic.h" #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define rte_mb() asm volatile("dmb osh" : : : "memory") #define rte_wmb() asm volatile("dmb oshst" : : : "memory") diff --git a/lib/eal/arm/include/rte_byteorder.h b/lib/eal/arm/include/rte_byteorder.h index ff02052f2e..a0aaff4a28 100644 --- a/lib/eal/arm/include/rte_byteorder.h +++ b/lib/eal/arm/include/rte_byteorder.h @@ -9,14 +9,14 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_byteorder.h" +#ifdef __cplusplus +extern "C" { +#endif + /* ARM architecture is bi-endian (both big and little). */ #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN diff --git a/lib/eal/arm/include/rte_cpuflags_32.h b/lib/eal/arm/include/rte_cpuflags_32.h index 770b09b99d..7e33acd9fb 100644 --- a/lib/eal/arm/include/rte_cpuflags_32.h +++ b/lib/eal/arm/include/rte_cpuflags_32.h @@ -5,10 +5,6 @@ #ifndef _RTE_CPUFLAGS_ARM32_H_ #define _RTE_CPUFLAGS_ARM32_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * Enumeration of all CPU features supported */ @@ -46,6 +42,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/arm/include/rte_cpuflags_64.h b/lib/eal/arm/include/rte_cpuflags_64.h index afe70209c3..f84633159e 100644 --- a/lib/eal/arm/include/rte_cpuflags_64.h +++ b/lib/eal/arm/include/rte_cpuflags_64.h @@ -5,10 +5,6 @@ #ifndef _RTE_CPUFLAGS_ARM64_H_ #define _RTE_CPUFLAGS_ARM64_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * Enumeration of all CPU features supported */ @@ -40,6 +36,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/arm/include/rte_cycles_32.h b/lib/eal/arm/include/rte_cycles_32.h index 859cd2e5bb..2b20c8c6f5 100644 --- a/lib/eal/arm/include/rte_cycles_32.h +++ b/lib/eal/arm/include/rte_cycles_32.h @@ -15,12 +15,12 @@ #include +#include "generic/rte_cycles.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_cycles.h" - /** * Read the time base register. * diff --git a/lib/eal/arm/include/rte_cycles_64.h b/lib/eal/arm/include/rte_cycles_64.h index 8b05302f47..bb76e4d7e0 100644 --- a/lib/eal/arm/include/rte_cycles_64.h +++ b/lib/eal/arm/include/rte_cycles_64.h @@ -6,12 +6,12 @@ #ifndef _RTE_CYCLES_ARM64_H_ #define _RTE_CYCLES_ARM64_H_ +#include "generic/rte_cycles.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_cycles.h" - /** Read generic counter frequency */ static __rte_always_inline uint64_t __rte_arm64_cntfrq(void) diff --git a/lib/eal/arm/include/rte_io.h b/lib/eal/arm/include/rte_io.h index f4e66e6bad..ca1a353bed 100644 --- a/lib/eal/arm/include/rte_io.h +++ b/lib/eal/arm/include/rte_io.h @@ -5,16 +5,16 @@ #ifndef _RTE_IO_ARM_H_ #define _RTE_IO_ARM_H_ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef RTE_ARCH_64 #include "rte_io_64.h" #else #include "generic/rte_io.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/arm/include/rte_io_64.h b/lib/eal/arm/include/rte_io_64.h index 96da7789ce..88db82a7eb 100644 --- a/lib/eal/arm/include/rte_io_64.h +++ b/lib/eal/arm/include/rte_io_64.h @@ -5,10 +5,6 @@ #ifndef _RTE_IO_ARM64_H_ #define _RTE_IO_ARM64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #define RTE_OVERRIDE_IO_H @@ -17,6 +13,10 @@ extern "C" { #include #include "rte_atomic_64.h" +#ifdef __cplusplus +extern "C" { +#endif + static __rte_always_inline uint8_t rte_read8_relaxed(const volatile void *addr) { diff --git a/lib/eal/arm/include/rte_memcpy_32.h b/lib/eal/arm/include/rte_memcpy_32.h index fb3245b59c..99fd5757ca 100644 --- a/lib/eal/arm/include/rte_memcpy_32.h +++ b/lib/eal/arm/include/rte_memcpy_32.h @@ -8,10 +8,6 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - #include "generic/rte_memcpy.h" #ifdef RTE_ARCH_ARM_NEON_MEMCPY @@ -23,6 +19,10 @@ extern "C" { /* ARM NEON Intrinsics are used to copy data */ #include +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_mov16(uint8_t *dst, const uint8_t *src) { diff --git a/lib/eal/arm/include/rte_memcpy_64.h b/lib/eal/arm/include/rte_memcpy_64.h index 85ad587bd3..90039039be 100644 --- a/lib/eal/arm/include/rte_memcpy_64.h +++ b/lib/eal/arm/include/rte_memcpy_64.h @@ -5,10 +5,6 @@ #ifndef _RTE_MEMCPY_ARM64_H_ #define _RTE_MEMCPY_ARM64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -18,6 +14,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * The memory copy performance differs on different AArch64 micro-architectures. * And the most recent glibc (e.g. 2.23 or later) can provide a better memcpy() @@ -324,7 +324,16 @@ void *rte_memcpy(void *dst, const void *src, size_t n) } #endif /* RTE_CACHE_LINE_SIZE >= 128 */ -#else +#ifdef __cplusplus +} +#endif + +#else /* RTE_ARCH_ARM64_MEMCPY */ + +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_mov16(uint8_t *dst, const uint8_t *src) { @@ -363,10 +372,10 @@ rte_mov256(uint8_t *dst, const uint8_t *src) #define rte_memcpy(d, s, n) memcpy((d), (s), (n)) -#endif /* RTE_ARCH_ARM64_MEMCPY */ - #ifdef __cplusplus } #endif +#endif /* RTE_ARCH_ARM64_MEMCPY */ + #endif /* _RTE_MEMCPY_ARM_64_H_ */ diff --git a/lib/eal/arm/include/rte_pause.h b/lib/eal/arm/include/rte_pause.h index 6c7002ad98..b8a3d64b3a 100644 --- a/lib/eal/arm/include/rte_pause.h +++ b/lib/eal/arm/include/rte_pause.h @@ -5,16 +5,16 @@ #ifndef _RTE_PAUSE_ARM_H_ #define _RTE_PAUSE_ARM_H_ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef RTE_ARCH_64 #include #else #include #endif +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/arm/include/rte_pause_32.h b/lib/eal/arm/include/rte_pause_32.h index d4768c7a98..7870fac763 100644 --- a/lib/eal/arm/include/rte_pause_32.h +++ b/lib/eal/arm/include/rte_pause_32.h @@ -5,13 +5,13 @@ #ifndef _RTE_PAUSE_ARM32_H_ #define _RTE_PAUSE_ARM32_H_ +#include +#include "generic/rte_pause.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_pause.h" - static inline void rte_pause(void) { } diff --git a/lib/eal/arm/include/rte_pause_64.h b/lib/eal/arm/include/rte_pause_64.h index 9e2dbf3531..1526bf87cc 100644 --- a/lib/eal/arm/include/rte_pause_64.h +++ b/lib/eal/arm/include/rte_pause_64.h @@ -6,10 +6,6 @@ #ifndef _RTE_PAUSE_ARM64_H_ #define _RTE_PAUSE_ARM64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -19,6 +15,10 @@ extern "C" { #include "generic/rte_pause.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_pause(void) { asm volatile("yield" ::: "memory"); diff --git a/lib/eal/arm/include/rte_power_intrinsics.h b/lib/eal/arm/include/rte_power_intrinsics.h index 9e498e9ebf..5481f45ad3 100644 --- a/lib/eal/arm/include/rte_power_intrinsics.h +++ b/lib/eal/arm/include/rte_power_intrinsics.h @@ -5,14 +5,14 @@ #ifndef _RTE_POWER_INTRINSIC_ARM_H_ #define _RTE_POWER_INTRINSIC_ARM_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "generic/rte_power_intrinsics.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/arm/include/rte_prefetch_32.h b/lib/eal/arm/include/rte_prefetch_32.h index 0e9a140c8a..619bf27c79 100644 --- a/lib/eal/arm/include/rte_prefetch_32.h +++ b/lib/eal/arm/include/rte_prefetch_32.h @@ -5,14 +5,14 @@ #ifndef _RTE_PREFETCH_ARM32_H_ #define _RTE_PREFETCH_ARM32_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { asm volatile ("pld [%0]" : : "r" (p)); diff --git a/lib/eal/arm/include/rte_prefetch_64.h b/lib/eal/arm/include/rte_prefetch_64.h index 22cba48e29..4f60123b8b 100644 --- a/lib/eal/arm/include/rte_prefetch_64.h +++ b/lib/eal/arm/include/rte_prefetch_64.h @@ -5,14 +5,14 @@ #ifndef _RTE_PREFETCH_ARM_64_H_ #define _RTE_PREFETCH_ARM_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { asm volatile ("PRFM PLDL1KEEP, [%0]" : : "r" (p)); diff --git a/lib/eal/arm/include/rte_rwlock.h b/lib/eal/arm/include/rte_rwlock.h index 18bb37b036..727cabafec 100644 --- a/lib/eal/arm/include/rte_rwlock.h +++ b/lib/eal/arm/include/rte_rwlock.h @@ -5,12 +5,12 @@ #ifndef _RTE_RWLOCK_ARM_H_ #define _RTE_RWLOCK_ARM_H_ +#include "generic/rte_rwlock.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_rwlock.h" - static inline void rte_rwlock_read_lock_tm(rte_rwlock_t *rwl) { diff --git a/lib/eal/arm/include/rte_spinlock.h b/lib/eal/arm/include/rte_spinlock.h index a973763c23..a5d01b0d21 100644 --- a/lib/eal/arm/include/rte_spinlock.h +++ b/lib/eal/arm/include/rte_spinlock.h @@ -9,13 +9,13 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif +#include +#include "generic/rte_spinlock.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_spinlock.h" - static inline int rte_tm_supported(void) { return 0; diff --git a/lib/eal/freebsd/include/rte_os.h b/lib/eal/freebsd/include/rte_os.h index 003468caff..f31f6af12d 100644 --- a/lib/eal/freebsd/include/rte_os.h +++ b/lib/eal/freebsd/include/rte_os.h @@ -5,10 +5,6 @@ #ifndef _RTE_OS_H_ #define _RTE_OS_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * This header should contain any definition * which is not supported natively or named differently in FreeBSD. @@ -17,6 +13,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* These macros are compatible with system's sys/queue.h. */ #define RTE_TAILQ_HEAD(name, type) TAILQ_HEAD(name, type) #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) diff --git a/lib/eal/include/bus_driver.h b/lib/eal/include/bus_driver.h index 7b85a17a09..60527b75b6 100644 --- a/lib/eal/include/bus_driver.h +++ b/lib/eal/include/bus_driver.h @@ -5,16 +5,16 @@ #ifndef BUS_DRIVER_H #define BUS_DRIVER_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_devargs; struct rte_device; diff --git a/lib/eal/include/dev_driver.h b/lib/eal/include/dev_driver.h index 5efa8c437e..f7a9c17dc3 100644 --- a/lib/eal/include/dev_driver.h +++ b/lib/eal/include/dev_driver.h @@ -5,13 +5,13 @@ #ifndef DEV_DRIVER_H #define DEV_DRIVER_H +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** * A structure describing a device driver. */ diff --git a/lib/eal/include/eal_trace_internal.h b/lib/eal/include/eal_trace_internal.h index 09c354717f..50f91d0929 100644 --- a/lib/eal/include/eal_trace_internal.h +++ b/lib/eal/include/eal_trace_internal.h @@ -11,16 +11,16 @@ * API for EAL trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include "eal_interrupts.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Alarm */ RTE_TRACE_POINT( rte_eal_trace_alarm_set, diff --git a/lib/eal/include/generic/rte_atomic.h b/lib/eal/include/generic/rte_atomic.h index f859707744..0a4f3f8528 100644 --- a/lib/eal/include/generic/rte_atomic.h +++ b/lib/eal/include/generic/rte_atomic.h @@ -17,6 +17,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __DOXYGEN__ /** @name Memory Barrier @@ -1156,4 +1160,8 @@ rte_atomic128_cmp_exchange(rte_int128_t *dst, #endif /* __DOXYGEN__ */ +#ifdef __cplusplus +} +#endif + #endif /* _RTE_ATOMIC_H_ */ diff --git a/lib/eal/include/generic/rte_byteorder.h b/lib/eal/include/generic/rte_byteorder.h index f1c04ba83e..7973d6326f 100644 --- a/lib/eal/include/generic/rte_byteorder.h +++ b/lib/eal/include/generic/rte_byteorder.h @@ -24,6 +24,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Compile-time endianness detection */ @@ -251,4 +255,8 @@ static uint64_t rte_be_to_cpu_64(rte_be64_t x); #endif #endif +#ifdef __cplusplus +} +#endif + #endif /* _RTE_BYTEORDER_H_ */ diff --git a/lib/eal/include/generic/rte_cpuflags.h b/lib/eal/include/generic/rte_cpuflags.h index d35551e931..bfe9df4516 100644 --- a/lib/eal/include/generic/rte_cpuflags.h +++ b/lib/eal/include/generic/rte_cpuflags.h @@ -15,6 +15,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Structure used to describe platform-specific intrinsics that may or may not * be supported at runtime. @@ -104,4 +108,8 @@ rte_cpu_getauxval(unsigned long type); int rte_cpu_strcmp_auxval(unsigned long type, const char *str); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_CPUFLAGS_H_ */ diff --git a/lib/eal/include/generic/rte_cycles.h b/lib/eal/include/generic/rte_cycles.h index 075e899f5a..7cfd51f0eb 100644 --- a/lib/eal/include/generic/rte_cycles.h +++ b/lib/eal/include/generic/rte_cycles.h @@ -16,6 +16,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define MS_PER_S 1000 #define US_PER_S 1000000 #define NS_PER_S 1000000000 @@ -175,4 +179,8 @@ void rte_delay_us_sleep(unsigned int us); */ void rte_delay_us_callback_register(void(*userfunc)(unsigned int)); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_CYCLES_H_ */ diff --git a/lib/eal/include/generic/rte_io.h b/lib/eal/include/generic/rte_io.h index ebcf8051e1..73b0f7a9f4 100644 --- a/lib/eal/include/generic/rte_io.h +++ b/lib/eal/include/generic/rte_io.h @@ -17,6 +17,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __DOXYGEN__ /** @@ -396,4 +400,8 @@ rte_write32_wc_relaxed(uint32_t value, volatile void *addr) #endif /* RTE_OVERRIDE_IO_H */ +#ifdef __cplusplus +} +#endif + #endif /* _RTE_IO_H_ */ diff --git a/lib/eal/include/generic/rte_memcpy.h b/lib/eal/include/generic/rte_memcpy.h index e7f0f8eaa9..da53b72ca8 100644 --- a/lib/eal/include/generic/rte_memcpy.h +++ b/lib/eal/include/generic/rte_memcpy.h @@ -5,6 +5,10 @@ #ifndef _RTE_MEMCPY_H_ #define _RTE_MEMCPY_H_ +#ifdef __cplusplus +extern "C" { +#endif + /** * @file * @@ -113,4 +117,8 @@ rte_memcpy(void *dst, const void *src, size_t n); #endif /* __DOXYGEN__ */ +#ifdef __cplusplus +} +#endif + #endif /* _RTE_MEMCPY_H_ */ diff --git a/lib/eal/include/generic/rte_pause.h b/lib/eal/include/generic/rte_pause.h index f2a1eadcbd..968c0886d3 100644 --- a/lib/eal/include/generic/rte_pause.h +++ b/lib/eal/include/generic/rte_pause.h @@ -19,6 +19,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Pause CPU execution for a short while * @@ -136,4 +140,8 @@ rte_wait_until_equal_64(volatile uint64_t *addr, uint64_t expected, } while (0) #endif /* ! RTE_WAIT_UNTIL_EQUAL_ARCH_DEFINED */ +#ifdef __cplusplus +} +#endif + #endif /* _RTE_PAUSE_H_ */ diff --git a/lib/eal/include/generic/rte_power_intrinsics.h b/lib/eal/include/generic/rte_power_intrinsics.h index ea899f1bfa..86c0559468 100644 --- a/lib/eal/include/generic/rte_power_intrinsics.h +++ b/lib/eal/include/generic/rte_power_intrinsics.h @@ -9,6 +9,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @file * Advanced power management operations. @@ -147,4 +151,8 @@ int rte_power_pause(const uint64_t tsc_timestamp); int rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[], const uint32_t num, const uint64_t tsc_timestamp); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_POWER_INTRINSIC_H_ */ diff --git a/lib/eal/include/generic/rte_prefetch.h b/lib/eal/include/generic/rte_prefetch.h index 773b3b8d1e..f7ac4ab48a 100644 --- a/lib/eal/include/generic/rte_prefetch.h +++ b/lib/eal/include/generic/rte_prefetch.h @@ -7,6 +7,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @file * @@ -146,4 +150,8 @@ __rte_experimental static inline void rte_cldemote(const volatile void *p); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_PREFETCH_H_ */ diff --git a/lib/eal/include/generic/rte_rwlock.h b/lib/eal/include/generic/rte_rwlock.h index 5f939be98c..ac0474466a 100644 --- a/lib/eal/include/generic/rte_rwlock.h +++ b/lib/eal/include/generic/rte_rwlock.h @@ -22,10 +22,6 @@ * https://locklessinc.com/articles/locks/ */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -34,6 +30,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The rte_rwlock_t type. * diff --git a/lib/eal/include/generic/rte_spinlock.h b/lib/eal/include/generic/rte_spinlock.h index 23fb04896f..c2980601b2 100644 --- a/lib/eal/include/generic/rte_spinlock.h +++ b/lib/eal/include/generic/rte_spinlock.h @@ -25,6 +25,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The rte_spinlock_t type. */ @@ -318,4 +322,8 @@ __rte_warn_unused_result static inline int rte_spinlock_recursive_trylock_tm( rte_spinlock_recursive_t *slr); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_SPINLOCK_H_ */ diff --git a/lib/eal/include/generic/rte_vect.h b/lib/eal/include/generic/rte_vect.h index 1f84292a41..b87520a4d9 100644 --- a/lib/eal/include/generic/rte_vect.h +++ b/lib/eal/include/generic/rte_vect.h @@ -209,6 +209,10 @@ enum rte_vect_max_simd { */ }; +#ifdef __cplusplus +extern "C" { +#endif + /** * Get the supported SIMD bitwidth. * @@ -230,4 +234,8 @@ uint16_t rte_vect_get_max_simd_bitwidth(void); */ int rte_vect_set_max_simd_bitwidth(uint16_t bitwidth); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_VECT_H_ */ diff --git a/lib/eal/include/rte_alarm.h b/lib/eal/include/rte_alarm.h index 7e4d0b2407..9b4721b77f 100644 --- a/lib/eal/include/rte_alarm.h +++ b/lib/eal/include/rte_alarm.h @@ -14,12 +14,12 @@ * Does not require hpet support. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Signature of callback back function called when an alarm goes off. */ diff --git a/lib/eal/include/rte_bitmap.h b/lib/eal/include/rte_bitmap.h index ebe46000a0..abb102f1d3 100644 --- a/lib/eal/include/rte_bitmap.h +++ b/lib/eal/include/rte_bitmap.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_BITMAP_H__ #define __INCLUDE_RTE_BITMAP_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Bitmap @@ -43,6 +39,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Slab */ #define RTE_BITMAP_SLAB_BIT_SIZE 64 #define RTE_BITMAP_SLAB_BIT_SIZE_LOG2 6 diff --git a/lib/eal/include/rte_bus.h b/lib/eal/include/rte_bus.h index dfe756fb11..519f7b35f0 100644 --- a/lib/eal/include/rte_bus.h +++ b/lib/eal/include/rte_bus.h @@ -14,14 +14,14 @@ * over the devices and drivers in EAL. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_bus; struct rte_device; diff --git a/lib/eal/include/rte_class.h b/lib/eal/include/rte_class.h index 16e544ec9a..7631e36e82 100644 --- a/lib/eal/include/rte_class.h +++ b/lib/eal/include/rte_class.h @@ -18,12 +18,12 @@ * cryptographic co-processor (crypto), etc. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** Double linked list of classes */ RTE_TAILQ_HEAD(rte_class_list, rte_class); diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h index eec0400dad..2486caa471 100644 --- a/lib/eal/include/rte_common.h +++ b/lib/eal/include/rte_common.h @@ -12,10 +12,6 @@ * for DPDK. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -26,6 +22,10 @@ extern "C" { /* OS specific include */ #include +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_TOOLCHAIN_MSVC #ifndef typeof #define typeof __typeof__ diff --git a/lib/eal/include/rte_dev.h b/lib/eal/include/rte_dev.h index cefa04f905..738400e8d1 100644 --- a/lib/eal/include/rte_dev.h +++ b/lib/eal/include/rte_dev.h @@ -13,16 +13,16 @@ * This file manages the list of device drivers. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_bus; struct rte_devargs; struct rte_device; diff --git a/lib/eal/include/rte_devargs.h b/lib/eal/include/rte_devargs.h index 515e978bbe..ed5a4675d9 100644 --- a/lib/eal/include/rte_devargs.h +++ b/lib/eal/include/rte_devargs.h @@ -16,14 +16,14 @@ * list of rte_devargs structures. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_bus; /** diff --git a/lib/eal/include/rte_eal_trace.h b/lib/eal/include/rte_eal_trace.h index c3d15bbe5e..9ad2112801 100644 --- a/lib/eal/include/rte_eal_trace.h +++ b/lib/eal/include/rte_eal_trace.h @@ -11,12 +11,12 @@ * API for EAL trace support */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /* Generic */ RTE_TRACE_POINT( rte_eal_trace_generic_void, diff --git a/lib/eal/include/rte_errno.h b/lib/eal/include/rte_errno.h index ba45591d24..c49818a40e 100644 --- a/lib/eal/include/rte_errno.h +++ b/lib/eal/include/rte_errno.h @@ -11,12 +11,12 @@ #ifndef _RTE_ERRNO_H_ #define _RTE_ERRNO_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - RTE_DECLARE_PER_LCORE(int, _rte_errno); /**< Per core error number. */ /** diff --git a/lib/eal/include/rte_fbarray.h b/lib/eal/include/rte_fbarray.h index e33076778f..27dbfc2d6c 100644 --- a/lib/eal/include/rte_fbarray.h +++ b/lib/eal/include/rte_fbarray.h @@ -30,14 +30,14 @@ * another process is using ``rte_fbarray``. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_FBARRAY_NAME_LEN 64 struct rte_fbarray { diff --git a/lib/eal/include/rte_keepalive.h b/lib/eal/include/rte_keepalive.h index 3ec413da01..9ff870f6b4 100644 --- a/lib/eal/include/rte_keepalive.h +++ b/lib/eal/include/rte_keepalive.h @@ -10,13 +10,13 @@ #ifndef _KEEPALIVE_H_ #define _KEEPALIVE_H_ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - #ifndef RTE_KEEPALIVE_MAXCORES /** * Number of cores to track. diff --git a/lib/eal/include/rte_mcslock.h b/lib/eal/include/rte_mcslock.h index 0aeb1a09f4..bb218d2e50 100644 --- a/lib/eal/include/rte_mcslock.h +++ b/lib/eal/include/rte_mcslock.h @@ -19,16 +19,16 @@ * they acquired the lock. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The rte_mcslock_t type. */ diff --git a/lib/eal/include/rte_memory.h b/lib/eal/include/rte_memory.h index 842362d527..dbd0a6bedc 100644 --- a/lib/eal/include/rte_memory.h +++ b/lib/eal/include/rte_memory.h @@ -15,16 +15,16 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_PGSIZE_4K (1ULL << 12) #define RTE_PGSIZE_64K (1ULL << 16) #define RTE_PGSIZE_256K (1ULL << 18) diff --git a/lib/eal/include/rte_pci_dev_features.h b/lib/eal/include/rte_pci_dev_features.h index ee6e10590c..bc6d3d4c1f 100644 --- a/lib/eal/include/rte_pci_dev_features.h +++ b/lib/eal/include/rte_pci_dev_features.h @@ -5,12 +5,12 @@ #ifndef _RTE_PCI_DEV_FEATURES_H #define _RTE_PCI_DEV_FEATURES_H +#include + #ifdef __cplusplus extern "C" { #endif -#include - #define RTE_INTR_MODE_NONE_NAME "none" #define RTE_INTR_MODE_LEGACY_NAME "legacy" #define RTE_INTR_MODE_MSI_NAME "msi" diff --git a/lib/eal/include/rte_pflock.h b/lib/eal/include/rte_pflock.h index 37aa223ac3..6797ce5920 100644 --- a/lib/eal/include/rte_pflock.h +++ b/lib/eal/include/rte_pflock.h @@ -27,14 +27,14 @@ * All locks must be initialised before use, and only initialised once. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The rte_pflock_t type. */ diff --git a/lib/eal/include/rte_random.h b/lib/eal/include/rte_random.h index 5031c6fe5f..15cbe6215a 100644 --- a/lib/eal/include/rte_random.h +++ b/lib/eal/include/rte_random.h @@ -11,12 +11,12 @@ * Pseudo-random Generators in RTE */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Seed the pseudo-random generator. * diff --git a/lib/eal/include/rte_seqcount.h b/lib/eal/include/rte_seqcount.h index 88a6746900..d71afa6ab7 100644 --- a/lib/eal/include/rte_seqcount.h +++ b/lib/eal/include/rte_seqcount.h @@ -5,10 +5,6 @@ #ifndef _RTE_SEQCOUNT_H_ #define _RTE_SEQCOUNT_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Seqcount @@ -27,6 +23,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The RTE seqcount type. */ diff --git a/lib/eal/include/rte_seqlock.h b/lib/eal/include/rte_seqlock.h index 2677bd9440..e0e94900d1 100644 --- a/lib/eal/include/rte_seqlock.h +++ b/lib/eal/include/rte_seqlock.h @@ -5,10 +5,6 @@ #ifndef _RTE_SEQLOCK_H_ #define _RTE_SEQLOCK_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Seqlock @@ -95,6 +91,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The RTE seqlock type. */ diff --git a/lib/eal/include/rte_service.h b/lib/eal/include/rte_service.h index e49a7a877e..94919ae584 100644 --- a/lib/eal/include/rte_service.h +++ b/lib/eal/include/rte_service.h @@ -23,16 +23,16 @@ * application has access to the remaining lcores as normal. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_SERVICE_NAME_MAX 32 /* Capabilities of a service. diff --git a/lib/eal/include/rte_service_component.h b/lib/eal/include/rte_service_component.h index a5350c97e5..acdf45cf60 100644 --- a/lib/eal/include/rte_service_component.h +++ b/lib/eal/include/rte_service_component.h @@ -10,12 +10,12 @@ * operate, and you wish to run the component using service cores */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Signature of callback function to run a service. * diff --git a/lib/eal/include/rte_stdatomic.h b/lib/eal/include/rte_stdatomic.h index 7a081cb500..0f11a15e4e 100644 --- a/lib/eal/include/rte_stdatomic.h +++ b/lib/eal/include/rte_stdatomic.h @@ -7,10 +7,6 @@ #include -#ifdef __cplusplus -extern "C" { -#endif - #ifdef RTE_ENABLE_STDATOMIC #ifndef _MSC_VER #ifdef __STDC_NO_ATOMICS__ @@ -188,6 +184,7 @@ typedef int rte_memory_order; #endif #ifdef __cplusplus +extern "C" { } #endif diff --git a/lib/eal/include/rte_string_fns.h b/lib/eal/include/rte_string_fns.h index 13badec7b3..702bd81251 100644 --- a/lib/eal/include/rte_string_fns.h +++ b/lib/eal/include/rte_string_fns.h @@ -11,10 +11,6 @@ #ifndef _RTE_STRING_FNS_H_ #define _RTE_STRING_FNS_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -22,6 +18,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Takes string "string" parameter and splits it at character "delim" * up to maxtokens-1 times - to give "maxtokens" resulting tokens. Like @@ -77,6 +77,10 @@ rte_strlcat(char *dst, const char *src, size_t size) return l + strlen(src); } +#ifdef __cplusplus +} +#endif + /* pull in a strlcpy function */ #ifdef RTE_EXEC_ENV_FREEBSD #ifndef __BSD_VISIBLE /* non-standard functions are hidden */ @@ -95,6 +99,10 @@ rte_strlcat(char *dst, const char *src, size_t size) #endif /* RTE_USE_LIBBSD */ #endif /* FREEBSD */ +#ifdef __cplusplus +extern "C" { +#endif + /** * Copy string src to buffer dst of size dsize. * At most dsize-1 chars will be copied. @@ -141,7 +149,6 @@ rte_str_skip_leading_spaces(const char *src) return p; } - #ifdef __cplusplus } #endif diff --git a/lib/eal/include/rte_tailq.h b/lib/eal/include/rte_tailq.h index 931d549e59..89f7ef2134 100644 --- a/lib/eal/include/rte_tailq.h +++ b/lib/eal/include/rte_tailq.h @@ -10,13 +10,13 @@ * Here defines rte_tailq APIs for only internal use */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** dummy structure type used by the rte_tailq APIs */ struct rte_tailq_entry { RTE_TAILQ_ENTRY(rte_tailq_entry) next; /**< Pointer entries for a tailq list */ diff --git a/lib/eal/include/rte_ticketlock.h b/lib/eal/include/rte_ticketlock.h index 73884eb07b..e60f60699c 100644 --- a/lib/eal/include/rte_ticketlock.h +++ b/lib/eal/include/rte_ticketlock.h @@ -17,15 +17,15 @@ * All locks must be initialised before use, and only initialised once. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * The rte_ticketlock_t type. */ diff --git a/lib/eal/include/rte_time.h b/lib/eal/include/rte_time.h index ec25f7b93d..c5c3a233e4 100644 --- a/lib/eal/include/rte_time.h +++ b/lib/eal/include/rte_time.h @@ -5,13 +5,13 @@ #ifndef _RTE_TIME_H_ #define _RTE_TIME_H_ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - #define NSEC_PER_SEC 1000000000L /** diff --git a/lib/eal/include/rte_trace.h b/lib/eal/include/rte_trace.h index a6e991fad3..1c824b2158 100644 --- a/lib/eal/include/rte_trace.h +++ b/lib/eal/include/rte_trace.h @@ -16,16 +16,16 @@ * @b EXPERIMENTAL: this API may change without prior notice */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Test if trace is enabled. * diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h index 41e2a7f99e..bc737d585e 100644 --- a/lib/eal/include/rte_trace_point.h +++ b/lib/eal/include/rte_trace_point.h @@ -16,10 +16,6 @@ * @b EXPERIMENTAL: this API may change without prior notice */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -32,6 +28,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** The tracepoint object. */ typedef RTE_ATOMIC(uint64_t) rte_trace_point_t; diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h index 41260e5964..8726338fe4 100644 --- a/lib/eal/include/rte_trace_point_register.h +++ b/lib/eal/include/rte_trace_point_register.h @@ -5,10 +5,6 @@ #ifndef _RTE_TRACE_POINT_REGISTER_H_ #define _RTE_TRACE_POINT_REGISTER_H_ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef _RTE_TRACE_POINT_H_ #error for registration, include this file first before #endif @@ -16,6 +12,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + RTE_DECLARE_PER_LCORE(volatile int, trace_point_sz); #define RTE_TRACE_POINT_REGISTER(trace, name) \ diff --git a/lib/eal/include/rte_uuid.h b/lib/eal/include/rte_uuid.h index cfefd4308a..def5907a00 100644 --- a/lib/eal/include/rte_uuid.h +++ b/lib/eal/include/rte_uuid.h @@ -10,14 +10,14 @@ #ifndef _RTE_UUID_H_ #define _RTE_UUID_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Struct describing a Universal Unique Identifier */ diff --git a/lib/eal/include/rte_version.h b/lib/eal/include/rte_version.h index 422d00fdff..be3f753617 100644 --- a/lib/eal/include/rte_version.h +++ b/lib/eal/include/rte_version.h @@ -10,13 +10,13 @@ #ifndef _RTE_VERSION_H_ #define _RTE_VERSION_H_ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** * Macro to compute a version number usable for comparisons */ diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h index b774625d9f..923293040b 100644 --- a/lib/eal/include/rte_vfio.h +++ b/lib/eal/include/rte_vfio.h @@ -10,10 +10,6 @@ * RTE VFIO. This library provides various VFIO related utility functions. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -32,6 +28,10 @@ extern "C" { #endif /* kernel version >= 4.0.0 */ #endif /* RTE_EAL_VFIO */ +#ifdef __cplusplus +extern "C" { +#endif + #ifdef VFIO_PRESENT #include diff --git a/lib/eal/linux/include/rte_os.h b/lib/eal/linux/include/rte_os.h index c72bf5b7e6..dba0e29827 100644 --- a/lib/eal/linux/include/rte_os.h +++ b/lib/eal/linux/include/rte_os.h @@ -5,10 +5,6 @@ #ifndef _RTE_OS_H_ #define _RTE_OS_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * This header should contain any definition * which is not supported natively or named differently in Linux. @@ -17,6 +13,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* These macros are compatible with system's sys/queue.h. */ #define RTE_TAILQ_HEAD(name, type) TAILQ_HEAD(name, type) #define RTE_TAILQ_ENTRY(type) TAILQ_ENTRY(type) diff --git a/lib/eal/loongarch/include/rte_atomic.h b/lib/eal/loongarch/include/rte_atomic.h index 0510b8f781..c8066a4612 100644 --- a/lib/eal/loongarch/include/rte_atomic.h +++ b/lib/eal/loongarch/include/rte_atomic.h @@ -9,13 +9,13 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif +#include +#include "generic/rte_atomic.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_atomic.h" - #define rte_mb() do { asm volatile("dbar 0":::"memory"); } while (0) #define rte_wmb() rte_mb() diff --git a/lib/eal/loongarch/include/rte_byteorder.h b/lib/eal/loongarch/include/rte_byteorder.h index 0da6097a4f..9b092e2a59 100644 --- a/lib/eal/loongarch/include/rte_byteorder.h +++ b/lib/eal/loongarch/include/rte_byteorder.h @@ -5,12 +5,12 @@ #ifndef RTE_BYTEORDER_LOONGARCH_H #define RTE_BYTEORDER_LOONGARCH_H +#include "generic/rte_byteorder.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_byteorder.h" - #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN #define rte_cpu_to_le_16(x) (x) diff --git a/lib/eal/loongarch/include/rte_cpuflags.h b/lib/eal/loongarch/include/rte_cpuflags.h index 6b592c147c..c1e04ac545 100644 --- a/lib/eal/loongarch/include/rte_cpuflags.h +++ b/lib/eal/loongarch/include/rte_cpuflags.h @@ -5,10 +5,6 @@ #ifndef RTE_CPUFLAGS_LOONGARCH_H #define RTE_CPUFLAGS_LOONGARCH_H -#ifdef __cplusplus -extern "C" { -#endif - /** * Enumeration of all CPU features supported */ @@ -30,6 +26,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/loongarch/include/rte_cycles.h b/lib/eal/loongarch/include/rte_cycles.h index f612d1ad10..128c8646e9 100644 --- a/lib/eal/loongarch/include/rte_cycles.h +++ b/lib/eal/loongarch/include/rte_cycles.h @@ -5,12 +5,12 @@ #ifndef RTE_CYCLES_LOONGARCH_H #define RTE_CYCLES_LOONGARCH_H +#include "generic/rte_cycles.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_cycles.h" - /** * Read the time base register. * diff --git a/lib/eal/loongarch/include/rte_io.h b/lib/eal/loongarch/include/rte_io.h index 40e40efa86..e32a4737b2 100644 --- a/lib/eal/loongarch/include/rte_io.h +++ b/lib/eal/loongarch/include/rte_io.h @@ -5,12 +5,12 @@ #ifndef RTE_IO_LOONGARCH_H #define RTE_IO_LOONGARCH_H +#include "generic/rte_io.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_io.h" - #ifdef __cplusplus } #endif diff --git a/lib/eal/loongarch/include/rte_memcpy.h b/lib/eal/loongarch/include/rte_memcpy.h index 22578d40f4..5412a0fdc1 100644 --- a/lib/eal/loongarch/include/rte_memcpy.h +++ b/lib/eal/loongarch/include/rte_memcpy.h @@ -10,12 +10,12 @@ #include "rte_common.h" +#include "generic/rte_memcpy.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_memcpy.h" - static inline void rte_mov16(uint8_t *dst, const uint8_t *src) { diff --git a/lib/eal/loongarch/include/rte_pause.h b/lib/eal/loongarch/include/rte_pause.h index 4302e1b9be..cffa2874d6 100644 --- a/lib/eal/loongarch/include/rte_pause.h +++ b/lib/eal/loongarch/include/rte_pause.h @@ -5,14 +5,14 @@ #ifndef RTE_PAUSE_LOONGARCH_H #define RTE_PAUSE_LOONGARCH_H -#ifdef __cplusplus -extern "C" { -#endif - #include "rte_atomic.h" #include "generic/rte_pause.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_pause(void) { } diff --git a/lib/eal/loongarch/include/rte_power_intrinsics.h b/lib/eal/loongarch/include/rte_power_intrinsics.h index d5dbd94567..9e11478206 100644 --- a/lib/eal/loongarch/include/rte_power_intrinsics.h +++ b/lib/eal/loongarch/include/rte_power_intrinsics.h @@ -5,14 +5,14 @@ #ifndef RTE_POWER_INTRINSIC_LOONGARCH_H #define RTE_POWER_INTRINSIC_LOONGARCH_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include "generic/rte_power_intrinsics.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/loongarch/include/rte_prefetch.h b/lib/eal/loongarch/include/rte_prefetch.h index 64b1fd2c2a..8da08a5566 100644 --- a/lib/eal/loongarch/include/rte_prefetch.h +++ b/lib/eal/loongarch/include/rte_prefetch.h @@ -5,14 +5,14 @@ #ifndef RTE_PREFETCH_LOONGARCH_H #define RTE_PREFETCH_LOONGARCH_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { __builtin_prefetch((const void *)(uintptr_t)p, 0, 3); diff --git a/lib/eal/loongarch/include/rte_rwlock.h b/lib/eal/loongarch/include/rte_rwlock.h index aedc6f3349..48924599c5 100644 --- a/lib/eal/loongarch/include/rte_rwlock.h +++ b/lib/eal/loongarch/include/rte_rwlock.h @@ -5,12 +5,12 @@ #ifndef RTE_RWLOCK_LOONGARCH_H #define RTE_RWLOCK_LOONGARCH_H +#include "generic/rte_rwlock.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_rwlock.h" - static inline void rte_rwlock_read_lock_tm(rte_rwlock_t *rwl) { diff --git a/lib/eal/loongarch/include/rte_spinlock.h b/lib/eal/loongarch/include/rte_spinlock.h index e8d34e9728..38f00f631d 100644 --- a/lib/eal/loongarch/include/rte_spinlock.h +++ b/lib/eal/loongarch/include/rte_spinlock.h @@ -5,13 +5,13 @@ #ifndef RTE_SPINLOCK_LOONGARCH_H #define RTE_SPINLOCK_LOONGARCH_H +#include +#include "generic/rte_spinlock.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_spinlock.h" - #ifndef RTE_FORCE_INTRINSICS # error Platform must be built with RTE_FORCE_INTRINSICS #endif diff --git a/lib/eal/ppc/include/rte_atomic.h b/lib/eal/ppc/include/rte_atomic.h index 645c7132df..6ce2e5188a 100644 --- a/lib/eal/ppc/include/rte_atomic.h +++ b/lib/eal/ppc/include/rte_atomic.h @@ -12,13 +12,13 @@ #ifndef _RTE_ATOMIC_PPC_64_H_ #define _RTE_ATOMIC_PPC_64_H_ +#include +#include "generic/rte_atomic.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_atomic.h" - #define rte_mb() asm volatile("sync" : : : "memory") #define rte_wmb() asm volatile("sync" : : : "memory") diff --git a/lib/eal/ppc/include/rte_byteorder.h b/lib/eal/ppc/include/rte_byteorder.h index de94e2ad32..1d19e96f72 100644 --- a/lib/eal/ppc/include/rte_byteorder.h +++ b/lib/eal/ppc/include/rte_byteorder.h @@ -8,13 +8,13 @@ #ifndef _RTE_BYTEORDER_PPC_64_H_ #define _RTE_BYTEORDER_PPC_64_H_ +#include +#include "generic/rte_byteorder.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_byteorder.h" - /* * An architecture-optimized byte swap for a 16-bit value. * diff --git a/lib/eal/ppc/include/rte_cpuflags.h b/lib/eal/ppc/include/rte_cpuflags.h index dedc1ab469..b7bb8f6872 100644 --- a/lib/eal/ppc/include/rte_cpuflags.h +++ b/lib/eal/ppc/include/rte_cpuflags.h @@ -6,10 +6,6 @@ #ifndef _RTE_CPUFLAGS_PPC_64_H_ #define _RTE_CPUFLAGS_PPC_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * Enumeration of all CPU features supported */ @@ -52,6 +48,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/ppc/include/rte_cycles.h b/lib/eal/ppc/include/rte_cycles.h index 666fc9b0bf..1e6e6cccc8 100644 --- a/lib/eal/ppc/include/rte_cycles.h +++ b/lib/eal/ppc/include/rte_cycles.h @@ -6,10 +6,6 @@ #ifndef _RTE_CYCLES_PPC_64_H_ #define _RTE_CYCLES_PPC_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #ifdef __GLIBC__ #include @@ -20,6 +16,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Read the time base register. * diff --git a/lib/eal/ppc/include/rte_io.h b/lib/eal/ppc/include/rte_io.h index 01455065e5..c9371b784e 100644 --- a/lib/eal/ppc/include/rte_io.h +++ b/lib/eal/ppc/include/rte_io.h @@ -5,12 +5,12 @@ #ifndef _RTE_IO_PPC_64_H_ #define _RTE_IO_PPC_64_H_ +#include "generic/rte_io.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_io.h" - #ifdef __cplusplus } #endif diff --git a/lib/eal/ppc/include/rte_memcpy.h b/lib/eal/ppc/include/rte_memcpy.h index 6f388c0234..eae73128c4 100644 --- a/lib/eal/ppc/include/rte_memcpy.h +++ b/lib/eal/ppc/include/rte_memcpy.h @@ -12,12 +12,12 @@ #include "rte_altivec.h" #include "rte_common.h" +#include "generic/rte_memcpy.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_memcpy.h" - #if defined(RTE_TOOLCHAIN_GCC) && (GCC_VERSION >= 90000) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Warray-bounds" diff --git a/lib/eal/ppc/include/rte_pause.h b/lib/eal/ppc/include/rte_pause.h index 16e47ce22f..78a73aceed 100644 --- a/lib/eal/ppc/include/rte_pause.h +++ b/lib/eal/ppc/include/rte_pause.h @@ -5,14 +5,14 @@ #ifndef _RTE_PAUSE_PPC64_H_ #define _RTE_PAUSE_PPC64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include "rte_atomic.h" #include "generic/rte_pause.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_pause(void) { /* Set hardware multi-threading low priority */ diff --git a/lib/eal/ppc/include/rte_power_intrinsics.h b/lib/eal/ppc/include/rte_power_intrinsics.h index c0e9ac279f..6207eeb04d 100644 --- a/lib/eal/ppc/include/rte_power_intrinsics.h +++ b/lib/eal/ppc/include/rte_power_intrinsics.h @@ -5,14 +5,14 @@ #ifndef _RTE_POWER_INTRINSIC_PPC_H_ #define _RTE_POWER_INTRINSIC_PPC_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "generic/rte_power_intrinsics.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/ppc/include/rte_prefetch.h b/lib/eal/ppc/include/rte_prefetch.h index 2e1b5751e0..bae95af7bf 100644 --- a/lib/eal/ppc/include/rte_prefetch.h +++ b/lib/eal/ppc/include/rte_prefetch.h @@ -6,14 +6,14 @@ #ifndef _RTE_PREFETCH_PPC_64_H_ #define _RTE_PREFETCH_PPC_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { asm volatile ("dcbt 0,%[p],0" : : [p] "r" (p)); diff --git a/lib/eal/ppc/include/rte_rwlock.h b/lib/eal/ppc/include/rte_rwlock.h index 9fadc04076..bee8da4070 100644 --- a/lib/eal/ppc/include/rte_rwlock.h +++ b/lib/eal/ppc/include/rte_rwlock.h @@ -3,12 +3,12 @@ #ifndef _RTE_RWLOCK_PPC_64_H_ #define _RTE_RWLOCK_PPC_64_H_ +#include "generic/rte_rwlock.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_rwlock.h" - static inline void rte_rwlock_read_lock_tm(rte_rwlock_t *rwl) { diff --git a/lib/eal/ppc/include/rte_spinlock.h b/lib/eal/ppc/include/rte_spinlock.h index 3a4c905b22..77f90f974a 100644 --- a/lib/eal/ppc/include/rte_spinlock.h +++ b/lib/eal/ppc/include/rte_spinlock.h @@ -6,14 +6,14 @@ #ifndef _RTE_SPINLOCK_PPC_64_H_ #define _RTE_SPINLOCK_PPC_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_spinlock.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Fixme: Use intrinsics to implement the spinlock on Power architecture */ #ifndef RTE_FORCE_INTRINSICS diff --git a/lib/eal/riscv/include/rte_atomic.h b/lib/eal/riscv/include/rte_atomic.h index 2603bc90ea..66346ad474 100644 --- a/lib/eal/riscv/include/rte_atomic.h +++ b/lib/eal/riscv/include/rte_atomic.h @@ -12,15 +12,15 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include "generic/rte_atomic.h" +#ifdef __cplusplus +extern "C" { +#endif + #define rte_mb() asm volatile("fence rw, rw" : : : "memory") #define rte_wmb() asm volatile("fence w, w" : : : "memory") diff --git a/lib/eal/riscv/include/rte_byteorder.h b/lib/eal/riscv/include/rte_byteorder.h index 25bd0c275d..c9ff5c0dd1 100644 --- a/lib/eal/riscv/include/rte_byteorder.h +++ b/lib/eal/riscv/include/rte_byteorder.h @@ -8,14 +8,14 @@ #ifndef RTE_BYTEORDER_RISCV_H #define RTE_BYTEORDER_RISCV_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_byteorder.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_BYTE_ORDER #define RTE_BYTE_ORDER RTE_LITTLE_ENDIAN #endif diff --git a/lib/eal/riscv/include/rte_cpuflags.h b/lib/eal/riscv/include/rte_cpuflags.h index d742efc40f..ac2004f02d 100644 --- a/lib/eal/riscv/include/rte_cpuflags.h +++ b/lib/eal/riscv/include/rte_cpuflags.h @@ -8,10 +8,6 @@ #ifndef RTE_CPUFLAGS_RISCV_H #define RTE_CPUFLAGS_RISCV_H -#ifdef __cplusplus -extern "C" { -#endif - /** * Enumeration of all CPU features supported */ @@ -46,6 +42,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/riscv/include/rte_cycles.h b/lib/eal/riscv/include/rte_cycles.h index 04750ca253..7926809a73 100644 --- a/lib/eal/riscv/include/rte_cycles.h +++ b/lib/eal/riscv/include/rte_cycles.h @@ -8,12 +8,12 @@ #ifndef RTE_CYCLES_RISCV_H #define RTE_CYCLES_RISCV_H +#include "generic/rte_cycles.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_cycles.h" - #ifndef RTE_RISCV_RDTSC_USE_HPM #define RTE_RISCV_RDTSC_USE_HPM 0 #endif diff --git a/lib/eal/riscv/include/rte_io.h b/lib/eal/riscv/include/rte_io.h index 29659c9590..911dbb6bd2 100644 --- a/lib/eal/riscv/include/rte_io.h +++ b/lib/eal/riscv/include/rte_io.h @@ -8,12 +8,12 @@ #ifndef RTE_IO_RISCV_H #define RTE_IO_RISCV_H +#include "generic/rte_io.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_io.h" - #ifdef __cplusplus } #endif diff --git a/lib/eal/riscv/include/rte_memcpy.h b/lib/eal/riscv/include/rte_memcpy.h index e34f19396e..d8a942c5d2 100644 --- a/lib/eal/riscv/include/rte_memcpy.h +++ b/lib/eal/riscv/include/rte_memcpy.h @@ -12,12 +12,12 @@ #include "rte_common.h" +#include "generic/rte_memcpy.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_memcpy.h" - static inline void rte_mov16(uint8_t *dst, const uint8_t *src) { diff --git a/lib/eal/riscv/include/rte_pause.h b/lib/eal/riscv/include/rte_pause.h index cb8e9ca52d..3f473cd8db 100644 --- a/lib/eal/riscv/include/rte_pause.h +++ b/lib/eal/riscv/include/rte_pause.h @@ -7,14 +7,14 @@ #ifndef RTE_PAUSE_RISCV_H #define RTE_PAUSE_RISCV_H -#ifdef __cplusplus -extern "C" { -#endif - #include "rte_atomic.h" #include "generic/rte_pause.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_pause(void) { /* Insert pause hint directly to be compatible with old compilers. diff --git a/lib/eal/riscv/include/rte_power_intrinsics.h b/lib/eal/riscv/include/rte_power_intrinsics.h index 636e58e71f..3f7dba1640 100644 --- a/lib/eal/riscv/include/rte_power_intrinsics.h +++ b/lib/eal/riscv/include/rte_power_intrinsics.h @@ -7,14 +7,14 @@ #ifndef RTE_POWER_INTRINSIC_RISCV_H #define RTE_POWER_INTRINSIC_RISCV_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include "generic/rte_power_intrinsics.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/riscv/include/rte_prefetch.h b/lib/eal/riscv/include/rte_prefetch.h index 748cf1b626..42146491ea 100644 --- a/lib/eal/riscv/include/rte_prefetch.h +++ b/lib/eal/riscv/include/rte_prefetch.h @@ -8,14 +8,14 @@ #ifndef RTE_PREFETCH_RISCV_H #define RTE_PREFETCH_RISCV_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { RTE_SET_USED(p); diff --git a/lib/eal/riscv/include/rte_rwlock.h b/lib/eal/riscv/include/rte_rwlock.h index 9cdaf1b0ef..730970eecb 100644 --- a/lib/eal/riscv/include/rte_rwlock.h +++ b/lib/eal/riscv/include/rte_rwlock.h @@ -7,12 +7,12 @@ #ifndef RTE_RWLOCK_RISCV_H #define RTE_RWLOCK_RISCV_H +#include "generic/rte_rwlock.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_rwlock.h" - static inline void rte_rwlock_read_lock_tm(rte_rwlock_t *rwl) { diff --git a/lib/eal/riscv/include/rte_spinlock.h b/lib/eal/riscv/include/rte_spinlock.h index 6af430735c..5fe4980e44 100644 --- a/lib/eal/riscv/include/rte_spinlock.h +++ b/lib/eal/riscv/include/rte_spinlock.h @@ -12,13 +12,13 @@ # error Platform must be built with RTE_FORCE_INTRINSICS #endif +#include +#include "generic/rte_spinlock.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "generic/rte_spinlock.h" - static inline int rte_tm_supported(void) { return 0; diff --git a/lib/eal/windows/include/pthread.h b/lib/eal/windows/include/pthread.h index 051b9311c2..e1c31017d1 100644 --- a/lib/eal/windows/include/pthread.h +++ b/lib/eal/windows/include/pthread.h @@ -13,13 +13,13 @@ * eal_common_thread.c and common\include\rte_per_lcore.h as Microsoft libc * does not contain pthread.h. This may be removed in future releases. */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - #define PTHREAD_BARRIER_SERIAL_THREAD TRUE /* defining pthread_t type on Windows since there is no in Microsoft libc*/ diff --git a/lib/eal/windows/include/regex.h b/lib/eal/windows/include/regex.h index 827f938414..a224c0cd29 100644 --- a/lib/eal/windows/include/regex.h +++ b/lib/eal/windows/include/regex.h @@ -10,15 +10,15 @@ * as Microsoft libc does not contain regex.h. This may be removed in * future releases. */ -#ifdef __cplusplus -extern "C" { -#endif - #define REG_NOMATCH 1 #define REG_ESPACE 12 #include +#ifdef __cplusplus +extern "C" { +#endif + /* defining regex_t for Windows */ typedef void *regex_t; /* defining regmatch_t for Windows */ diff --git a/lib/eal/windows/include/rte_windows.h b/lib/eal/windows/include/rte_windows.h index 567ed7d820..e78f007ffa 100644 --- a/lib/eal/windows/include/rte_windows.h +++ b/lib/eal/windows/include/rte_windows.h @@ -5,10 +5,6 @@ #ifndef _RTE_WINDOWS_H_ #define _RTE_WINDOWS_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file Windows-specific facilities * @@ -44,6 +40,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Log GetLastError() with context, usually a Win32 API function and arguments. */ diff --git a/lib/eal/x86/include/rte_atomic.h b/lib/eal/x86/include/rte_atomic.h index 74b1b24b7a..c72c47c83e 100644 --- a/lib/eal/x86/include/rte_atomic.h +++ b/lib/eal/x86/include/rte_atomic.h @@ -5,10 +5,6 @@ #ifndef _RTE_ATOMIC_X86_H_ #define _RTE_ATOMIC_X86_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -31,6 +27,10 @@ extern "C" { #define rte_smp_rmb() rte_compiler_barrier() +#ifdef __cplusplus +extern "C" { +#endif + /* * From Intel Software Development Manual; Vol 3; * 8.2.2 Memory Ordering in P6 and More Recent Processor Families: @@ -99,10 +99,18 @@ rte_atomic_thread_fence(rte_memory_order memorder) __rte_atomic_thread_fence(memorder); } +#ifdef __cplusplus +} +#endif + #ifndef RTE_TOOLCHAIN_MSVC /*------------------------- 16 bit atomic operations -------------------------*/ +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_FORCE_INTRINSICS static inline int rte_atomic16_cmpset(volatile uint16_t *dst, uint16_t exp, uint16_t src) @@ -273,6 +281,11 @@ static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) ); return ret != 0; } + +#ifdef __cplusplus +} +#endif + #endif #ifdef RTE_ARCH_I686 @@ -283,8 +296,4 @@ static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) #endif -#ifdef __cplusplus -} -#endif - #endif /* _RTE_ATOMIC_X86_H_ */ diff --git a/lib/eal/x86/include/rte_byteorder.h b/lib/eal/x86/include/rte_byteorder.h index adbec0c157..5a49ffcd50 100644 --- a/lib/eal/x86/include/rte_byteorder.h +++ b/lib/eal/x86/include/rte_byteorder.h @@ -5,15 +5,15 @@ #ifndef _RTE_BYTEORDER_X86_H_ #define _RTE_BYTEORDER_X86_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include "generic/rte_byteorder.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_BYTE_ORDER #define RTE_BYTE_ORDER RTE_LITTLE_ENDIAN #endif @@ -48,6 +48,10 @@ static inline uint32_t rte_arch_bswap32(uint32_t _x) return x; } +#ifdef __cplusplus +} +#endif + #define rte_bswap16(x) ((uint16_t)(__builtin_constant_p(x) ? \ rte_constant_bswap16(x) : \ rte_arch_bswap16(x))) @@ -83,8 +87,4 @@ static inline uint32_t rte_arch_bswap32(uint32_t _x) #define rte_be_to_cpu_32(x) rte_bswap32(x) #define rte_be_to_cpu_64(x) rte_bswap64(x) -#ifdef __cplusplus -} -#endif - #endif /* _RTE_BYTEORDER_X86_H_ */ diff --git a/lib/eal/x86/include/rte_cpuflags.h b/lib/eal/x86/include/rte_cpuflags.h index 1ee00e70fe..e843d1e5f4 100644 --- a/lib/eal/x86/include/rte_cpuflags.h +++ b/lib/eal/x86/include/rte_cpuflags.h @@ -5,10 +5,6 @@ #ifndef _RTE_CPUFLAGS_X86_64_H_ #define _RTE_CPUFLAGS_X86_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - enum rte_cpu_flag_t { /* (EAX 01h) ECX features*/ RTE_CPUFLAG_SSE3 = 0, /**< SSE3 */ @@ -138,6 +134,10 @@ enum rte_cpu_flag_t { #include "generic/rte_cpuflags.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/x86/include/rte_cycles.h b/lib/eal/x86/include/rte_cycles.h index 2afe85e28c..8de43840da 100644 --- a/lib/eal/x86/include/rte_cycles.h +++ b/lib/eal/x86/include/rte_cycles.h @@ -12,10 +12,6 @@ #include #endif -#ifdef __cplusplus -extern "C" { -#endif - #include "generic/rte_cycles.h" #ifdef RTE_LIBRTE_EAL_VMWARE_TSC_MAP_SUPPORT @@ -26,6 +22,10 @@ extern int rte_cycles_vmware_tsc_map; #include #include +#ifdef __cplusplus +extern "C" { +#endif + static inline uint64_t rte_rdtsc(void) { diff --git a/lib/eal/x86/include/rte_io.h b/lib/eal/x86/include/rte_io.h index 0e1fefdee1..c11cb8cd89 100644 --- a/lib/eal/x86/include/rte_io.h +++ b/lib/eal/x86/include/rte_io.h @@ -5,16 +5,16 @@ #ifndef _RTE_IO_X86_H_ #define _RTE_IO_X86_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_cpuflags.h" #define RTE_NATIVE_WRITE32_WC #include "generic/rte_io.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * MOVDIRI wrapper. diff --git a/lib/eal/x86/include/rte_pause.h b/lib/eal/x86/include/rte_pause.h index b4cf1df1d0..54f028b295 100644 --- a/lib/eal/x86/include/rte_pause.h +++ b/lib/eal/x86/include/rte_pause.h @@ -5,13 +5,14 @@ #ifndef _RTE_PAUSE_X86_H_ #define _RTE_PAUSE_X86_H_ +#include "generic/rte_pause.h" + +#include + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_pause.h" - -#include static inline void rte_pause(void) { _mm_pause(); diff --git a/lib/eal/x86/include/rte_power_intrinsics.h b/lib/eal/x86/include/rte_power_intrinsics.h index e4c2b87f73..fcb780fc5b 100644 --- a/lib/eal/x86/include/rte_power_intrinsics.h +++ b/lib/eal/x86/include/rte_power_intrinsics.h @@ -5,14 +5,14 @@ #ifndef _RTE_POWER_INTRINSIC_X86_H_ #define _RTE_POWER_INTRINSIC_X86_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "generic/rte_power_intrinsics.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/eal/x86/include/rte_prefetch.h b/lib/eal/x86/include/rte_prefetch.h index 8a9377714f..34a609cc65 100644 --- a/lib/eal/x86/include/rte_prefetch.h +++ b/lib/eal/x86/include/rte_prefetch.h @@ -5,10 +5,6 @@ #ifndef _RTE_PREFETCH_X86_64_H_ #define _RTE_PREFETCH_X86_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef RTE_TOOLCHAIN_MSVC #include #endif @@ -17,6 +13,10 @@ extern "C" { #include #include "generic/rte_prefetch.h" +#ifdef __cplusplus +extern "C" { +#endif + static inline void rte_prefetch0(const volatile void *p) { #ifdef RTE_TOOLCHAIN_MSVC diff --git a/lib/eal/x86/include/rte_rwlock.h b/lib/eal/x86/include/rte_rwlock.h index 1796b69265..281eff33b9 100644 --- a/lib/eal/x86/include/rte_rwlock.h +++ b/lib/eal/x86/include/rte_rwlock.h @@ -5,13 +5,13 @@ #ifndef _RTE_RWLOCK_X86_64_H_ #define _RTE_RWLOCK_X86_64_H_ +#include "generic/rte_rwlock.h" +#include "rte_spinlock.h" + #ifdef __cplusplus extern "C" { #endif -#include "generic/rte_rwlock.h" -#include "rte_spinlock.h" - static inline void rte_rwlock_read_lock_tm(rte_rwlock_t *rwl) __rte_no_thread_safety_analysis diff --git a/lib/eal/x86/include/rte_spinlock.h b/lib/eal/x86/include/rte_spinlock.h index a6c23ea1f6..a14da41964 100644 --- a/lib/eal/x86/include/rte_spinlock.h +++ b/lib/eal/x86/include/rte_spinlock.h @@ -5,10 +5,6 @@ #ifndef _RTE_SPINLOCK_X86_64_H_ #define _RTE_SPINLOCK_X86_64_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include "generic/rte_spinlock.h" #include "rte_rtm.h" #include "rte_cpuflags.h" @@ -17,6 +13,10 @@ extern "C" { #include "rte_pause.h" #include "rte_cycles.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_RTM_MAX_RETRIES (20) #define RTE_XABORT_LOCK_BUSY (0xff) @@ -182,7 +182,6 @@ rte_spinlock_recursive_trylock_tm(rte_spinlock_recursive_t *slr) return rte_spinlock_recursive_trylock(slr); } - #ifdef __cplusplus } #endif diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index 883e59a927..ae00ead865 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -5,10 +5,6 @@ #ifndef _RTE_ETHDEV_DRIVER_H_ #define _RTE_ETHDEV_DRIVER_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * @@ -24,6 +20,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * Structure used to hold information about the callbacks to be called for a diff --git a/lib/ethdev/ethdev_pci.h b/lib/ethdev/ethdev_pci.h index ec4f731270..2229ffa252 100644 --- a/lib/ethdev/ethdev_pci.h +++ b/lib/ethdev/ethdev_pci.h @@ -6,16 +6,16 @@ #ifndef _RTE_ETHDEV_PCI_H_ #define _RTE_ETHDEV_PCI_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Copy pci device info to the Ethernet device data. * Shared memory (eth_dev->data) only updated by primary process, so it is safe diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h index 3bec87bfdb..36a38f718a 100644 --- a/lib/ethdev/ethdev_trace.h +++ b/lib/ethdev/ethdev_trace.h @@ -11,10 +11,6 @@ * API for ethdev trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -22,6 +18,10 @@ extern "C" { #include "rte_mtr.h" #include "rte_tm.h" +#ifdef __cplusplus +extern "C" { +#endif + RTE_TRACE_POINT( rte_ethdev_trace_configure, RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t nb_rx_q, diff --git a/lib/ethdev/ethdev_vdev.h b/lib/ethdev/ethdev_vdev.h index 364f140f91..010ec75a00 100644 --- a/lib/ethdev/ethdev_vdev.h +++ b/lib/ethdev/ethdev_vdev.h @@ -6,15 +6,15 @@ #ifndef _RTE_ETHDEV_VDEV_H_ #define _RTE_ETHDEV_VDEV_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * Allocates a new ethdev slot for an Ethernet device and returns the pointer diff --git a/lib/ethdev/rte_cman.h b/lib/ethdev/rte_cman.h index 297db8e095..dedd6cb71a 100644 --- a/lib/ethdev/rte_cman.h +++ b/lib/ethdev/rte_cman.h @@ -5,12 +5,12 @@ #ifndef RTE_CMAN_H #define RTE_CMAN_H +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * @file * Congestion management related parameters for DPDK. diff --git a/lib/ethdev/rte_dev_info.h b/lib/ethdev/rte_dev_info.h index 67cf0ae526..4fde2ad408 100644 --- a/lib/ethdev/rte_dev_info.h +++ b/lib/ethdev/rte_dev_info.h @@ -5,12 +5,12 @@ #ifndef _RTE_DEV_INFO_H_ #define _RTE_DEV_INFO_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /* * Placeholder for accessing device registers */ diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index 548fada1c7..a75e26bf07 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -145,10 +145,6 @@ * a 0 value by the receive function of the driver for a given number of tries. */ -#ifdef __cplusplus -extern "C" { -#endif - #include /* Use this macro to check if LRO API is supported */ @@ -5966,6 +5962,10 @@ int rte_eth_cman_config_get(uint16_t port_id, struct rte_eth_cman_config *config #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * Helper routine for rte_eth_rx_burst(). diff --git a/lib/ethdev/rte_ethdev_trace_fp.h b/lib/ethdev/rte_ethdev_trace_fp.h index 40b6e4756b..c11b4f18f7 100644 --- a/lib/ethdev/rte_ethdev_trace_fp.h +++ b/lib/ethdev/rte_ethdev_trace_fp.h @@ -11,12 +11,12 @@ * API for ethdev trace support */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - RTE_TRACE_POINT_FP( rte_ethdev_trace_rx_burst, RTE_TRACE_POINT_ARGS(uint16_t port_id, uint16_t queue_id, diff --git a/lib/eventdev/event_timer_adapter_pmd.h b/lib/eventdev/event_timer_adapter_pmd.h index cd5127f047..fffcd90c8f 100644 --- a/lib/eventdev/event_timer_adapter_pmd.h +++ b/lib/eventdev/event_timer_adapter_pmd.h @@ -16,12 +16,12 @@ * versioning. */ +#include "rte_event_timer_adapter.h" + #ifdef __cplusplus extern "C" { #endif -#include "rte_event_timer_adapter.h" - /* * Definitions of functions exported by an event timer adapter implementation * through *rte_event_timer_adapter_ops* structure supplied in the diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index 7a5699f14b..fd5f7a14f4 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -5,10 +5,6 @@ #ifndef _RTE_EVENTDEV_PMD_H_ #define _RTE_EVENTDEV_PMD_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** @file * RTE Event PMD APIs * @@ -31,6 +27,10 @@ extern "C" { #include "event_timer_adapter_pmd.h" #include "rte_eventdev.h" +#ifdef __cplusplus +extern "C" { +#endif + extern int rte_event_logtype; #define RTE_LOGTYPE_EVENTDEV rte_event_logtype diff --git a/lib/eventdev/eventdev_pmd_pci.h b/lib/eventdev/eventdev_pmd_pci.h index 26aa3a6635..5cb5916a84 100644 --- a/lib/eventdev/eventdev_pmd_pci.h +++ b/lib/eventdev/eventdev_pmd_pci.h @@ -5,10 +5,6 @@ #ifndef _RTE_EVENTDEV_PMD_PCI_H_ #define _RTE_EVENTDEV_PMD_PCI_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** @file * RTE Eventdev PCI PMD APIs * @@ -28,6 +24,10 @@ extern "C" { #include "eventdev_pmd.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef int (*eventdev_pmd_pci_callback_t)(struct rte_eventdev *dev); /** diff --git a/lib/eventdev/eventdev_pmd_vdev.h b/lib/eventdev/eventdev_pmd_vdev.h index bb433ba955..4eaefa0b0b 100644 --- a/lib/eventdev/eventdev_pmd_vdev.h +++ b/lib/eventdev/eventdev_pmd_vdev.h @@ -5,10 +5,6 @@ #ifndef _RTE_EVENTDEV_PMD_VDEV_H_ #define _RTE_EVENTDEV_PMD_VDEV_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** @file * RTE Eventdev VDEV PMD APIs * @@ -27,6 +23,10 @@ extern "C" { #include "eventdev_pmd.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * Creates a new virtual event device and returns the pointer to that device. diff --git a/lib/eventdev/eventdev_trace.h b/lib/eventdev/eventdev_trace.h index 9c2b261c06..8ff8841729 100644 --- a/lib/eventdev/eventdev_trace.h +++ b/lib/eventdev/eventdev_trace.h @@ -11,10 +11,6 @@ * API for ethdev trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_eventdev.h" @@ -22,6 +18,10 @@ extern "C" { #include "rte_event_eth_rx_adapter.h" #include "rte_event_timer_adapter.h" +#ifdef __cplusplus +extern "C" { +#endif + RTE_TRACE_POINT( rte_eventdev_trace_configure, RTE_TRACE_POINT_ARGS(uint8_t dev_id, diff --git a/lib/eventdev/rte_event_crypto_adapter.h b/lib/eventdev/rte_event_crypto_adapter.h index e07f159b77..c9b277c664 100644 --- a/lib/eventdev/rte_event_crypto_adapter.h +++ b/lib/eventdev/rte_event_crypto_adapter.h @@ -167,14 +167,14 @@ * from the start of the rte_crypto_op including initialization vector (IV). */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_eventdev.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * Crypto event adapter mode */ diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h index cf42c69b0d..9237e198a7 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.h +++ b/lib/eventdev/rte_event_eth_rx_adapter.h @@ -87,10 +87,6 @@ * event based so the callback can also modify the event data if it needs to. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -98,6 +94,10 @@ extern "C" { #include "rte_eventdev.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE 32 /* struct rte_event_eth_rx_adapter_queue_conf flags definitions */ diff --git a/lib/eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h index b38b3fce97..ef01345ac2 100644 --- a/lib/eventdev/rte_event_eth_tx_adapter.h +++ b/lib/eventdev/rte_event_eth_tx_adapter.h @@ -76,10 +76,6 @@ * impact due to a change in how the transmit queue index is specified. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -87,6 +83,10 @@ extern "C" { #include "rte_eventdev.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * Adapter configuration structure * diff --git a/lib/eventdev/rte_event_ring.h b/lib/eventdev/rte_event_ring.h index f9cf19ae16..5769da269e 100644 --- a/lib/eventdev/rte_event_ring.h +++ b/lib/eventdev/rte_event_ring.h @@ -14,10 +14,6 @@ #ifndef _RTE_EVENT_RING_ #define _RTE_EVENT_RING_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -25,6 +21,10 @@ extern "C" { #include #include "rte_eventdev.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_TAILQ_EVENT_RING_NAME "RTE_EVENT_RING" /** diff --git a/lib/eventdev/rte_event_timer_adapter.h b/lib/eventdev/rte_event_timer_adapter.h index 0bd1b30045..256807b3bf 100644 --- a/lib/eventdev/rte_event_timer_adapter.h +++ b/lib/eventdev/rte_event_timer_adapter.h @@ -107,14 +107,14 @@ * All these use cases require high resolution and low time drift. */ -#ifdef __cplusplus -extern "C" { -#endif - #include "rte_eventdev.h" #include "rte_eventdev_trace_fp.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * Timer adapter clock source */ diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h index 08e5f9320b..e5c5b7df64 100644 --- a/lib/eventdev/rte_eventdev.h +++ b/lib/eventdev/rte_eventdev.h @@ -237,10 +237,6 @@ * \endcode */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -2469,6 +2465,10 @@ rte_event_vector_pool_create(const char *name, unsigned int n, #include +#ifdef __cplusplus +extern "C" { +#endif + static __rte_always_inline uint16_t __rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id, const struct rte_event ev[], uint16_t nb_events, diff --git a/lib/eventdev/rte_eventdev_trace_fp.h b/lib/eventdev/rte_eventdev_trace_fp.h index 04d510ad00..8656f1e6e4 100644 --- a/lib/eventdev/rte_eventdev_trace_fp.h +++ b/lib/eventdev/rte_eventdev_trace_fp.h @@ -11,12 +11,12 @@ * API for ethdev trace support */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - RTE_TRACE_POINT_FP( rte_eventdev_trace_deq_burst, RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, void *ev_table, diff --git a/lib/graph/rte_graph_model_mcore_dispatch.h b/lib/graph/rte_graph_model_mcore_dispatch.h index 732b89297f..f9ff3daa88 100644 --- a/lib/graph/rte_graph_model_mcore_dispatch.h +++ b/lib/graph/rte_graph_model_mcore_dispatch.h @@ -12,10 +12,6 @@ * dispatch model. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -23,6 +19,10 @@ extern "C" { #include "rte_graph_worker_common.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_GRAPH_SCHED_WQ_SIZE_MULTIPLIER 8 #define RTE_GRAPH_SCHED_WQ_SIZE(nb_nodes) \ ((typeof(nb_nodes))((nb_nodes) * RTE_GRAPH_SCHED_WQ_SIZE_MULTIPLIER)) diff --git a/lib/graph/rte_graph_worker.h b/lib/graph/rte_graph_worker.h index 03d0e01b68..b0f952a82c 100644 --- a/lib/graph/rte_graph_worker.h +++ b/lib/graph/rte_graph_worker.h @@ -6,13 +6,13 @@ #ifndef _RTE_GRAPH_WORKER_H_ #define _RTE_GRAPH_WORKER_H_ +#include "rte_graph_model_rtc.h" +#include "rte_graph_model_mcore_dispatch.h" + #ifdef __cplusplus extern "C" { #endif -#include "rte_graph_model_rtc.h" -#include "rte_graph_model_mcore_dispatch.h" - /** * Perform graph walk on the circular buffer and invoke the process function * of the nodes and collect the stats. diff --git a/lib/gso/rte_gso.h b/lib/gso/rte_gso.h index d60cb65f18..75246989dc 100644 --- a/lib/gso/rte_gso.h +++ b/lib/gso/rte_gso.h @@ -10,13 +10,13 @@ * Interface to GSO library */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /* Minimum GSO segment size for TCP based packets. */ #define RTE_GSO_SEG_SIZE_MIN (sizeof(struct rte_ether_hdr) + \ sizeof(struct rte_ipv4_hdr) + sizeof(struct rte_tcp_hdr) + 1) diff --git a/lib/hash/rte_fbk_hash.h b/lib/hash/rte_fbk_hash.h index b01126999b..1f0c1d1b6c 100644 --- a/lib/hash/rte_fbk_hash.h +++ b/lib/hash/rte_fbk_hash.h @@ -18,15 +18,15 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_FBK_HASH_INIT_VAL_DEFAULT /** Initialising value used when calculating hash. */ #define RTE_FBK_HASH_INIT_VAL_DEFAULT 0xFFFFFFFF diff --git a/lib/hash/rte_hash_crc.h b/lib/hash/rte_hash_crc.h index 8ad2422ec3..fa07c97685 100644 --- a/lib/hash/rte_hash_crc.h +++ b/lib/hash/rte_hash_crc.h @@ -11,10 +11,6 @@ * RTE CRC Hash */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -39,6 +35,10 @@ extern uint8_t rte_hash_crc32_alg; #include "rte_crc_generic.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + /** * Allow or disallow use of SSE4.2/ARMv8 intrinsics for CRC32 hash * calculation. diff --git a/lib/hash/rte_jhash.h b/lib/hash/rte_jhash.h index f2446f081e..b70799d209 100644 --- a/lib/hash/rte_jhash.h +++ b/lib/hash/rte_jhash.h @@ -11,10 +11,6 @@ * jhash functions. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -23,6 +19,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* jhash.h: Jenkins hash support. * * Copyright (C) 2006 Bob Jenkins (bob_jenkins@burtleburtle.net) diff --git a/lib/hash/rte_thash.h b/lib/hash/rte_thash.h index 30b657e67a..ec9bc57efa 100644 --- a/lib/hash/rte_thash.h +++ b/lib/hash/rte_thash.h @@ -15,10 +15,6 @@ * after GRE header decapsulating) */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -28,6 +24,10 @@ extern "C" { #if defined(RTE_ARCH_X86) || defined(__ARM_NEON) #include + +#ifdef __cplusplus +extern "C" { +#endif #endif #ifdef RTE_ARCH_X86 diff --git a/lib/hash/rte_thash_gfni.h b/lib/hash/rte_thash_gfni.h index 132f37506d..e82378933c 100644 --- a/lib/hash/rte_thash_gfni.h +++ b/lib/hash/rte_thash_gfni.h @@ -5,10 +5,6 @@ #ifndef _RTE_THASH_GFNI_H_ #define _RTE_THASH_GFNI_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -18,6 +14,10 @@ extern "C" { #endif +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * Stubs only used when GFNI is not available. diff --git a/lib/ip_frag/rte_ip_frag.h b/lib/ip_frag/rte_ip_frag.h index 2ad318096b..84fd717953 100644 --- a/lib/ip_frag/rte_ip_frag.h +++ b/lib/ip_frag/rte_ip_frag.h @@ -12,10 +12,6 @@ * Implementation of IP packet fragmentation and reassembly. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -25,6 +21,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_mbuf; /** death row size (in packets) */ diff --git a/lib/ipsec/rte_ipsec.h b/lib/ipsec/rte_ipsec.h index f15f6f2966..28b7a61aea 100644 --- a/lib/ipsec/rte_ipsec.h +++ b/lib/ipsec/rte_ipsec.h @@ -17,10 +17,6 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - struct rte_ipsec_session; /** @@ -181,6 +177,10 @@ rte_ipsec_telemetry_sa_del(const struct rte_ipsec_sa *sa); #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/log/rte_log.h b/lib/log/rte_log.h index f357c59548..3735137150 100644 --- a/lib/log/rte_log.h +++ b/lib/log/rte_log.h @@ -13,10 +13,6 @@ * This file provides a log API to RTE applications. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -26,6 +22,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* SDK log type */ #define RTE_LOGTYPE_EAL 0 /**< Log related to eal. */ /* was RTE_LOGTYPE_MALLOC */ diff --git a/lib/lpm/rte_lpm.h b/lib/lpm/rte_lpm.h index 9c6df311cb..329dc1aad4 100644 --- a/lib/lpm/rte_lpm.h +++ b/lib/lpm/rte_lpm.h @@ -391,6 +391,10 @@ static inline void rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], uint32_t defv); +#ifdef __cplusplus +} +#endif + #if defined(RTE_ARCH_ARM) #ifdef RTE_HAS_SVE_ACLE #include "rte_lpm_sve.h" @@ -407,8 +411,4 @@ rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4], #include "rte_lpm_scalar.h" #endif -#ifdef __cplusplus -} -#endif - #endif /* _RTE_LPM_H_ */ diff --git a/lib/member/rte_member.h b/lib/member/rte_member.h index aec192eba5..109bdd000b 100644 --- a/lib/member/rte_member.h +++ b/lib/member/rte_member.h @@ -54,10 +54,6 @@ #ifndef _RTE_MEMBER_H_ #define _RTE_MEMBER_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -100,6 +96,10 @@ typedef uint16_t member_set_t; #define MEMBER_HASH_FUNC rte_jhash #endif +#ifdef __cplusplus +extern "C" { +#endif + /** @internal setsummary structure. */ struct rte_member_setsum; diff --git a/lib/member/rte_member_sketch.h b/lib/member/rte_member_sketch.h index 74f24ca223..6a8d5104dd 100644 --- a/lib/member/rte_member_sketch.h +++ b/lib/member/rte_member_sketch.h @@ -5,13 +5,13 @@ #ifndef RTE_MEMBER_SKETCH_H #define RTE_MEMBER_SKETCH_H +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - #define NUM_ROW_SCALAR 5 #define INTERVAL (1 << 15) diff --git a/lib/member/rte_member_sketch_avx512.h b/lib/member/rte_member_sketch_avx512.h index 52666b5b4c..a8ef3b065e 100644 --- a/lib/member/rte_member_sketch_avx512.h +++ b/lib/member/rte_member_sketch_avx512.h @@ -5,14 +5,14 @@ #ifndef RTE_MEMBER_SKETCH_AVX512_H #define RTE_MEMBER_SKETCH_AVX512_H -#ifdef __cplusplus -extern "C" { -#endif - #include #include "rte_member.h" #include "rte_member_sketch.h" +#ifdef __cplusplus +extern "C" { +#endif + #define NUM_ROW_VEC 8 void diff --git a/lib/member/rte_member_x86.h b/lib/member/rte_member_x86.h index d115151f9f..4de453485b 100644 --- a/lib/member/rte_member_x86.h +++ b/lib/member/rte_member_x86.h @@ -5,12 +5,12 @@ #ifndef _RTE_MEMBER_X86_H_ #define _RTE_MEMBER_X86_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - #if defined(__AVX2__) static inline int diff --git a/lib/member/rte_xxh64_avx512.h b/lib/member/rte_xxh64_avx512.h index ffe6cb79f9..58f896ebb8 100644 --- a/lib/member/rte_xxh64_avx512.h +++ b/lib/member/rte_xxh64_avx512.h @@ -5,13 +5,13 @@ #ifndef RTE_XXH64_AVX512_H #define RTE_XXH64_AVX512_H +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /* 0b1001111000110111011110011011000110000101111010111100101010000111 */ static const uint64_t PRIME64_1 = 0x9E3779B185EBCA87ULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */ diff --git a/lib/mempool/mempool_trace.h b/lib/mempool/mempool_trace.h index dffef062e4..c595a3116b 100644 --- a/lib/mempool/mempool_trace.h +++ b/lib/mempool/mempool_trace.h @@ -11,15 +11,15 @@ * APIs for mempool trace support */ -#ifdef __cplusplus -extern "C" { -#endif - #include "rte_mempool.h" #include #include +#ifdef __cplusplus +extern "C" { +#endif + RTE_TRACE_POINT( rte_mempool_trace_create, RTE_TRACE_POINT_ARGS(const char *name, uint32_t nb_elts, diff --git a/lib/mempool/rte_mempool_trace_fp.h b/lib/mempool/rte_mempool_trace_fp.h index ed060e887c..9c5cdbb291 100644 --- a/lib/mempool/rte_mempool_trace_fp.h +++ b/lib/mempool/rte_mempool_trace_fp.h @@ -11,12 +11,12 @@ * Mempool fast path API for trace support */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - RTE_TRACE_POINT_FP( rte_mempool_trace_ops_dequeue_bulk, RTE_TRACE_POINT_ARGS(void *mempool, void **obj_table, diff --git a/lib/meter/rte_meter.h b/lib/meter/rte_meter.h index bd68cbe389..e72bf93b3e 100644 --- a/lib/meter/rte_meter.h +++ b/lib/meter/rte_meter.h @@ -6,10 +6,6 @@ #ifndef __INCLUDE_RTE_METER_H__ #define __INCLUDE_RTE_METER_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Traffic Metering @@ -22,6 +18,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Application Programmer's Interface (API) */ diff --git a/lib/mldev/mldev_utils.h b/lib/mldev/mldev_utils.h index 5e2a180adc..bf21067d38 100644 --- a/lib/mldev/mldev_utils.h +++ b/lib/mldev/mldev_utils.h @@ -5,10 +5,6 @@ #ifndef RTE_MLDEV_UTILS_H #define RTE_MLDEV_UTILS_H -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * @@ -20,6 +16,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * diff --git a/lib/mldev/rte_mldev_core.h b/lib/mldev/rte_mldev_core.h index b3bd281083..8dccf125fc 100644 --- a/lib/mldev/rte_mldev_core.h +++ b/lib/mldev/rte_mldev_core.h @@ -16,10 +16,6 @@ * These APIs are for MLDEV PMDs and library only. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -27,6 +23,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Device state */ #define ML_DEV_DETACHED (0) #define ML_DEV_ATTACHED (1) diff --git a/lib/mldev/rte_mldev_pmd.h b/lib/mldev/rte_mldev_pmd.h index fd5bbf4360..47c0f23223 100644 --- a/lib/mldev/rte_mldev_pmd.h +++ b/lib/mldev/rte_mldev_pmd.h @@ -14,10 +14,6 @@ * These APIs are for MLDEV PMDs only and user applications should not call them directly. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -25,6 +21,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * @internal * diff --git a/lib/net/rte_ether.h b/lib/net/rte_ether.h index 32ed515aef..403e84f50b 100644 --- a/lib/net/rte_ether.h +++ b/lib/net/rte_ether.h @@ -11,10 +11,6 @@ * Ethernet Helpers in RTE */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -22,6 +18,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_ETHER_ADDR_LEN 6 /**< Length of Ethernet address. */ #define RTE_ETHER_TYPE_LEN 2 /**< Length of Ethernet type field. */ #define RTE_ETHER_CRC_LEN 4 /**< Length of Ethernet CRC. */ diff --git a/lib/net/rte_net.h b/lib/net/rte_net.h index cdc6cf956d..40ad6a71a1 100644 --- a/lib/net/rte_net.h +++ b/lib/net/rte_net.h @@ -5,14 +5,14 @@ #ifndef _RTE_NET_PTYPE_H_ #define _RTE_NET_PTYPE_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Structure containing header lengths associated to a packet, filled * by rte_net_get_ptype(). diff --git a/lib/net/rte_sctp.h b/lib/net/rte_sctp.h index 965682dc2b..a8ba9e49d8 100644 --- a/lib/net/rte_sctp.h +++ b/lib/net/rte_sctp.h @@ -14,14 +14,14 @@ #ifndef _RTE_SCTP_H_ #define _RTE_SCTP_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * SCTP Header */ diff --git a/lib/node/rte_node_eth_api.h b/lib/node/rte_node_eth_api.h index 143cf131b3..2b7019f6bb 100644 --- a/lib/node/rte_node_eth_api.h +++ b/lib/node/rte_node_eth_api.h @@ -16,15 +16,15 @@ * and its queue associations. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Port config for ethdev_rx and ethdev_tx node. */ diff --git a/lib/node/rte_node_ip4_api.h b/lib/node/rte_node_ip4_api.h index 24f8ec843a..950751a525 100644 --- a/lib/node/rte_node_ip4_api.h +++ b/lib/node/rte_node_ip4_api.h @@ -15,15 +15,15 @@ * This API allows to do control path functions of ip4_* nodes * like ip4_lookup, ip4_rewrite. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * IP4 lookup next nodes. */ diff --git a/lib/node/rte_node_ip6_api.h b/lib/node/rte_node_ip6_api.h index a538dc2ea7..f467aac7b6 100644 --- a/lib/node/rte_node_ip6_api.h +++ b/lib/node/rte_node_ip6_api.h @@ -15,13 +15,13 @@ * This API allows to do control path functions of ip6_* nodes * like ip6_lookup, ip6_rewrite. */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** * IP6 lookup next nodes. */ diff --git a/lib/node/rte_node_udp4_input_api.h b/lib/node/rte_node_udp4_input_api.h index c873acbbe0..694660bd6a 100644 --- a/lib/node/rte_node_udp4_input_api.h +++ b/lib/node/rte_node_udp4_input_api.h @@ -16,14 +16,14 @@ * like udp4_input. * */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "rte_graph.h" + +#ifdef __cplusplus +extern "C" { +#endif /** * UDP4 lookup next nodes. */ diff --git a/lib/pci/rte_pci.h b/lib/pci/rte_pci.h index c26fc77209..9a50a12142 100644 --- a/lib/pci/rte_pci.h +++ b/lib/pci/rte_pci.h @@ -12,14 +12,14 @@ * RTE PCI Library */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Conventional PCI and PCI-X Mode 1 devices have 256 bytes of * configuration space. PCI-X Mode 2 and PCIe devices have 4096 bytes of diff --git a/lib/pdcp/rte_pdcp.h b/lib/pdcp/rte_pdcp.h index f74524f83d..15fcbf9607 100644 --- a/lib/pdcp/rte_pdcp.h +++ b/lib/pdcp/rte_pdcp.h @@ -19,10 +19,6 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - /* Forward declarations. */ struct rte_pdcp_entity; @@ -373,6 +369,10 @@ rte_pdcp_t_reordering_expiry_handle(const struct rte_pdcp_entity *entity, */ #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/pipeline/rte_pipeline.h b/lib/pipeline/rte_pipeline.h index 0c7994b4f2..c9e7172453 100644 --- a/lib/pipeline/rte_pipeline.h +++ b/lib/pipeline/rte_pipeline.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PIPELINE_H__ #define __INCLUDE_RTE_PIPELINE_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Pipeline @@ -59,6 +55,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_mbuf; /* diff --git a/lib/pipeline/rte_port_in_action.h b/lib/pipeline/rte_port_in_action.h index ec2994599f..9d17bae988 100644 --- a/lib/pipeline/rte_port_in_action.h +++ b/lib/pipeline/rte_port_in_action.h @@ -46,10 +46,6 @@ * @b EXPERIMENTAL: this API may change without prior notice */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -57,6 +53,10 @@ extern "C" { #include "rte_pipeline.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Input port actions. */ enum rte_port_in_action_type { /** Filter selected input packets. */ diff --git a/lib/pipeline/rte_swx_ctl.h b/lib/pipeline/rte_swx_ctl.h index 6ef2551ab5..c4e63753f5 100644 --- a/lib/pipeline/rte_swx_ctl.h +++ b/lib/pipeline/rte_swx_ctl.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_CTL_H__ #define __INCLUDE_RTE_SWX_CTL_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Pipeline Control @@ -22,6 +18,10 @@ extern "C" { #include "rte_swx_port.h" #include "rte_swx_table.h" +#ifdef __cplusplus +extern "C" { +#endif + struct rte_swx_pipeline; /** Name size. */ diff --git a/lib/pipeline/rte_swx_extern.h b/lib/pipeline/rte_swx_extern.h index e10e963d63..1553fa81ec 100644 --- a/lib/pipeline/rte_swx_extern.h +++ b/lib/pipeline/rte_swx_extern.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_EXTERN_H__ #define __INCLUDE_RTE_SWX_EXTERN_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Extern objects and functions @@ -19,6 +15,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /* * Extern type */ diff --git a/lib/pipeline/rte_swx_ipsec.h b/lib/pipeline/rte_swx_ipsec.h index 7c07fdc739..d2e5abef7d 100644 --- a/lib/pipeline/rte_swx_ipsec.h +++ b/lib/pipeline/rte_swx_ipsec.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_IPSEC_H__ #define __INCLUDE_RTE_SWX_IPSEC_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Internet Protocol Security (IPsec) @@ -53,6 +49,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * IPsec Setup API */ diff --git a/lib/pipeline/rte_swx_pipeline.h b/lib/pipeline/rte_swx_pipeline.h index 25df042d3b..882bd4bf6f 100644 --- a/lib/pipeline/rte_swx_pipeline.h +++ b/lib/pipeline/rte_swx_pipeline.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_PIPELINE_H__ #define __INCLUDE_RTE_SWX_PIPELINE_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Pipeline @@ -22,6 +18,10 @@ extern "C" { #include "rte_swx_table.h" #include "rte_swx_extern.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Name size. */ #ifndef RTE_SWX_NAME_SIZE #define RTE_SWX_NAME_SIZE 64 diff --git a/lib/pipeline/rte_swx_pipeline_spec.h b/lib/pipeline/rte_swx_pipeline_spec.h index dd88c0bfab..077b407c0a 100644 --- a/lib/pipeline/rte_swx_pipeline_spec.h +++ b/lib/pipeline/rte_swx_pipeline_spec.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_PIPELINE_SPEC_H__ #define __INCLUDE_RTE_SWX_PIPELINE_SPEC_H__ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -15,6 +11,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /* * extobj. * diff --git a/lib/pipeline/rte_table_action.h b/lib/pipeline/rte_table_action.h index 5dffbeb700..bab4bfd2e2 100644 --- a/lib/pipeline/rte_table_action.h +++ b/lib/pipeline/rte_table_action.h @@ -52,10 +52,6 @@ * @b EXPERIMENTAL: this API may change without prior notice */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -65,6 +61,10 @@ extern "C" { #include "rte_pipeline.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Table actions. */ enum rte_table_action_type { /** Forward to next pipeline table, output port or drop. */ diff --git a/lib/port/rte_port.h b/lib/port/rte_port.h index 0e30db371e..4b20872537 100644 --- a/lib/port/rte_port.h +++ b/lib/port/rte_port.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_H__ #define __INCLUDE_RTE_PORT_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port @@ -20,6 +16,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /**@{ * Macros to allow accessing metadata stored in the mbuf headroom * just beyond the end of the mbuf data structure returned by a port diff --git a/lib/port/rte_port_ethdev.h b/lib/port/rte_port_ethdev.h index e07021cb89..7729ff0da3 100644 --- a/lib/port/rte_port_ethdev.h +++ b/lib/port/rte_port_ethdev.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_ETHDEV_H__ #define __INCLUDE_RTE_PORT_ETHDEV_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port Ethernet Device @@ -21,6 +17,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** ethdev_reader port parameters */ struct rte_port_ethdev_reader_params { /** NIC RX port ID */ diff --git a/lib/port/rte_port_eventdev.h b/lib/port/rte_port_eventdev.h index 0efb8e1021..d9eccf07d4 100644 --- a/lib/port/rte_port_eventdev.h +++ b/lib/port/rte_port_eventdev.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_EVENTDEV_H__ #define __INCLUDE_RTE_PORT_EVENTDEV_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port Eventdev Interface @@ -24,6 +20,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Eventdev_reader port parameters */ struct rte_port_eventdev_reader_params { /** Eventdev Device ID */ diff --git a/lib/port/rte_port_fd.h b/lib/port/rte_port_fd.h index 885b9ada22..40a5e4a426 100644 --- a/lib/port/rte_port_fd.h +++ b/lib/port/rte_port_fd.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_FD_H__ #define __INCLUDE_RTE_PORT_FD_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port FD Device @@ -21,6 +17,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** fd_reader port parameters */ struct rte_port_fd_reader_params { /** File descriptor */ diff --git a/lib/port/rte_port_frag.h b/lib/port/rte_port_frag.h index 4055872e8d..9a10f10523 100644 --- a/lib/port/rte_port_frag.h +++ b/lib/port/rte_port_frag.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_IP_FRAG_H__ #define __INCLUDE_RTE_PORT_IP_FRAG_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port for IPv4 Fragmentation @@ -31,6 +27,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** ring_reader_ipv4_frag port parameters */ struct rte_port_ring_reader_frag_params { /** Underlying single consumer ring that has to be pre-initialized. */ diff --git a/lib/port/rte_port_ras.h b/lib/port/rte_port_ras.h index 94cfb3ed92..86e36f5362 100644 --- a/lib/port/rte_port_ras.h +++ b/lib/port/rte_port_ras.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_RAS_H__ #define __INCLUDE_RTE_PORT_RAS_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port for IPv4 Reassembly @@ -31,6 +27,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** ring_writer_ipv4_ras port parameters */ struct rte_port_ring_writer_ras_params { /** Underlying single consumer ring that has to be pre-initialized. */ diff --git a/lib/port/rte_port_ring.h b/lib/port/rte_port_ring.h index 027928c924..2089d0889b 100644 --- a/lib/port/rte_port_ring.h +++ b/lib/port/rte_port_ring.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_RING_H__ #define __INCLUDE_RTE_PORT_RING_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port Ring @@ -27,6 +23,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** ring_reader port parameters */ struct rte_port_ring_reader_params { /** Underlying consumer ring that has to be pre-initialized */ diff --git a/lib/port/rte_port_sched.h b/lib/port/rte_port_sched.h index 251380ef80..1bf08ae6a9 100644 --- a/lib/port/rte_port_sched.h +++ b/lib/port/rte_port_sched.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_SCHED_H__ #define __INCLUDE_RTE_PORT_SCHED_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port Hierarchical Scheduler @@ -23,6 +19,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** sched_reader port parameters */ struct rte_port_sched_reader_params { /** Underlying pre-initialized rte_sched_port */ diff --git a/lib/port/rte_port_source_sink.h b/lib/port/rte_port_source_sink.h index bcdbaf1e40..3122dd5038 100644 --- a/lib/port/rte_port_source_sink.h +++ b/lib/port/rte_port_source_sink.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_SOURCE_SINK_H__ #define __INCLUDE_RTE_PORT_SOURCE_SINK_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port Source/Sink @@ -19,6 +15,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** source port parameters */ struct rte_port_source_params { /** Pre-initialized buffer pool */ diff --git a/lib/port/rte_port_sym_crypto.h b/lib/port/rte_port_sym_crypto.h index 6532b4388a..d03cdc1e8b 100644 --- a/lib/port/rte_port_sym_crypto.h +++ b/lib/port/rte_port_sym_crypto.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_PORT_SYM_CRYPTO_H__ #define __INCLUDE_RTE_PORT_SYM_CRYPTO_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Port sym crypto Interface @@ -23,6 +19,10 @@ extern "C" { #include "rte_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Function prototype for reader post action. */ typedef void (*rte_port_sym_crypto_reader_callback_fn)(struct rte_mbuf **pkts, uint16_t n_pkts, void *arg); diff --git a/lib/port/rte_swx_port.h b/lib/port/rte_swx_port.h index 1dbd95ae87..b52b125572 100644 --- a/lib/port/rte_swx_port.h +++ b/lib/port/rte_swx_port.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_PORT_H__ #define __INCLUDE_RTE_SWX_PORT_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Port @@ -17,6 +13,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** Packet. */ struct rte_swx_pkt { /** Opaque packet handle. */ diff --git a/lib/port/rte_swx_port_ethdev.h b/lib/port/rte_swx_port_ethdev.h index cbc2d7b213..1828031e67 100644 --- a/lib/port/rte_swx_port_ethdev.h +++ b/lib/port/rte_swx_port_ethdev.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_PORT_ETHDEV_H__ #define __INCLUDE_RTE_SWX_PORT_ETHDEV_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Ethernet Device Input and Output Ports @@ -17,6 +13,10 @@ extern "C" { #include "rte_swx_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Ethernet device input port (reader) creation parameters. */ struct rte_swx_port_ethdev_reader_params { /** Name of a valid and fully configured Ethernet device. */ diff --git a/lib/port/rte_swx_port_fd.h b/lib/port/rte_swx_port_fd.h index e61719c8f6..63529cf0ab 100644 --- a/lib/port/rte_swx_port_fd.h +++ b/lib/port/rte_swx_port_fd.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_SWX_PORT_FD_H__ #define __INCLUDE_RTE_SWX_PORT_FD_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX FD Input and Output Ports @@ -18,6 +14,10 @@ extern "C" { #include "rte_swx_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** fd_reader port parameters */ struct rte_swx_port_fd_reader_params { /** File descriptor. Must be valid and opened in non-blocking mode. */ diff --git a/lib/port/rte_swx_port_ring.h b/lib/port/rte_swx_port_ring.h index efc485fb08..ef241c3fee 100644 --- a/lib/port/rte_swx_port_ring.h +++ b/lib/port/rte_swx_port_ring.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_SWX_PORT_RING_H__ #define __INCLUDE_RTE_SWX_PORT_RING_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Ring Input and Output Ports @@ -18,6 +14,10 @@ extern "C" { #include "rte_swx_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Ring input port (reader) creation parameters. */ struct rte_swx_port_ring_reader_params { /** Name of valid RTE ring. */ diff --git a/lib/port/rte_swx_port_source_sink.h b/lib/port/rte_swx_port_source_sink.h index 91bcbf74f4..e3ca7cfbb4 100644 --- a/lib/port/rte_swx_port_source_sink.h +++ b/lib/port/rte_swx_port_source_sink.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_PORT_SOURCE_SINK_H__ #define __INCLUDE_RTE_SWX_PORT_SOURCE_SINK_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Source and Sink Ports @@ -15,6 +11,10 @@ extern "C" { #include "rte_swx_port.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Maximum number of packets to read from the PCAP file. */ #ifndef RTE_SWX_PORT_SOURCE_PKTS_MAX #define RTE_SWX_PORT_SOURCE_PKTS_MAX 1024 diff --git a/lib/rawdev/rte_rawdev.h b/lib/rawdev/rte_rawdev.h index 640037b524..3fc471526e 100644 --- a/lib/rawdev/rte_rawdev.h +++ b/lib/rawdev/rte_rawdev.h @@ -14,13 +14,13 @@ * no specific type already available in DPDK. */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /* Rawdevice object - essentially a void to be typecast by implementation */ typedef void *rte_rawdev_obj_t; diff --git a/lib/rawdev/rte_rawdev_pmd.h b/lib/rawdev/rte_rawdev_pmd.h index 22b406444d..408ed461a4 100644 --- a/lib/rawdev/rte_rawdev_pmd.h +++ b/lib/rawdev/rte_rawdev_pmd.h @@ -13,10 +13,6 @@ * any application. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -26,6 +22,10 @@ extern "C" { #include "rte_rawdev.h" +#ifdef __cplusplus +extern "C" { +#endif + extern int librawdev_logtype; #define RTE_LOGTYPE_RAWDEV librawdev_logtype diff --git a/lib/rcu/rte_rcu_qsbr.h b/lib/rcu/rte_rcu_qsbr.h index ed3dd6d3d2..550fadf56a 100644 --- a/lib/rcu/rte_rcu_qsbr.h +++ b/lib/rcu/rte_rcu_qsbr.h @@ -21,10 +21,6 @@ * entered quiescent state. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -36,6 +32,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + extern int rte_rcu_log_type; #define RTE_LOGTYPE_RCU rte_rcu_log_type diff --git a/lib/regexdev/rte_regexdev.h b/lib/regexdev/rte_regexdev.h index a50b841b1e..b18a1d4251 100644 --- a/lib/regexdev/rte_regexdev.h +++ b/lib/regexdev/rte_regexdev.h @@ -194,10 +194,6 @@ * - rte_regexdev_dequeue_burst() */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -1428,6 +1424,10 @@ struct rte_regex_ops { #include "rte_regexdev_core.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. diff --git a/lib/ring/rte_ring.h b/lib/ring/rte_ring.h index c709f30497..11ca69c73d 100644 --- a/lib/ring/rte_ring.h +++ b/lib/ring/rte_ring.h @@ -34,13 +34,13 @@ * for more information. */ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - /** * Calculate the memory size needed for a ring * diff --git a/lib/ring/rte_ring_core.h b/lib/ring/rte_ring_core.h index 270869d214..222c5aeb3f 100644 --- a/lib/ring/rte_ring_core.h +++ b/lib/ring/rte_ring_core.h @@ -19,10 +19,6 @@ * instead. */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include @@ -38,6 +34,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_TAILQ_RING_NAME "RTE_RING" /** enqueue/dequeue behavior types */ diff --git a/lib/ring/rte_ring_elem.h b/lib/ring/rte_ring_elem.h index 7f7d4951d3..506f686884 100644 --- a/lib/ring/rte_ring_elem.h +++ b/lib/ring/rte_ring_elem.h @@ -16,10 +16,6 @@ * RTE Ring with user defined element size */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -699,6 +695,10 @@ rte_ring_dequeue_burst_elem(struct rte_ring *r, void *obj_table, #include +#ifdef __cplusplus +extern "C" { +#endif + #ifdef __cplusplus } #endif diff --git a/lib/ring/rte_ring_hts.h b/lib/ring/rte_ring_hts.h index 9a5938ac58..a41acea740 100644 --- a/lib/ring/rte_ring_hts.h +++ b/lib/ring/rte_ring_hts.h @@ -24,12 +24,12 @@ * To achieve that 64-bit CAS is used by head update routine. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Enqueue several objects on the HTS ring (multi-producers safe). * diff --git a/lib/ring/rte_ring_peek.h b/lib/ring/rte_ring_peek.h index c0621d12e2..2312f52668 100644 --- a/lib/ring/rte_ring_peek.h +++ b/lib/ring/rte_ring_peek.h @@ -43,12 +43,12 @@ * with enqueue(/dequeue) operation till _finish_ completes. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Start to enqueue several objects on the ring. * Note that no actual objects are put in the queue by this function, diff --git a/lib/ring/rte_ring_peek_zc.h b/lib/ring/rte_ring_peek_zc.h index 0b5e34b731..3254fe0481 100644 --- a/lib/ring/rte_ring_peek_zc.h +++ b/lib/ring/rte_ring_peek_zc.h @@ -67,12 +67,12 @@ * with enqueue/dequeue operation till _finish_ completes. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Ring zero-copy information structure. * diff --git a/lib/ring/rte_ring_rts.h b/lib/ring/rte_ring_rts.h index 50fc8f74db..d7a3863c83 100644 --- a/lib/ring/rte_ring_rts.h +++ b/lib/ring/rte_ring_rts.h @@ -51,12 +51,12 @@ * By default HTD_MAX == ring.capacity / 8. */ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /** * Enqueue several objects on the RTS ring (multi-producers safe). * diff --git a/lib/sched/rte_approx.h b/lib/sched/rte_approx.h index b60086330e..738e33a98b 100644 --- a/lib/sched/rte_approx.h +++ b/lib/sched/rte_approx.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_APPROX_H__ #define __INCLUDE_RTE_APPROX_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Rational Approximation @@ -20,6 +16,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Find best rational approximation * diff --git a/lib/sched/rte_pie.h b/lib/sched/rte_pie.h index 1477a47700..2a385ffdba 100644 --- a/lib/sched/rte_pie.h +++ b/lib/sched/rte_pie.h @@ -5,10 +5,6 @@ #ifndef __RTE_PIE_H_INCLUDED__ #define __RTE_PIE_H_INCLUDED__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * Proportional Integral controller Enhanced (PIE) @@ -20,6 +16,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_DQ_THRESHOLD 16384 /**< Queue length threshold (2^14) * to start measurement cycle (bytes) */ diff --git a/lib/sched/rte_red.h b/lib/sched/rte_red.h index afaa35fcd6..e62abb9295 100644 --- a/lib/sched/rte_red.h +++ b/lib/sched/rte_red.h @@ -5,10 +5,6 @@ #ifndef __RTE_RED_H_INCLUDED__ #define __RTE_RED_H_INCLUDED__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Random Early Detection (RED) @@ -20,6 +16,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_RED_SCALING 10 /**< Fraction size for fixed-point */ #define RTE_RED_S (1 << 22) /**< Packet size multiplied by number of leaf queues */ #define RTE_RED_MAX_TH_MAX 1023 /**< Max threshold limit in fixed point format */ diff --git a/lib/sched/rte_sched.h b/lib/sched/rte_sched.h index b882c4a882..222e6b3583 100644 --- a/lib/sched/rte_sched.h +++ b/lib/sched/rte_sched.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_SCHED_H__ #define __INCLUDE_RTE_SCHED_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Hierarchical Scheduler @@ -62,6 +58,10 @@ extern "C" { #include "rte_red.h" #include "rte_pie.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Maximum number of queues per pipe. * Note that the multiple queues (power of 2) can only be assigned to * lowest priority (best-effort) traffic class. Other higher priority traffic diff --git a/lib/sched/rte_sched_common.h b/lib/sched/rte_sched_common.h index 573d164569..a5acb9c08a 100644 --- a/lib/sched/rte_sched_common.h +++ b/lib/sched/rte_sched_common.h @@ -5,13 +5,13 @@ #ifndef __INCLUDE_RTE_SCHED_COMMON_H__ #define __INCLUDE_RTE_SCHED_COMMON_H__ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - #if 0 static inline uint32_t rte_min_pos_4_u16(uint16_t *x) diff --git a/lib/security/rte_security.h b/lib/security/rte_security.h index 1c8474b74f..7a9bafa0fa 100644 --- a/lib/security/rte_security.h +++ b/lib/security/rte_security.h @@ -12,10 +12,6 @@ * RTE Security Common Definitions */ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -24,6 +20,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** IPSec protocol mode */ enum rte_security_ipsec_sa_mode { RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT = 1, diff --git a/lib/security/rte_security_driver.h b/lib/security/rte_security_driver.h index 9bb5052a4c..2ceb145066 100644 --- a/lib/security/rte_security_driver.h +++ b/lib/security/rte_security_driver.h @@ -12,13 +12,13 @@ * RTE Security Common Definitions */ +#include +#include "rte_security.h" + #ifdef __cplusplus extern "C" { #endif -#include -#include "rte_security.h" - /** * @internal * Security session to be used by library for internal usage diff --git a/lib/stack/rte_stack.h b/lib/stack/rte_stack.h index 3325757568..4439adfc42 100644 --- a/lib/stack/rte_stack.h +++ b/lib/stack/rte_stack.h @@ -15,10 +15,6 @@ #ifndef _RTE_STACK_H_ #define _RTE_STACK_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -95,6 +91,10 @@ struct __rte_cache_aligned rte_stack { #include "rte_stack_std.h" #include "rte_stack_lf.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * Push several objects on the stack (MT-safe). * diff --git a/lib/table/rte_lru.h b/lib/table/rte_lru.h index 88229d8632..bc1ad36500 100644 --- a/lib/table/rte_lru.h +++ b/lib/table/rte_lru.h @@ -5,15 +5,15 @@ #ifndef __INCLUDE_RTE_LRU_H__ #define __INCLUDE_RTE_LRU_H__ -#ifdef __cplusplus -extern "C" { -#endif - #include #ifdef RTE_ARCH_X86_64 #include "rte_lru_x86.h" #elif defined(RTE_ARCH_ARM64) #include "rte_lru_arm64.h" + +#ifdef __cplusplus +extern "C" { +#endif #else #undef RTE_TABLE_HASH_LRU_STRATEGY #define RTE_TABLE_HASH_LRU_STRATEGY 1 @@ -86,8 +86,4 @@ do { \ #endif -#ifdef __cplusplus -} -#endif - #endif diff --git a/lib/table/rte_lru_arm64.h b/lib/table/rte_lru_arm64.h index f19b0bdb4e..f9a4678ee0 100644 --- a/lib/table/rte_lru_arm64.h +++ b/lib/table/rte_lru_arm64.h @@ -5,14 +5,14 @@ #ifndef __RTE_LRU_ARM64_H__ #define __RTE_LRU_ARM64_H__ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + #ifndef RTE_TABLE_HASH_LRU_STRATEGY #ifdef __ARM_NEON #define RTE_TABLE_HASH_LRU_STRATEGY 3 diff --git a/lib/table/rte_lru_x86.h b/lib/table/rte_lru_x86.h index ddfb8c1c8c..93f4a136a8 100644 --- a/lib/table/rte_lru_x86.h +++ b/lib/table/rte_lru_x86.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_LRU_X86_H__ #define __INCLUDE_RTE_LRU_X86_H__ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -97,8 +93,4 @@ do { \ #endif -#ifdef __cplusplus -} -#endif - #endif diff --git a/lib/table/rte_swx_hash_func.h b/lib/table/rte_swx_hash_func.h index 04f3d543e7..9c65cfa913 100644 --- a/lib/table/rte_swx_hash_func.h +++ b/lib/table/rte_swx_hash_func.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_HASH_FUNC_H__ #define __INCLUDE_RTE_SWX_HASH_FUNC_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Hash Function @@ -15,6 +11,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Hash function prototype * diff --git a/lib/table/rte_swx_keycmp.h b/lib/table/rte_swx_keycmp.h index 09fb1be869..b0ed819307 100644 --- a/lib/table/rte_swx_keycmp.h +++ b/lib/table/rte_swx_keycmp.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_KEYCMP_H__ #define __INCLUDE_RTE_SWX_KEYCMP_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Key Comparison Functions @@ -16,6 +12,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Key comparison function prototype * diff --git a/lib/table/rte_swx_table.h b/lib/table/rte_swx_table.h index ac01e19781..3c53459498 100644 --- a/lib/table/rte_swx_table.h +++ b/lib/table/rte_swx_table.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_TABLE_H__ #define __INCLUDE_RTE_SWX_TABLE_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Table @@ -21,6 +17,10 @@ extern "C" { #include "rte_swx_hash_func.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Match type. */ enum rte_swx_table_match_type { /** Wildcard Match (WM). */ diff --git a/lib/table/rte_swx_table_em.h b/lib/table/rte_swx_table_em.h index b7423dd060..592541f01f 100644 --- a/lib/table/rte_swx_table_em.h +++ b/lib/table/rte_swx_table_em.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_TABLE_EM_H__ #define __INCLUDE_RTE_SWX_TABLE_EM_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Exact Match Table @@ -16,6 +12,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** Exact match table operations - unoptimized. */ extern struct rte_swx_table_ops rte_swx_table_exact_match_unoptimized_ops; diff --git a/lib/table/rte_swx_table_learner.h b/lib/table/rte_swx_table_learner.h index c5ea015b8d..9a18be083d 100644 --- a/lib/table/rte_swx_table_learner.h +++ b/lib/table/rte_swx_table_learner.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_TABLE_LEARNER_H__ #define __INCLUDE_RTE_SWX_TABLE_LEARNER_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Learner Table @@ -53,6 +49,10 @@ extern "C" { #include "rte_swx_hash_func.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Maximum number of key timeout values per learner table. */ #ifndef RTE_SWX_TABLE_LEARNER_N_KEY_TIMEOUTS_MAX #define RTE_SWX_TABLE_LEARNER_N_KEY_TIMEOUTS_MAX 16 diff --git a/lib/table/rte_swx_table_selector.h b/lib/table/rte_swx_table_selector.h index 05863cc90b..ef29bdb6b0 100644 --- a/lib/table/rte_swx_table_selector.h +++ b/lib/table/rte_swx_table_selector.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_TABLE_SELECTOR_H__ #define __INCLUDE_RTE_SWX_TABLE_SELECTOR_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Selector Table @@ -21,6 +17,10 @@ extern "C" { #include "rte_swx_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Selector table creation parameters. */ struct rte_swx_table_selector_params { /** Group ID offset. */ diff --git a/lib/table/rte_swx_table_wm.h b/lib/table/rte_swx_table_wm.h index 4fd52c0a17..7eb6f8e2a6 100644 --- a/lib/table/rte_swx_table_wm.h +++ b/lib/table/rte_swx_table_wm.h @@ -4,10 +4,6 @@ #ifndef __INCLUDE_RTE_SWX_TABLE_WM_H__ #define __INCLUDE_RTE_SWX_TABLE_WM_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE SWX Wildcard Match Table @@ -16,6 +12,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** Wildcard match table operations. */ extern struct rte_swx_table_ops rte_swx_table_wildcard_match_ops; diff --git a/lib/table/rte_table.h b/lib/table/rte_table.h index 9a5faf0e32..43a5a1a7b3 100644 --- a/lib/table/rte_table.h +++ b/lib/table/rte_table.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_H__ #define __INCLUDE_RTE_TABLE_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table @@ -27,6 +23,10 @@ extern "C" { #include #include +#ifdef __cplusplus +extern "C" { +#endif + struct rte_mbuf; /** Lookup table statistics */ diff --git a/lib/table/rte_table_acl.h b/lib/table/rte_table_acl.h index 1cb7b9fbbd..61af7b88e4 100644 --- a/lib/table/rte_table_acl.h +++ b/lib/table/rte_table_acl.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_ACL_H__ #define __INCLUDE_RTE_TABLE_ACL_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table ACL @@ -25,6 +21,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** ACL table parameters */ struct rte_table_acl_params { /** Name */ diff --git a/lib/table/rte_table_array.h b/lib/table/rte_table_array.h index fad83b0588..b2a7b95d68 100644 --- a/lib/table/rte_table_array.h +++ b/lib/table/rte_table_array.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_ARRAY_H__ #define __INCLUDE_RTE_TABLE_ARRAY_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table Array @@ -20,6 +16,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Array table parameters */ struct rte_table_array_params { /** Number of array entries. Has to be a power of two. */ diff --git a/lib/table/rte_table_hash.h b/lib/table/rte_table_hash.h index 6698621dae..ff8fc9e9ce 100644 --- a/lib/table/rte_table_hash.h +++ b/lib/table/rte_table_hash.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_HASH_H__ #define __INCLUDE_RTE_TABLE_HASH_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table Hash @@ -52,6 +48,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Hash function */ typedef uint64_t (*rte_table_hash_op_hash)( void *key, diff --git a/lib/table/rte_table_hash_cuckoo.h b/lib/table/rte_table_hash_cuckoo.h index 3a55d28e9b..55aa12216a 100644 --- a/lib/table/rte_table_hash_cuckoo.h +++ b/lib/table/rte_table_hash_cuckoo.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_HASH_CUCKOO_H__ #define __INCLUDE_RTE_TABLE_HASH_CUCKOO_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table Hash Cuckoo @@ -20,6 +16,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Hash table parameters */ struct rte_table_hash_cuckoo_params { /** Name */ diff --git a/lib/table/rte_table_hash_func.h b/lib/table/rte_table_hash_func.h index aa779c2182..cba7ec4c20 100644 --- a/lib/table/rte_table_hash_func.h +++ b/lib/table/rte_table_hash_func.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_HASH_FUNC_H__ #define __INCLUDE_RTE_TABLE_HASH_FUNC_H__ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -18,6 +14,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + static inline uint64_t rte_crc32_u64(uint64_t crc, uint64_t v) { @@ -28,6 +28,10 @@ rte_crc32_u64(uint64_t crc, uint64_t v) #include "rte_table_hash_func_arm64.h" #else +#ifdef __cplusplus +extern "C" { +#endif + static inline uint64_t rte_crc32_u64(uint64_t crc, uint64_t v) { diff --git a/lib/table/rte_table_lpm.h b/lib/table/rte_table_lpm.h index dde32deed9..59b9bdee89 100644 --- a/lib/table/rte_table_lpm.h +++ b/lib/table/rte_table_lpm.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_LPM_H__ #define __INCLUDE_RTE_TABLE_LPM_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table LPM for IPv4 @@ -45,6 +41,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** LPM table parameters */ struct rte_table_lpm_params { /** Table name */ diff --git a/lib/table/rte_table_lpm_ipv6.h b/lib/table/rte_table_lpm_ipv6.h index 96ddbd32c2..166a5ba9ee 100644 --- a/lib/table/rte_table_lpm_ipv6.h +++ b/lib/table/rte_table_lpm_ipv6.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_LPM_IPV6_H__ #define __INCLUDE_RTE_TABLE_LPM_IPV6_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table LPM for IPv6 @@ -45,6 +41,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_LPM_IPV6_ADDR_SIZE 16 /** LPM table parameters */ diff --git a/lib/table/rte_table_stub.h b/lib/table/rte_table_stub.h index 846526ea99..f7e589df16 100644 --- a/lib/table/rte_table_stub.h +++ b/lib/table/rte_table_stub.h @@ -5,10 +5,6 @@ #ifndef __INCLUDE_RTE_TABLE_STUB_H__ #define __INCLUDE_RTE_TABLE_STUB_H__ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * RTE Table Stub @@ -18,6 +14,10 @@ extern "C" { #include "rte_table.h" +#ifdef __cplusplus +extern "C" { +#endif + /** Stub table parameters: NONE */ /** Stub table operations */ diff --git a/lib/telemetry/rte_telemetry.h b/lib/telemetry/rte_telemetry.h index cab9daa6fe..463819e2bf 100644 --- a/lib/telemetry/rte_telemetry.h +++ b/lib/telemetry/rte_telemetry.h @@ -5,14 +5,14 @@ #ifndef _RTE_TELEMETRY_H_ #define _RTE_TELEMETRY_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** Maximum length for string used in object. */ #define RTE_TEL_MAX_STRING_LEN 128 /** Maximum length of string. */ diff --git a/lib/vhost/rte_vdpa.h b/lib/vhost/rte_vdpa.h index 6ac85d1bbf..18e273c20f 100644 --- a/lib/vhost/rte_vdpa.h +++ b/lib/vhost/rte_vdpa.h @@ -5,10 +5,6 @@ #ifndef _RTE_VDPA_H_ #define _RTE_VDPA_H_ -#ifdef __cplusplus -extern "C" { -#endif - /** * @file * @@ -17,6 +13,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + /** Maximum name length for statistics counters */ #define RTE_VDPA_STATS_NAME_SIZE 64 diff --git a/lib/vhost/rte_vhost.h b/lib/vhost/rte_vhost.h index b0434c4b8d..c7a5f56df8 100644 --- a/lib/vhost/rte_vhost.h +++ b/lib/vhost/rte_vhost.h @@ -18,10 +18,6 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - #ifndef __cplusplus /* These are not C++-aware. */ #include @@ -29,6 +25,10 @@ extern "C" { #include #endif +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_VHOST_USER_CLIENT (1ULL << 0) #define RTE_VHOST_USER_NO_RECONNECT (1ULL << 1) #define RTE_VHOST_USER_RESERVED_1 (1ULL << 2) diff --git a/lib/vhost/rte_vhost_async.h b/lib/vhost/rte_vhost_async.h index 8f190dd44b..60995e4e62 100644 --- a/lib/vhost/rte_vhost_async.h +++ b/lib/vhost/rte_vhost_async.h @@ -5,15 +5,15 @@ #ifndef _RTE_VHOST_ASYNC_H_ #define _RTE_VHOST_ASYNC_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include +#ifdef __cplusplus +extern "C" { +#endif + /** * Register an async channel for a vhost queue * diff --git a/lib/vhost/rte_vhost_crypto.h b/lib/vhost/rte_vhost_crypto.h index f962a53818..af61f0907e 100644 --- a/lib/vhost/rte_vhost_crypto.h +++ b/lib/vhost/rte_vhost_crypto.h @@ -5,12 +5,12 @@ #ifndef _VHOST_CRYPTO_H_ #define _VHOST_CRYPTO_H_ +#include + #ifdef __cplusplus extern "C" { #endif -#include - /* pre-declare structs to avoid including full headers */ struct rte_mempool; struct rte_crypto_op; diff --git a/lib/vhost/vdpa_driver.h b/lib/vhost/vdpa_driver.h index 8db4ab9f4d..42392a0d14 100644 --- a/lib/vhost/vdpa_driver.h +++ b/lib/vhost/vdpa_driver.h @@ -5,10 +5,6 @@ #ifndef _VDPA_DRIVER_H_ #define _VDPA_DRIVER_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include @@ -16,6 +12,10 @@ extern "C" { #include "rte_vhost.h" #include "rte_vdpa.h" +#ifdef __cplusplus +extern "C" { +#endif + #define RTE_VHOST_QUEUE_ALL UINT16_MAX /** From patchwork Wed Sep 18 09:04:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144244 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 96DF6459C6; Wed, 18 Sep 2024 11:14:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7313242E57; Wed, 18 Sep 2024 11:14:11 +0200 (CEST) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2044.outbound.protection.outlook.com [40.107.104.44]) by mails.dpdk.org (Postfix) with ESMTP id 3599B4025C for ; Wed, 18 Sep 2024 11:14:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XABxzAutX9oBdtirPEtytqU4pRhyyj6TyZZIf1k6TFC4UclvFm1UdHTl6aVh92qbqCLKjdhAPvjqDtqMy2ycR1M/Qcakpy3vGvBRpjGLejo0fXtJg9r5XyAsn7tEqDPPFAuppUXycSilTQaPhMXtcj0SOXNc0kZES2siIXlutgtnxi/4q87Z2220MN4QRsOWNydbCmLZBC7QJf3Gj9k8Tm5brVj8LhJ/2g1f74Ha7XZ46eHi5HGWH3ac3qaopLgdIpMGGn1wYoNLf0Rx8jJauXmZ+6wNGYPwj6CQWEAMvk+XKFDY/6gbcMoZYpmQVDmCUMN4PHL06hifrHOfdzUK/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5UKgQdVaciDeShGgGbM6oo5b5b9ozFm128R5ONKGWa0=; b=egwSnYRPcFTmDtEEohOCX98xMrsIZlKiq0dakiTN3zCL75baKseGgGVOrJkeBcbyl2gy8Cq7dRhUECC58Rs5k9bQkHD8k/EnSCwhC9TKu/eACtLoOGAPnWO527kIxNY0nIomxdNl/LzRM5ZNVg1DrEEp5bWmA8gv8GhUl7qapcIzseLhzVBeRpkTLlizIn55twpWasj9NdM+sJcaoF2n+cVOW5B4Db/u3zEfy1JVXWZDNF/37OWBLqfFrROCjQNhX/FV8vuQWVoimaPk+7DIN2+l9O5Tdp3rSOjjzSAFJIJFvIOFF6wIE9zU+ehJS88IZnPTkR1ShfHUhKvx7oKpxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5UKgQdVaciDeShGgGbM6oo5b5b9ozFm128R5ONKGWa0=; b=yR6Ry8OnDI8IW9om/56Eug5tbcnBY5Wc0Vu9Z7z2XvaGvj0Tq79RM4b7dQ2mx35+iizTn4lbbjX/jwgsdJ4ZgmMnRd83FHE2nnGWdrHtBWVU6AnN6N3qTiKzeLUMM6AMQzgUeWdCCvAlmd5TD034cTHXm/Ku7RgwYN3Nt3DqmC7ldDNc/9hIQz/ES11W12MQEQFzMAZAhVhf+hHd83hPj9IosD07YJ4yQejL5OCHZl3K3zWb6eKXPIXVBC1I1AX9oxixSPUvCJ2ItDb/mf4WoY3puwFZ/Mm+7JS/VJ6Nl7fUqQ4LQcs1QopfM7d9s4yv9Vil6Q/AyTpZFlW3Qa8YLw== Received: from AS4P189CA0041.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5dd::15) by PR3PR07MB6602.eurprd07.prod.outlook.com (2603:10a6:102:66::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.24; Wed, 18 Sep 2024 09:14:03 +0000 Received: from AM4PEPF00027A5D.eurprd04.prod.outlook.com (2603:10a6:20b:5dd:cafe::d5) by AS4P189CA0041.outlook.office365.com (2603:10a6:20b:5dd::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.30 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by AM4PEPF00027A5D.mail.protection.outlook.com (10.167.16.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.62) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id 14A21380061; Wed, 18 Sep 2024 11:14:03 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 2/6] eal: extend bit manipulation functionality Date: Wed, 18 Sep 2024 11:04:41 +0200 Message-ID: <20240918090445.725283-3-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM4PEPF00027A5D:EE_|PR3PR07MB6602:EE_ X-MS-Office365-Filtering-Correlation-Id: cd4e618d-d901-4eb2-fe06-08dcd7c23d96 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?KzXLeQGk87CY6K/+HgmbHhrN45AZ40S?= =?utf-8?q?oDKwMrTuYyr54TQme38updQD/CIY2tW+L0uncYnESAKlz8ry0brDcRGM3WanU9NNe?= =?utf-8?q?Ce71EZefeXl8dRndWEJS31orB2RW6hTOKIN79TyyapLiUY8oG7UEvrarrmufNgsZM?= =?utf-8?q?R6qgUwQ5dioyiFsVANROfd3x09Q06gdgmljjrGcxF4TAPkAy9B0MsbuhZ2ywwNMFx?= =?utf-8?q?DZJdUv/bDfTkGkfObUuFndaUBGPUWo0I+on0CqpmRXN51nh7hQQ94LPnc2BXsoqBL?= =?utf-8?q?/htlO05TYd5X2EQ5C7JabcQjMUV5DgWPrJ5QpF9pjVIg16RIkOwKXktX7nKtSZ/t/?= =?utf-8?q?vZFF8oB9fCCKw9fIbqTv8qcjYwdZecWLtsoJk98psjW/oTp9v17wo7gT6avjLTJdr?= =?utf-8?q?l8mKqJdqUPGgNfw3AbmEejzOh/8RSBwbBEDd1J1qI8ASawnyLMVUWTmoUYKm9x9DG?= =?utf-8?q?zHyZ92LchibbxrUsoIdKNqZJAETGTgy3FMalHvyQy2UExJvOiWw7OuCqOZD21Uk4+?= =?utf-8?q?FbKT5xq64Nr7pu32bKc9+coIKhkXcsLcOY0raU0kpf0ExLKXjULbPjKqFxbJaKIoq?= =?utf-8?q?PbfnQMHziq5nYR2whkQdoW5ChLZGVqmSYoHfXQ1Ft1m3ZXpIHJtixQ+xdbxRBQsLk?= =?utf-8?q?ne8Hut9JPT65RDCWsBCI7QIogljLmbwT+VUU55Qp9VisQxRb0u0O1L03RjqMCeBcW?= =?utf-8?q?1R3yRps+yqlhEPzh07ZHsorm6bgr9+wK5BhyW9i6UuuUqDgn7/owbfyhffm0vICgD?= =?utf-8?q?M9mOIVg9hOzoztJFrB9atnfIYpKAl0lWevqe84psHbQl8eR02RcZGorzYKuqrTPH5?= =?utf-8?q?I5WevkNvzBG8pvJTLYiNmeZa+zNeDhrjP1BUVlW1vRHz61F9eBHL3ycS6/NbOE+D4?= =?utf-8?q?1yK6QUi9vwYBclntTyObQz3xaJXi4AaTRh1fQrlBs0qRNN879PFbNe1JpBg8elPff?= =?utf-8?q?7jQp8IZ4rdBiVlGuok0Yk2qeGSei2VgZk2+eAb1EeHheQT9kSxvShezYVA+pIAZl2?= =?utf-8?q?nI1jRkcl3BfLPTm/Sk+Kyfzl0psVBurc1YAHYhqvgZ56CCzcSvEh+kGgOFVxF1u6M?= =?utf-8?q?E31PBSrFfcVSO9XOHE+7wPuRJnRRiS81F1LpoXJAO1m7TWvq/FVx0UHLPm+O0z6HN?= =?utf-8?q?zUr1kbayjswSlHVZlQwDb/JNDCYnbxSF5TfaSrXCdsie7tvvi0KGfV/8ufMZvDhsm?= =?utf-8?q?rQeDC7rwUQhb97PFB4tFufd5knnTJ6qLcwiB87tfUy4Keyn33v4/2EEjuX2Fa5g+d?= =?utf-8?q?uwUaECSGt+IJmdBWTGVs77fyW9OLhHy3aj9sKKTjl0KmcNi4jQ6+as/BaPCC4z6xa?= =?utf-8?q?7GlHvkhyhhe6?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:03.6075 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cd4e618d-d901-4eb2-fe06-08dcd7c23d96 X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00027A5D.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR07MB6602 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add functionality to test and modify the value of individual bits in 32-bit or 64-bit words. These functions have no implications on memory ordering, atomicity and does not use volatile and thus does not prevent any compiler optimizations. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup Acked-by: Tyler Retzlaff Acked-by: Jack Bond-Preston --- PATCH v3: * Remove unnecessary include. * Remove redundant 'fun' parameter from the __RTE_GEN_BIT_*() macros (Jack Bond-Preston). * Introduce __RTE_BIT_BIT_OPS() macro, consistent with how things are done when generating the atomic bit operations. * Refer to volatile bit op functions as variants instead of families (macro parameter naming). RFC v6: * Have rte_bit_test() accept const-marked bitsets. RFC v4: * Add rte_bit_flip() which, believe it or not, flips the value of a bit. * Mark macro-generated private functions as experimental. * Use macros to generate *assign*() functions. RFC v3: * Work around lack of C++ support for _Generic (Tyler Retzlaff). * Fix ','-related checkpatch warnings. --- lib/eal/include/rte_bitops.h | 260 ++++++++++++++++++++++++++++++++++- 1 file changed, 258 insertions(+), 2 deletions(-) diff --git a/lib/eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h index 449565eeae..6915b945ba 100644 --- a/lib/eal/include/rte_bitops.h +++ b/lib/eal/include/rte_bitops.h @@ -2,6 +2,7 @@ * Copyright(c) 2020 Arm Limited * Copyright(c) 2010-2019 Intel Corporation * Copyright(c) 2023 Microsoft Corporation + * Copyright(c) 2024 Ericsson AB */ #ifndef _RTE_BITOPS_H_ @@ -11,12 +12,14 @@ * @file * Bit Operations * - * This file defines a family of APIs for bit operations - * without enforcing memory ordering. + * This file provides functionality for low-level, single-word + * arithmetic and bit-level operations, such as counting or + * setting individual bits. */ #include +#include #include #ifdef __cplusplus @@ -105,6 +108,197 @@ extern "C" { #define RTE_FIELD_GET64(mask, reg) \ ((typeof(mask))(((reg) & (mask)) >> rte_ctz64(mask))) +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Test bit in word. + * + * Generic selection macro to test the value of a bit in a 32-bit or + * 64-bit word. The type of operation depends on the type of the @c + * addr parameter. + * + * This macro does not give any guarantees in regards to memory + * ordering or atomicity. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + */ +#define rte_bit_test(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_test32, \ + const uint32_t *: __rte_bit_test32, \ + uint64_t *: __rte_bit_test64, \ + const uint64_t *: __rte_bit_test64)(addr, nr) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Set bit in word. + * + * Generic selection macro to set a bit in a 32-bit or 64-bit + * word. The type of operation depends on the type of the @c addr + * parameter. + * + * This macro does not give any guarantees in regards to memory + * ordering or atomicity. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + */ +#define rte_bit_set(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_set32, \ + uint64_t *: __rte_bit_set64)(addr, nr) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Clear bit in word. + * + * Generic selection macro to clear a bit in a 32-bit or 64-bit + * word. The type of operation depends on the type of the @c addr + * parameter. + * + * This macro does not give any guarantees in regards to memory + * ordering or atomicity. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + */ +#define rte_bit_clear(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_clear32, \ + uint64_t *: __rte_bit_clear64)(addr, nr) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Assign a value to a bit in word. + * + * Generic selection macro to assign a value to a bit in a 32-bit or 64-bit + * word. The type of operation depends on the type of the @c addr parameter. + * + * This macro does not give any guarantees in regards to memory + * ordering or atomicity. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param value + * The new value of the bit - true for '1', or false for '0'. + */ +#define rte_bit_assign(addr, nr, value) \ + _Generic((addr), \ + uint32_t *: __rte_bit_assign32, \ + uint64_t *: __rte_bit_assign64)(addr, nr, value) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Flip a bit in word. + * + * Generic selection macro to change the value of a bit to '0' if '1' + * or '1' if '0' in a 32-bit or 64-bit word. The type of operation + * depends on the type of the @c addr parameter. + * + * This macro does not give any guarantees in regards to memory + * ordering or atomicity. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + */ +#define rte_bit_flip(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_flip32, \ + uint64_t *: __rte_bit_flip64)(addr, nr) + +#define __RTE_GEN_BIT_TEST(variant, qualifier, size) \ + __rte_experimental \ + static inline bool \ + __rte_bit_ ## variant ## test ## size(const qualifier uint ## size ## _t *addr, \ + unsigned int nr) \ + { \ + RTE_ASSERT(nr < size); \ + \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + return *addr & mask; \ + } + +#define __RTE_GEN_BIT_SET(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_ ## variant ## set ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr) \ + { \ + RTE_ASSERT(nr < size); \ + \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + *addr |= mask; \ + } \ + +#define __RTE_GEN_BIT_CLEAR(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr) \ + { \ + RTE_ASSERT(nr < size); \ + \ + uint ## size ## _t mask = ~((uint ## size ## _t)1 << nr); \ + (*addr) &= mask; \ + } \ + +#define __RTE_GEN_BIT_ASSIGN(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_ ## variant ## assign ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, bool value) \ + { \ + if (value) \ + __rte_bit_ ## variant ## set ## size(addr, nr); \ + else \ + __rte_bit_ ## variant ## clear ## size(addr, nr); \ + } + +#define __RTE_GEN_BIT_FLIP(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr) \ + { \ + bool value; \ + \ + value = __rte_bit_ ## variant ## test ## size(addr, nr); \ + __rte_bit_ ## variant ## assign ## size(addr, nr, !value); \ + } + +#define __RTE_GEN_BIT_OPS(v, qualifier, size) \ + __RTE_GEN_BIT_TEST(v, qualifier, size) \ + __RTE_GEN_BIT_SET(v, qualifier, size) \ + __RTE_GEN_BIT_CLEAR(v, qualifier, size) \ + __RTE_GEN_BIT_ASSIGN(v, qualifier, size) \ + __RTE_GEN_BIT_FLIP(v, qualifier, size) + +#define __RTE_GEN_BIT_OPS_SIZE(size) \ + __RTE_GEN_BIT_OPS(,, size) + +__RTE_GEN_BIT_OPS_SIZE(32) +__RTE_GEN_BIT_OPS_SIZE(64) + /*------------------------ 32-bit relaxed operations ------------------------*/ /** @@ -787,6 +981,68 @@ rte_log2_u64(uint64_t v) #ifdef __cplusplus } + +/* + * Since C++ doesn't support generic selection (i.e., _Generic), + * function overloading is used instead. Such functions must be + * defined outside 'extern "C"' to be accepted by the compiler. + */ + +#undef rte_bit_test +#undef rte_bit_set +#undef rte_bit_clear +#undef rte_bit_assign +#undef rte_bit_flip + +#define __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, size, arg1_type, arg1_name) \ + static inline void \ + rte_bit_ ## fun(qualifier uint ## size ## _t *addr, \ + arg1_type arg1_name) \ + { \ + __rte_bit_ ## fun ## size(addr, arg1_name); \ + } + +#define __RTE_BIT_OVERLOAD_2(fun, qualifier, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, 32, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, 64, arg1_type, arg1_name) + +#define __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, size, ret_type, arg1_type, \ + arg1_name) \ + static inline ret_type \ + rte_bit_ ## fun(qualifier uint ## size ## _t *addr, \ + arg1_type arg1_name) \ + { \ + return __rte_bit_ ## fun ## size(addr, arg1_name); \ + } + +#define __RTE_BIT_OVERLOAD_2R(fun, qualifier, ret_type, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, 32, ret_type, arg1_type, \ + arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, 64, ret_type, arg1_type, \ + arg1_name) + +#define __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, size, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + static inline void \ + rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ + arg2_type arg2_name) \ + { \ + __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name); \ + } + +#define __RTE_BIT_OVERLOAD_3(fun, qualifier, arg1_type, arg1_name, arg2_type, \ + arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, 32, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, 64, arg1_type, arg1_name, \ + arg2_type, arg2_name) + +__RTE_BIT_OVERLOAD_2R(test, const, bool, unsigned int, nr) +__RTE_BIT_OVERLOAD_2(set,, unsigned int, nr) +__RTE_BIT_OVERLOAD_2(clear,, unsigned int, nr) +__RTE_BIT_OVERLOAD_3(assign,, unsigned int, nr, bool, value) +__RTE_BIT_OVERLOAD_2(flip,, unsigned int, nr) + #endif #endif /* _RTE_BITOPS_H_ */ From patchwork Wed Sep 18 09:04:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144245 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id 869DD459C6; Wed, 18 Sep 2024 11:14:27 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EADE542F1F; Wed, 18 Sep 2024 11:14:12 +0200 (CEST) Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2087.outbound.protection.outlook.com [40.107.105.87]) by mails.dpdk.org (Postfix) with ESMTP id 5F1C142DE4 for ; Wed, 18 Sep 2024 11:14:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WlDM6/BOIFTVviu/qoPjVem47pEbwyHkYwi2TCzqEtEVrT+59l02pTMgAFIu9PZa1P5ui4isZNu3zuFOCsnQGkh9veGPM3iiTGK536aq0mrguY2CPR9Y5YzYvvHZRdL+mb0UbFo+bfa7UmsiOlBQSf0vecRNkKXiF/4tYmsbjD8MoqCHyIXnN8LNTSa0SLd3lNOVdq+b8e8ZNvEaWArTmlOhUMtKeZRfIJW2E9DjeHMzysPUWu3SmbuFnwfjrfvLrIK5CdzkOo3he540f4fiHphT+QC0aUJrXVAeNxovPXKIiFp8iOfylKW93lK+GKj1ErYLHVAFarhAbrjD74e1wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eDPlkPzDFJtO4sz7hZmX4OJ9OYhBCG/rC8QsdOd5aoo=; b=M5oZDTVTroYYR8V7/5Wqm14VmrCmeX+OawILCNJnE9S92Jr1UGuDI0vo0dDpL3LJqDgKCkxHKBz6ROFHxoTvCJP3tVQadvDWft41DVWhFafh+RNiIUry3ZQxAD/npXpHntgAx/Ed/6HaS2lYMJ2BmFdiZ0TJhZa7axhwz/MU7+lxpVC2yaP8S9fuhDAF75PNOcV7eBHb9KXD7jlKVKkEddQ+6XrlOmLlx36Y0VIYmInHbrK0TK5SdhkvOOdvSx0FqdE2HbZJ9EnA2/MLOiBc7uU8zdpSogSehDWJs2FuEID7KEgObpzyF/4McRM+rKIPJhxvtFmJ3eGuCX4q7ChD5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eDPlkPzDFJtO4sz7hZmX4OJ9OYhBCG/rC8QsdOd5aoo=; b=LkJOqiplnLzyJGd2QzlGcveyPMkl68zckGT5+cbsWKgTRzwT+eKM5HvVkOSOS0xTHvzSMg719tHCzxO8wE80q+viSYWeiqfci/F8WNtvgRHfxL8jJiQP+s81fBe9dot4bxWKuX4E9yidNHTlZe80mudLW/nZ8z965yrTVTr3o4GBn0KD20g/JDfvzkjn1aGXBMTdv7h/P1t47j2UjfMCxkvUBqhOchB3r/clRWN4iRd0h9U3b+oQoxzJ1135WzA3ee1uZdfJ5ftAeZPLtr3e3m1TsKmhs4e4Az8KMzt9L3sdrUAvF97tlLXnZxEAaUf0xwR78GkBxueQ05k7ISvglQ== Received: from DU7P195CA0001.EURP195.PROD.OUTLOOK.COM (2603:10a6:10:54d::15) by DBAPR07MB6566.eurprd07.prod.outlook.com (2603:10a6:10:180::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.24; Wed, 18 Sep 2024 09:14:03 +0000 Received: from DU2PEPF00028D0B.eurprd03.prod.outlook.com (2603:10a6:10:54d:cafe::4a) by DU7P195CA0001.outlook.office365.com (2603:10a6:10:54d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.25 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by DU2PEPF00028D0B.mail.protection.outlook.com (10.167.242.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.66) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id 27DEA38007A; Wed, 18 Sep 2024 11:14:03 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 3/6] eal: add unit tests for bit operations Date: Wed, 18 Sep 2024 11:04:42 +0200 Message-ID: <20240918090445.725283-4-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D0B:EE_|DBAPR07MB6566:EE_ X-MS-Office365-Filtering-Correlation-Id: ae6ef2c2-aaca-4694-d309-08dcd7c23dae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|1800799024|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?q?Xxy9nUdXX3+PCELYqIEUWp3AXnmy5NZ?= =?utf-8?q?mSqDEfBF20kj45A6lqB85SyfqoJ/QK+gLLKTOhLba1v2O4Edt/9Hd3wyo+DZxd22V?= =?utf-8?q?docgEFkwY7LwHwDgZEFapJOrCP4tURsQyjCTfpcAK07RQ/7mKprpvmtCk+ZHlpXE+?= =?utf-8?q?F4fVW8kYucl88KIr+Szv430E3bavey8EgCjvi/7+/o+hVB55LQoZQPXN4gNp9UQ5g?= =?utf-8?q?r8n4yLj5NUZPnpt2orueuNZXMntEFDGt7Qo3DCMsQGtJsdFzJZJurThv/7CgrW1r/?= =?utf-8?q?sj06OopAxhcx6ILFLQFO24g2EspJthEELS/gEcN4x2REXshyaKcvp6m6v47Zt7w+R?= =?utf-8?q?1uAvMgrPAR9zz0KTxAwLhnQ/vRW/FYAuaHEFnN9U8PDdd88B++pQCJC+DHm4vCSti?= =?utf-8?q?WZDLn1IXBTTMAzg3DWB/ULlHi3T2UFz31TegHJWsjRCTHqnECi15j12h0+j+ykQVZ?= =?utf-8?q?1lh2Vw5x2286FO7IxjLd1HclriX3SK6C+FAVaHukPlgO6zyvCGaZ7idPXUAKdiv+o?= =?utf-8?q?pRCYswMnY7r6pe/C4zaLEE5YrZrWBbqlf7+rfC9FZUjc1jl1S2DW8RxLFPVFZLRZI?= =?utf-8?q?rOVgM8i04mP5pxNgahQFqP0KdT2ZT04VNHV6GMnIl4qDRKxBjQZqrvTTr1YKKjBs8?= =?utf-8?q?wRkNc7Mw3VluOvjZ3aZ5pnRcCPoh7o/TIJdYaYpsWt9qbOgH8Bo5+Co9JpxDz9h2I?= =?utf-8?q?mOEfG44gR5XLw7KIRJBAHLW62lzR0CuOaTBbAUw4ND9xM2xKL2uFlz1Ob7lUXys82?= =?utf-8?q?dhIiviD4zFSp2PQNpANxRVRFO+BN1o+JpXjzbxJLEbLLzpVJV54PpS7+yWAdpEHMJ?= =?utf-8?q?8k08P1w2iFJK0ImvRzZFa7lrSCOPuR1MCAYL4GmRfqcjgPCDhBMIX2kwM7rjjOxP0?= =?utf-8?q?fr7F4OXffM4O1QVXzo5uWQIpmVLs0ucOztb2XJbKUeJEMzOQz9EvoVpwngeBgNIf4?= =?utf-8?q?ZZK0YmfekDguhWiHNHDXr5KyUbG7iHrOHZvQqvAvwMJqPnhS8cjPz+7AvDX6IuB68?= =?utf-8?q?MzdoEX5LWKJ/g1Py/FlCo9ZrobooNMZOnRxjapyYQd0y7k9OKqi62qfhwDN1DjbZR?= =?utf-8?q?gfSELnQ1I+NTLydYUJN+O45ozE2GzClaJ/Vk7FCpFgqZOvMFUtNcMiFW39/A0xw3E?= =?utf-8?q?youv6lQx6Is58eO0x/uCS+mDdV5jmUyhx2Vym+vjMRWSsL6m3OVNs0ZRJhYuOeogp?= =?utf-8?q?FT7WrnpwLBvkX2IIJc5zx/1YhEWDJCeqAim70XLJpipQrGKtsJKEeYA/tof/RozSb?= =?utf-8?q?gRBYSarTWHsJ+INdnS2bLCq5pkvLi6JdI/cUgmWcUGzQtP4JFxPucIQY=3D?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(82310400026)(1800799024)(376014)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:03.7325 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae6ef2c2-aaca-4694-d309-08dcd7c23dae X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028D0B.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR07MB6566 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Extend bitops tests to cover the rte_bit_[test|set|clear|assign|flip]() functions. The tests are converted to use the test suite runner framework. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup Acked-by: Tyler Retzlaff Acked-by: Jack Bond-Preston --- RFC v6: * Test rte_bit_*test() usage through const pointers. RFC v4: * Remove redundant line continuations. --- app/test/test_bitops.c | 85 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 15 deletions(-) diff --git a/app/test/test_bitops.c b/app/test/test_bitops.c index 0d4ccfb468..322f58c066 100644 --- a/app/test/test_bitops.c +++ b/app/test/test_bitops.c @@ -1,13 +1,68 @@ /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2019 Arm Limited + * Copyright(c) 2024 Ericsson AB */ +#include + #include #include +#include #include "test.h" -uint32_t val32; -uint64_t val64; +#define GEN_TEST_BIT_ACCESS(test_name, set_fun, clear_fun, assign_fun, \ + flip_fun, test_fun, size) \ + static int \ + test_name(void) \ + { \ + uint ## size ## _t reference = (uint ## size ## _t)rte_rand(); \ + unsigned int bit_nr; \ + uint ## size ## _t word = (uint ## size ## _t)rte_rand(); \ + \ + for (bit_nr = 0; bit_nr < size; bit_nr++) { \ + bool reference_bit = (reference >> bit_nr) & 1; \ + bool assign = rte_rand() & 1; \ + if (assign) \ + assign_fun(&word, bit_nr, reference_bit); \ + else { \ + if (reference_bit) \ + set_fun(&word, bit_nr); \ + else \ + clear_fun(&word, bit_nr); \ + \ + } \ + TEST_ASSERT(test_fun(&word, bit_nr) == reference_bit, \ + "Bit %d had unexpected value", bit_nr); \ + flip_fun(&word, bit_nr); \ + TEST_ASSERT(test_fun(&word, bit_nr) != reference_bit, \ + "Bit %d had unflipped value", bit_nr); \ + flip_fun(&word, bit_nr); \ + \ + const uint ## size ## _t *const_ptr = &word; \ + TEST_ASSERT(test_fun(const_ptr, bit_nr) == \ + reference_bit, \ + "Bit %d had unexpected value", bit_nr); \ + } \ + \ + for (bit_nr = 0; bit_nr < size; bit_nr++) { \ + bool reference_bit = (reference >> bit_nr) & 1; \ + TEST_ASSERT(test_fun(&word, bit_nr) == reference_bit, \ + "Bit %d had unexpected value", bit_nr); \ + } \ + \ + TEST_ASSERT(reference == word, "Word had unexpected value"); \ + \ + return TEST_SUCCESS; \ + } + +GEN_TEST_BIT_ACCESS(test_bit_access32, rte_bit_set, rte_bit_clear, + rte_bit_assign, rte_bit_flip, rte_bit_test, 32) + +GEN_TEST_BIT_ACCESS(test_bit_access64, rte_bit_set, rte_bit_clear, + rte_bit_assign, rte_bit_flip, rte_bit_test, 64) + +static uint32_t val32; +static uint64_t val64; #define MAX_BITS_32 32 #define MAX_BITS_64 64 @@ -117,22 +172,22 @@ test_bit_relaxed_test_set_clear(void) return TEST_SUCCESS; } +static struct unit_test_suite test_suite = { + .suite_name = "Bitops test suite", + .unit_test_cases = { + TEST_CASE(test_bit_access32), + TEST_CASE(test_bit_access64), + TEST_CASE(test_bit_relaxed_set), + TEST_CASE(test_bit_relaxed_clear), + TEST_CASE(test_bit_relaxed_test_set_clear), + TEST_CASES_END() + } +}; + static int test_bitops(void) { - val32 = 0; - val64 = 0; - - if (test_bit_relaxed_set() < 0) - return TEST_FAILED; - - if (test_bit_relaxed_clear() < 0) - return TEST_FAILED; - - if (test_bit_relaxed_test_set_clear() < 0) - return TEST_FAILED; - - return TEST_SUCCESS; + return unit_test_suite_runner(&test_suite); } REGISTER_FAST_TEST(bitops_autotest, true, true, test_bitops); From patchwork Wed Sep 18 09:04:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144248 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id E4B6C44191; Wed, 18 Sep 2024 11:15:05 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1F8D942FAD; Wed, 18 Sep 2024 11:14:18 +0200 (CEST) Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2064.outbound.protection.outlook.com [40.107.249.64]) by mails.dpdk.org (Postfix) with ESMTP id 8882B42F1F for ; Wed, 18 Sep 2024 11:14:12 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SY/ZEQEO9EwVuIhcwy7FrNkkRfn6z7RDcob2eye5LDq7xZyoY1grvDHSuv8juSJEwILieX55DQ8PShhjaeDiW9qngEZfglhV2iH6f/Ppko8OmRsPWWP4b4ufzNQ5G36quACKT+eP/qoutz126xfTBnFa9advZHOWwM9srIIO0sJkP8mkXmCSCksHWTjRmiqB0gk3PsO00ZhrI0ZQcytSvcoHnkyNV8MPDheDjS5MURq82BP6xG72YSFEZi+2rnN+96q2I4l7tG9o5E/aXRquVODGktmPXk3Enq+OhZiAqKBfVQ1WM/9KPz2zzmutH3M9LBcK1n/Y4LmdxlCSNLwB0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f1GVgNVv8UHqCUFk9HxcWAxSXvibN/FETLdhUNajtSQ=; b=K2WaE5z9yzg5hJgMhHbE95Lt3Air7RPF9LVnshHD4DJ/PzjzULhjTpnmok4XUGJswsY1gAG6oqqkNSb4k/n9ONVxw9Ic4He818/pY7FcjJAnOBYW/BLai/hc3G/9x/5zJXTWpbZdHtyqLD8nyFCGxybMflmlbzk9fE8nx1e3SMqZ1j/nS56+w8yd+KcKEqCNfpMKnr2Qmqzmpxi10xnbfuW5BjWDpU7oY+dMVqP4F5o+c7F2dxfvVJqe5xoHilJEe2gW4uBrHMS5Z+YJowId3MJYLb+embKIySwGGDG2JxerICq+c0zp7rvziaHjpcMdb2icGk+emeaWreual4XdQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f1GVgNVv8UHqCUFk9HxcWAxSXvibN/FETLdhUNajtSQ=; b=Ew5P0rDWa/VIehjHqrZLphsmIYWVG6rekI2pZgGIrViaCZPiGof5iFOUkcnHJZV9D2Du7SlSJRAQIDVlHq1+xmv8+7Yr4XEjNrwNu6w3/Pk0+g/LxCHNrfWZcwfCN+cc6dSgWXWTvEuGk8w+rSDQXcNwEissPEFcV1U4sgVdrdtrYklQkWH02Ci8Dfj6eWvrZ7Jzhoo9BfshbCy+c3V1oEvp9wFw+A4bI8OgaMforO03pBAkr5C4/Ect7RxuNNhQDFbHGNf2Weu/Bm9V6BaDIh09KrBt3AC5kCgCV3f5QhOMKmGCyxXSMSQ/UjNojIignaTBlsGfAPl0qEifXKbJEw== Received: from DU7PR01CA0026.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::22) by AS1PR07MB8406.eurprd07.prod.outlook.com (2603:10a6:20b:4c6::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.16; Wed, 18 Sep 2024 09:14:06 +0000 Received: from DB1PEPF0003922D.eurprd03.prod.outlook.com (2603:10a6:10:50e:cafe::eb) by DU7PR01CA0026.outlook.office365.com (2603:10a6:10:50e::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.30 via Frontend Transport; Wed, 18 Sep 2024 09:14:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by DB1PEPF0003922D.mail.protection.outlook.com (10.167.8.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:06 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.60) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id 391CC38007D; Wed, 18 Sep 2024 11:14:03 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 4/6] eal: add atomic bit operations Date: Wed, 18 Sep 2024 11:04:43 +0200 Message-ID: <20240918090445.725283-5-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF0003922D:EE_|AS1PR07MB8406:EE_ X-MS-Office365-Filtering-Correlation-Id: 66972f27-5a1f-4672-2ed6-08dcd7c23f6c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|82310400026|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?ajyjP6hTIlmSieA4YpMa8U9VZtpJW5R?= =?utf-8?q?1RicXTEVzSWROOCd0sFCdIwchHZ8O/2GJy9+GabCWjHY7ah599YwhSBNMbAMITbvW?= =?utf-8?q?a2f2Ox/KL1vbOoh5t65E2ciNfl6/8Utstyxh04i2BWxxy/HuRswTjGWmz5KIOuYRu?= =?utf-8?q?FGiqs/Ff6Bz8E4ERpiUxNYqkqPGOOiKGq8S36OSu7WuvhU9cvM8gYymJ+6LZoH+AU?= =?utf-8?q?xQZXw0IqQZf5F4ciyhJabGeYGqnq/lau7KfRyHWTjWXqpky9P+XzlMbTnh0sFY33Z?= =?utf-8?q?lnLXUVvFFhE1GKF0r1EtyW4/ojYg6JNBUOOpCJ+6145i6ys+5GaoP3ff/101C/8Gi?= =?utf-8?q?wT5wxmRD3KtYdXx02TPjPP3U9M1hHASEpenW4jtFCW0WZj62KNYquqsDEheMOmTxK?= =?utf-8?q?72xvKR04bkE3g0+xdZX0T44TKnhX1ED+rJNCP5g41KtF/riwCyk6v7eeLviyNneIb?= =?utf-8?q?tWyY3TRyH78/Cx0sdts+tyZMRf9csyTB1osClkMftxS2XzNiqOzQ47oZWl3CzJgvl?= =?utf-8?q?3BZdIXJrOvuIc6qmI6GEKnq4Qiggu7buL7UBwj8pNIoPclCqa4aCjUhp4qJFIV+/K?= =?utf-8?q?GfgHxR1q2zgFERwd452XcmjVXrpQqM0GoDkQq/pbpMzLUsS2s2uhMovxAVqz1FJSO?= =?utf-8?q?FYimv3M+wlmYrSmOmyg+JTxrsFdv8rdRh3JXEIs8O6cTubE5Ajfn5FctNJkz20ap3?= =?utf-8?q?YdvXXpA7NSAM2A3FKMaRejeCNKeW/xpR0Qxi2LIUKL+UtEeQIdFxtj7t8u7M9tMg/?= =?utf-8?q?s6e6mlxo+KEuZm/MKuuhLZclPNmhgtN5JfV5UUTITwfP2zLVugu35bpWmR9SMD+ad?= =?utf-8?q?+9BcDsFnKlgImdsCcDkq91jldsMa9Qs9f9m1tRNYBQtjBh1CJHSw/xq7eJhqzz6bN?= =?utf-8?q?s2ft7vF/iiy3f/1r8QZrvyOqLWK+JFmpEYpDtFGi2/FB1QTkb0PrML1eTTRaBl2sR?= =?utf-8?q?7SiGtKATEwjV9lGv0Copds2Z4uIGNOFhsZkDjBPxA8TSrQHvrdFR75tr38xE86hGm?= =?utf-8?q?Y3b5O3P3Ac3NelgEd7wB7mwAjfgY7R6JT6xToZt7zeqSFzJ2HLzkTm5fKCnCZfozn?= =?utf-8?q?3ylfLhWyM0QlPWzHqv7zwORbpT2Vh7685/b8SMSigcgqd/3BNPgxkSlERlmy5yxmS?= =?utf-8?q?hDXM25TVq2ho4I31mYBehbE89XdSuMkT5MU2XuiIpVqNUbrxIgk3XkPxfkc2E1kJu?= =?utf-8?q?L1xQ3nVM4PoBxGRfxvlcQ9vVAHGFhLiXokSditXsqP+Pc28z7FIUtJFOx3AQBATHC?= =?utf-8?q?4g9syTClIMq8skN1LhuTWOxtPmd2DG0he2RAobob10yd5iJd3rjG9ZT7/HYT7jOoo?= =?utf-8?q?lz9Dop/gjzjz?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(36860700013)(82310400026)(376014)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:06.6512 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 66972f27-5a1f-4672-2ed6-08dcd7c23f6c X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF0003922D.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR07MB8406 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add atomic bit test/set/clear/assign/flip and test-and-set/clear/assign/flip functions. All atomic bit functions allow (and indeed, require) the caller to specify a memory order. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup Acked-by: Tyler Retzlaff Acked-by: Jack Bond-Preston --- PATCH v3: * Introduce __RTE_GEN_BIT_ATOMIC_*() 'qualifier' argument already in this patch (Jack Bond-Preston). * Refer to volatile bit op functions as variants instead of families (macro parameter naming). * Update release notes. PATCH: * Add missing macro #undef for C++ version of atomic bit flip. RFC v7: * Replace compare-exchange-based rte_bitset_atomic_test_and_*() and flip() with implementations that use the previous value as returned by the atomic fetch function. * Reword documentation to match the non-atomic macro variants. * Remove pointer to for memory model documentation, since there is no documentation for that API. RFC v6: * Have rte_bit_atomic_test() accept const-marked bitsets. RFC v4: * Add atomic bit flip. * Mark macro-generated private functions experimental. RFC v3: * Work around lack of C++ support for _Generic (Tyler Retzlaff). RFC v2: o Add rte_bit_atomic_test_and_assign() (for consistency). o Fix bugs in rte_bit_atomic_test_and_[set|clear](). o Use to support MSVC. --- doc/guides/rel_notes/release_24_11.rst | 17 + lib/eal/include/rte_bitops.h | 415 +++++++++++++++++++++++++ 2 files changed, 432 insertions(+) diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 0ff70d9057..3111b1e4c0 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -56,6 +56,23 @@ New Features ======================================================= +* **Extended bit operations API.** + + The support for bit-level operations on single 32- and 64-bit words + in has been extended with two families of + semantically well-defined functions. + + rte_bit_[test|set|clear|assign|flip]() functions provide excellent + performance (by avoiding restricting the compiler and CPU), but give + no guarantees in regards to memory ordering or atomicity. + + rte_bit_atomic_*() provides atomic bit-level operations, including + the possibility to specifying memory ordering constraints. + + The new public API elements are polymorphic, using the _Generic- + based macros (for C) and function overloading (in C++ translation + units). + Removed Items ------------- diff --git a/lib/eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h index 6915b945ba..3ad6795fd1 100644 --- a/lib/eal/include/rte_bitops.h +++ b/lib/eal/include/rte_bitops.h @@ -21,6 +21,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -226,6 +227,204 @@ extern "C" { uint32_t *: __rte_bit_flip32, \ uint64_t *: __rte_bit_flip64)(addr, nr) +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Test if a particular bit in a word is set with a particular memory + * order. + * + * Test a bit with the resulting memory load ordered as per the + * specified memory order. + * + * @param addr + * A pointer to the word to query. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + * @return + * Returns true if the bit is set, and false otherwise. + */ +#define rte_bit_atomic_test(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_test32, \ + const uint32_t *: __rte_bit_atomic_test32, \ + uint64_t *: __rte_bit_atomic_test64, \ + const uint64_t *: __rte_bit_atomic_test64)(addr, nr, \ + memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically set bit in word. + * + * Generic selection macro to atomically set bit specified by @c nr in + * the word pointed to by @c addr to '1', with the memory ordering as + * specified by @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + */ +#define rte_bit_atomic_set(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_set32, \ + uint64_t *: __rte_bit_atomic_set64)(addr, nr, memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically clear bit in word. + * + * Generic selection macro to atomically set bit specified by @c nr in + * the word pointed to by @c addr to '0', with the memory ordering as + * specified by @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + */ +#define rte_bit_atomic_clear(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_clear32, \ + uint64_t *: __rte_bit_atomic_clear64)(addr, nr, memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically assign a value to bit in word. + * + * Generic selection macro to atomically set bit specified by @c nr in the + * word pointed to by @c addr to the value indicated by @c value, with + * the memory ordering as specified with @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param value + * The new value of the bit - true for '1', or false for '0'. + * @param memory_order + * The memory order to use. + */ +#define rte_bit_atomic_assign(addr, nr, value, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_assign32, \ + uint64_t *: __rte_bit_atomic_assign64)(addr, nr, value, \ + memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically flip bit in word. + * + * Generic selection macro to atomically negate the value of the bit + * specified by @c nr in the word pointed to by @c addr to the value + * indicated by @c value, with the memory ordering as specified with + * @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + */ +#define rte_bit_atomic_flip(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_flip32, \ + uint64_t *: __rte_bit_atomic_flip64)(addr, nr, memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically test and set a bit in word. + * + * Generic selection macro to atomically test and set bit specified by + * @c nr in the word pointed to by @c addr to '1', with the memory + * ordering as specified with @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + * @return + * Returns true if the bit was set, and false otherwise. + */ +#define rte_bit_atomic_test_and_set(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_test_and_set32, \ + uint64_t *: __rte_bit_atomic_test_and_set64)(addr, nr, \ + memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically test and clear a bit in word. + * + * Generic selection macro to atomically test and clear bit specified + * by @c nr in the word pointed to by @c addr to '0', with the memory + * ordering as specified with @c memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param memory_order + * The memory order to use. + * @return + * Returns true if the bit was set, and false otherwise. + */ +#define rte_bit_atomic_test_and_clear(addr, nr, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_test_and_clear32, \ + uint64_t *: __rte_bit_atomic_test_and_clear64)(addr, nr, \ + memory_order) + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Atomically test and assign a bit in word. + * + * Generic selection macro to atomically test and assign bit specified + * by @c nr in the word pointed to by @c addr the value specified by + * @c value, with the memory ordering as specified with @c + * memory_order. + * + * @param addr + * A pointer to the word to modify. + * @param nr + * The index of the bit. + * @param value + * The new value of the bit - true for '1', or false for '0'. + * @param memory_order + * The memory order to use. + * @return + * Returns true if the bit was set, and false otherwise. + */ +#define rte_bit_atomic_test_and_assign(addr, nr, value, memory_order) \ + _Generic((addr), \ + uint32_t *: __rte_bit_atomic_test_and_assign32, \ + uint64_t *: __rte_bit_atomic_test_and_assign64)(addr, nr, \ + value, \ + memory_order) + #define __RTE_GEN_BIT_TEST(variant, qualifier, size) \ __rte_experimental \ static inline bool \ @@ -299,6 +498,146 @@ extern "C" { __RTE_GEN_BIT_OPS_SIZE(32) __RTE_GEN_BIT_OPS_SIZE(64) +#define __RTE_GEN_BIT_ATOMIC_TEST(variant, qualifier, size) \ + __rte_experimental \ + static inline bool \ + __rte_bit_atomic_ ## variant ## test ## size(const qualifier uint ## size ## _t *addr, \ + unsigned int nr, int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + const qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (const qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + return rte_atomic_load_explicit(a_addr, memory_order) & mask; \ + } + +#define __RTE_GEN_BIT_ATOMIC_SET(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_atomic_ ## variant ## set ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + rte_atomic_fetch_or_explicit(a_addr, mask, memory_order); \ + } + +#define __RTE_GEN_BIT_ATOMIC_CLEAR(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_atomic_ ## variant ## clear ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + rte_atomic_fetch_and_explicit(a_addr, ~mask, memory_order); \ + } + +#define __RTE_GEN_BIT_ATOMIC_FLIP(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_atomic_ ## variant ## flip ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + rte_atomic_fetch_xor_explicit(a_addr, mask, memory_order); \ + } + +#define __RTE_GEN_BIT_ATOMIC_ASSIGN(variant, qualifier, size) \ + __rte_experimental \ + static inline void \ + __rte_bit_atomic_## variant ## assign ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, bool value, \ + int memory_order) \ + { \ + if (value) \ + __rte_bit_atomic_ ## variant ## set ## size(addr, nr, memory_order); \ + else \ + __rte_bit_atomic_ ## variant ## clear ## size(addr, nr, \ + memory_order); \ + } + +#define __RTE_GEN_BIT_ATOMIC_TEST_AND_SET(variant, qualifier, size) \ + __rte_experimental \ + static inline bool \ + __rte_bit_atomic_ ## variant ## test_and_set ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, \ + int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + uint ## size ## _t prev; \ + \ + prev = rte_atomic_fetch_or_explicit(a_addr, mask, \ + memory_order); \ + \ + return prev & mask; \ + } + +#define __RTE_GEN_BIT_ATOMIC_TEST_AND_CLEAR(variant, qualifier, size) \ + __rte_experimental \ + static inline bool \ + __rte_bit_atomic_ ## variant ## test_and_clear ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, \ + int memory_order) \ + { \ + RTE_ASSERT(nr < size); \ + \ + qualifier RTE_ATOMIC(uint ## size ## _t) *a_addr = \ + (qualifier RTE_ATOMIC(uint ## size ## _t) *)addr; \ + uint ## size ## _t mask = (uint ## size ## _t)1 << nr; \ + uint ## size ## _t prev; \ + \ + prev = rte_atomic_fetch_and_explicit(a_addr, ~mask, \ + memory_order); \ + \ + return prev & mask; \ + } + +#define __RTE_GEN_BIT_ATOMIC_TEST_AND_ASSIGN(variant, qualifier, size) \ + __rte_experimental \ + static inline bool \ + __rte_bit_atomic_ ## variant ## test_and_assign ## size(qualifier uint ## size ## _t *addr, \ + unsigned int nr, \ + bool value, \ + int memory_order) \ + { \ + if (value) \ + return __rte_bit_atomic_ ## variant ## test_and_set ## size(addr, nr, memory_order); \ + else \ + return __rte_bit_atomic_ ## variant ## test_and_clear ## size(addr, nr, memory_order); \ + } + +#define __RTE_GEN_BIT_ATOMIC_OPS(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_TEST(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_SET(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_CLEAR(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_ASSIGN(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_TEST_AND_SET(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_TEST_AND_CLEAR(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_TEST_AND_ASSIGN(variant, qualifier, size) \ + __RTE_GEN_BIT_ATOMIC_FLIP(variant, qualifier, size) + +#define __RTE_GEN_BIT_ATOMIC_OPS_SIZE(size) \ + __RTE_GEN_BIT_ATOMIC_OPS(,, size) + +__RTE_GEN_BIT_ATOMIC_OPS_SIZE(32) +__RTE_GEN_BIT_ATOMIC_OPS_SIZE(64) + /*------------------------ 32-bit relaxed operations ------------------------*/ /** @@ -994,6 +1333,15 @@ rte_log2_u64(uint64_t v) #undef rte_bit_assign #undef rte_bit_flip +#undef rte_bit_atomic_test +#undef rte_bit_atomic_set +#undef rte_bit_atomic_clear +#undef rte_bit_atomic_assign +#undef rte_bit_atomic_flip +#undef rte_bit_atomic_test_and_set +#undef rte_bit_atomic_test_and_clear +#undef rte_bit_atomic_test_and_assign + #define __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, size, arg1_type, arg1_name) \ static inline void \ rte_bit_ ## fun(qualifier uint ## size ## _t *addr, \ @@ -1037,12 +1385,79 @@ rte_log2_u64(uint64_t v) __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, 64, arg1_type, arg1_name, \ arg2_type, arg2_name) +#define __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, size, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name) \ + static inline ret_type \ + rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ + arg2_type arg2_name) \ + { \ + return __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name); \ + } + +#define __RTE_BIT_OVERLOAD_3R(fun, qualifier, ret_type, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, 32, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, 64, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name) + +#define __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, size, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) \ + static inline void \ + rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ + arg2_type arg2_name, arg3_type arg3_name) \ + { \ + __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name, \ + arg3_name); \ + } + +#define __RTE_BIT_OVERLOAD_4(fun, qualifier, arg1_type, arg1_name, arg2_type, \ + arg2_name, arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, 32, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, 64, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) + +#define __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, size, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ + static inline ret_type \ + rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ + arg2_type arg2_name, arg3_type arg3_name) \ + { \ + return __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name, \ + arg3_name); \ + } + +#define __RTE_BIT_OVERLOAD_4R(fun, qualifier, ret_type, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, 32, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, 64, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) + __RTE_BIT_OVERLOAD_2R(test, const, bool, unsigned int, nr) __RTE_BIT_OVERLOAD_2(set,, unsigned int, nr) __RTE_BIT_OVERLOAD_2(clear,, unsigned int, nr) __RTE_BIT_OVERLOAD_3(assign,, unsigned int, nr, bool, value) __RTE_BIT_OVERLOAD_2(flip,, unsigned int, nr) +__RTE_BIT_OVERLOAD_3R(atomic_test, const, bool, unsigned int, nr, + int, memory_order) +__RTE_BIT_OVERLOAD_3(atomic_set,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_3(atomic_clear,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_4(atomic_assign,, unsigned int, nr, bool, value, + int, memory_order) +__RTE_BIT_OVERLOAD_3(atomic_flip,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_3R(atomic_test_and_set,, bool, unsigned int, nr, + int, memory_order) +__RTE_BIT_OVERLOAD_3R(atomic_test_and_clear,, bool, unsigned int, nr, + int, memory_order) +__RTE_BIT_OVERLOAD_4R(atomic_test_and_assign,, bool, unsigned int, nr, + bool, value, int, memory_order) + #endif #endif /* _RTE_BITOPS_H_ */ From patchwork Wed Sep 18 09:04:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144243 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id C3585459C6; Wed, 18 Sep 2024 11:14:08 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4C8A1427E9; Wed, 18 Sep 2024 11:14:08 +0200 (CEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2062.outbound.protection.outlook.com [40.107.22.62]) by mails.dpdk.org (Postfix) with ESMTP id 744074025C for ; Wed, 18 Sep 2024 11:14:06 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JuPn9vZsKNk0gW/GkkwDBWJs2ipLXwOZj7l3Gnv92Du6lkYjjtmRHumAj4URqiThcBE4UT13xheKtzK+zINnlSMUY9rVgMdYxvY9MGw0hHjOBY0NYwfx6O37WzM69RhOI24YKd+eRNKZ2NjFA5Stx4MqWkzHHFCqfGTuTVGCjNaSR9z4JRCHtOMPFtiOW7Kwom9diN5umTgZoOlEaGk02Qlt1K48kq5arVUYp4ZK81fLVIB6BoGg9pyguqS3Dzb7S1n6GUf+YRw5IYaAg2TESVBek22RKanR+ErMsJBujS9Dl6w9b8begpBTRp5aUZJPIbiS6XQhVeNJcYFc+dXVaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=FORcAcTImC3VO+jULR5YD9MPGU81/5BIeguEUjIfy6I=; b=sgUxz6iSVPnaHZ4ZVXwO1f87ldsYVK0lzdWCKfHER9iYu0Mg0GBfCNEnCIltfw4tAxFEobdybhLFdWQ79Jiw+GjHW8JAkRb9J/KIACURPYO8zMl+PoUNH8B1G89RKeNg3WdeC+8H80TmCW2emp7sH4fLioHywVk08XKxhi1JAuCHIImv1dNUuxgd//idxsFPls3oY6bRcwOHPo1WzCJHyL2tTH2FKVc2I9GUWJDaio2TBQfIlDFXNdKDrbczu3Y29s0dnCntdR1frdwa4Z2DCh6S1x0n5DIbgLrU2rHhu0rEpga7jCNP5yWNgAhnjon8VOOhhfGzZsuUKb2KSbEivw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FORcAcTImC3VO+jULR5YD9MPGU81/5BIeguEUjIfy6I=; b=n1AQ9Bidf4EzIehAJKja7HoDWqFKYZMiPda7RysqDBGZNtuI/ZES7lIbJoThBlbmlCTbpDet6NDvPlcZmMGUTz/3Iug3Q4aY5cLQIp5CsAnnKzhOP82xNEcOOq6ekzmbqkxoxYRQd/Qv+Y0NCH7YTkRYW5T06XlePbK5kS60+mtK52Xxfcsztn8MwaUCfwg8lzsN6GP9Cn74leGMj0i55axRcpNHC8PDkoZLhAFFnzZH8oZfqB5AGxTOy2s2TNAJ2EyriGyqAq7zuM3pe8X70Y61jKo03qrfHl2bdvDNOR+w1I2wL7Ocvroons9v7/TBercJCAyE+VN9+etbP3VFWw== Received: from DUZPR01CA0186.eurprd01.prod.exchangelabs.com (2603:10a6:10:4b3::15) by AS8PR07MB7141.eurprd07.prod.outlook.com (2603:10a6:20b:25a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.24; Wed, 18 Sep 2024 09:14:04 +0000 Received: from DB1PEPF000509E2.eurprd03.prod.outlook.com (2603:10a6:10:4b3:cafe::63) by DUZPR01CA0186.outlook.office365.com (2603:10a6:10:4b3::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.25 via Frontend Transport; Wed, 18 Sep 2024 09:14:04 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by DB1PEPF000509E2.mail.protection.outlook.com (10.167.242.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:03 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.65) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id 44756380070; Wed, 18 Sep 2024 11:14:03 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 5/6] eal: add unit tests for atomic bit access functions Date: Wed, 18 Sep 2024 11:04:44 +0200 Message-ID: <20240918090445.725283-6-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF000509E2:EE_|AS8PR07MB7141:EE_ X-MS-Office365-Filtering-Correlation-Id: 478bdaf5-1cb5-4781-f4c7-08dcd7c23dc3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?q?ySfKdu/DLbu4EwEe1So36EsgkC9ys5X?= =?utf-8?q?Ip/Zl9FCHyNLwCZES9pQGWPC3A8LBUjckvw3AOi65VDSc5wheWlxF8K2oSgv8NICY?= =?utf-8?q?dEYj6AfeB1ntRhxvbDjUIVWuxa1nTX/PvbwC8tx1Id3FT/WUraLXeHTK58I7Qc1DN?= =?utf-8?q?LiDijj6WpRJp+ImShc2rMV7zPnwjw9LHuXXXEk1OUege7YRQrVo5vVZEsnhfKj733?= =?utf-8?q?xCRX/y2KnisgKi6wV+pK37xzA799KB3Oc9YzlX2B20aiBchqCA8BN3yqfg7xCO3K2?= =?utf-8?q?FTvmxP+k4OUqjqgXNrs/9zkGsw2mT7kv/punvEJPNFA1J95ptHiNtOoCvcURxTkGW?= =?utf-8?q?o5b5g2yW1nMEAT025TqXlto7XepTBii3+LV+qtQiwiKg7jA5t6KP8WxO4aF9+IOa6?= =?utf-8?q?RJWpOs0oYJiL2vQFdc1ITp0o6iSYXit8JMlyYw/mteyss+MOsS0wDU40L71C2jjEF?= =?utf-8?q?slZ3471NUo7TWTt/mPU5ZV8NYZylGHHg2TAE2HcoDl2CP0G3lcnudEkaeZSRcv/9c?= =?utf-8?q?34bu00L3mJktfh8Cwakt5z7BYJa14AL3q6Ztz07CJIxDX6N6aiYB8M3kwhoTN7X9v?= =?utf-8?q?ts891sPp/83W2dri+F/Lr8Z6123EC8arfTZGbb8lif1U/s+F35MFaDXSKuM/GMkQ2?= =?utf-8?q?ROJ+HWjO7pG7z8X/+ZJPHY50nybzc20bP//Tc/eRQCszUN/mkl+WgZGKIs4N8i9Tq?= =?utf-8?q?LW9PhwV3yqcDuM8p2FaFaFAK7UY3riFcN0B55dFJI+AmdCobm0MAbZ7IoQOBZM4L6?= =?utf-8?q?EYOgwj5wGqfUL73YVJlNteZOW01sJ4RKEpmt3KMv3wI7P+ayGy+ocaND0xBblSoTQ?= =?utf-8?q?ua1ZexkLOooyeuxfiQehbxUatFyFL2ym+2HrEJz+3PE4eWVJNGV8ERAnGlToYEsc6?= =?utf-8?q?628dJMR5V5ug6aUWkAz9MQ/7urDi6uTZyr+HyskiakdRkAUBLR9yUon9s/6lQ/aRj?= =?utf-8?q?TTaUalchJVRyluoqqXUE+LAIqFxFRPZ4ah/VZ9FWCi75yB/PaZEq3Z4A5ZHBLD7Uw?= =?utf-8?q?GT6uXSeo4UEk7bpcYZhgcmN9wu2nwffgE12pmoncTTbD0UX2mtR+fEmDauAn1PQM8?= =?utf-8?q?Gvp4OYsj2RpY+A7siALCEEWxARFC0+5WQTE+bVvHFxaTU92W2oJM1ARlNUVJHJFE+?= =?utf-8?q?3q+U75x3btPniyZt1b6FYsXPH9xX3kVHXLxjSgJHmP4M+lnRlhnj5UZhoJoM2RRwD?= =?utf-8?q?sTNQ2xzTWqskUOpz258ECha9Z0NHvNd0n5QFGUPwSh6d3BwrtwVPZiTvNuXXEe3BP?= =?utf-8?q?FKZ8Gf7BvfaPyeTdN7mFP1NoI2etlE/wA61aAUFBWDfq2uZlcB2KDfDBxzstl4cDl?= =?utf-8?q?s2JlSz7FpOga?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(376014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:03.8866 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 478bdaf5-1cb5-4781-f4c7-08dcd7c23dc3 X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509E2.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7141 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Extend bitops tests to cover the rte_bit_atomic_*() family of functions. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup Acked-by: Tyler Retzlaff Acked-by: Jack Bond-Preston --- RFC v4: * Add atomicity test for atomic bit flip. RFC v3: * Rename variable 'main' to make ICC happy. --- app/test/test_bitops.c | 313 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 312 insertions(+), 1 deletion(-) diff --git a/app/test/test_bitops.c b/app/test/test_bitops.c index 322f58c066..b80216a0a1 100644 --- a/app/test/test_bitops.c +++ b/app/test/test_bitops.c @@ -3,10 +3,13 @@ * Copyright(c) 2024 Ericsson AB */ +#include #include -#include #include +#include +#include +#include #include #include "test.h" @@ -61,6 +64,304 @@ GEN_TEST_BIT_ACCESS(test_bit_access32, rte_bit_set, rte_bit_clear, GEN_TEST_BIT_ACCESS(test_bit_access64, rte_bit_set, rte_bit_clear, rte_bit_assign, rte_bit_flip, rte_bit_test, 64) +#define bit_atomic_set(addr, nr) \ + rte_bit_atomic_set(addr, nr, rte_memory_order_relaxed) + +#define bit_atomic_clear(addr, nr) \ + rte_bit_atomic_clear(addr, nr, rte_memory_order_relaxed) + +#define bit_atomic_assign(addr, nr, value) \ + rte_bit_atomic_assign(addr, nr, value, rte_memory_order_relaxed) + +#define bit_atomic_flip(addr, nr) \ + rte_bit_atomic_flip(addr, nr, rte_memory_order_relaxed) + +#define bit_atomic_test(addr, nr) \ + rte_bit_atomic_test(addr, nr, rte_memory_order_relaxed) + +GEN_TEST_BIT_ACCESS(test_bit_atomic_access32, bit_atomic_set, + bit_atomic_clear, bit_atomic_assign, + bit_atomic_flip, bit_atomic_test, 32) + +GEN_TEST_BIT_ACCESS(test_bit_atomic_access64, bit_atomic_set, + bit_atomic_clear, bit_atomic_assign, + bit_atomic_flip, bit_atomic_test, 64) + +#define PARALLEL_TEST_RUNTIME 0.25 + +#define GEN_TEST_BIT_PARALLEL_ASSIGN(size) \ + \ + struct parallel_access_lcore ## size \ + { \ + unsigned int bit; \ + uint ## size ##_t *word; \ + bool failed; \ + }; \ + \ + static int \ + run_parallel_assign ## size(void *arg) \ + { \ + struct parallel_access_lcore ## size *lcore = arg; \ + uint64_t deadline = rte_get_timer_cycles() + \ + PARALLEL_TEST_RUNTIME * rte_get_timer_hz(); \ + bool value = false; \ + \ + do { \ + bool new_value = rte_rand() & 1; \ + bool use_test_and_modify = rte_rand() & 1; \ + bool use_assign = rte_rand() & 1; \ + \ + if (rte_bit_atomic_test(lcore->word, lcore->bit, \ + rte_memory_order_relaxed) != value) { \ + lcore->failed = true; \ + break; \ + } \ + \ + if (use_test_and_modify) { \ + bool old_value; \ + if (use_assign) \ + old_value = rte_bit_atomic_test_and_assign( \ + lcore->word, lcore->bit, new_value, \ + rte_memory_order_relaxed); \ + else { \ + old_value = new_value ? \ + rte_bit_atomic_test_and_set( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed) : \ + rte_bit_atomic_test_and_clear( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed); \ + } \ + if (old_value != value) { \ + lcore->failed = true; \ + break; \ + } \ + } else { \ + if (use_assign) \ + rte_bit_atomic_assign(lcore->word, lcore->bit, \ + new_value, \ + rte_memory_order_relaxed); \ + else { \ + if (new_value) \ + rte_bit_atomic_set( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed); \ + else \ + rte_bit_atomic_clear( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed); \ + } \ + } \ + \ + value = new_value; \ + } while (rte_get_timer_cycles() < deadline); \ + \ + return 0; \ + } \ + \ + static int \ + test_bit_atomic_parallel_assign ## size(void) \ + { \ + unsigned int worker_lcore_id; \ + uint ## size ## _t word = 0; \ + struct parallel_access_lcore ## size lmain = { \ + .word = &word \ + }; \ + struct parallel_access_lcore ## size lworker = { \ + .word = &word \ + }; \ + \ + if (rte_lcore_count() < 2) { \ + printf("Need multiple cores to run parallel test.\n"); \ + return TEST_SKIPPED; \ + } \ + \ + worker_lcore_id = rte_get_next_lcore(-1, 1, 0); \ + \ + lmain.bit = rte_rand_max(size); \ + do { \ + lworker.bit = rte_rand_max(size); \ + } while (lworker.bit == lmain.bit); \ + \ + int rc = rte_eal_remote_launch(run_parallel_assign ## size, \ + &lworker, worker_lcore_id); \ + TEST_ASSERT(rc == 0, "Worker thread launch failed"); \ + \ + run_parallel_assign ## size(&lmain); \ + \ + rte_eal_mp_wait_lcore(); \ + \ + TEST_ASSERT(!lmain.failed, "Main lcore atomic access failed"); \ + TEST_ASSERT(!lworker.failed, "Worker lcore atomic access " \ + "failed"); \ + \ + return TEST_SUCCESS; \ + } + +GEN_TEST_BIT_PARALLEL_ASSIGN(32) +GEN_TEST_BIT_PARALLEL_ASSIGN(64) + +#define GEN_TEST_BIT_PARALLEL_TEST_AND_MODIFY(size) \ + \ + struct parallel_test_and_set_lcore ## size \ + { \ + uint ## size ##_t *word; \ + unsigned int bit; \ + uint64_t flips; \ + }; \ + \ + static int \ + run_parallel_test_and_modify ## size(void *arg) \ + { \ + struct parallel_test_and_set_lcore ## size *lcore = arg; \ + uint64_t deadline = rte_get_timer_cycles() + \ + PARALLEL_TEST_RUNTIME * rte_get_timer_hz(); \ + do { \ + bool old_value; \ + bool new_value = rte_rand() & 1; \ + bool use_assign = rte_rand() & 1; \ + \ + if (use_assign) \ + old_value = rte_bit_atomic_test_and_assign( \ + lcore->word, lcore->bit, new_value, \ + rte_memory_order_relaxed); \ + else \ + old_value = new_value ? \ + rte_bit_atomic_test_and_set( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed) : \ + rte_bit_atomic_test_and_clear( \ + lcore->word, lcore->bit, \ + rte_memory_order_relaxed); \ + if (old_value != new_value) \ + lcore->flips++; \ + } while (rte_get_timer_cycles() < deadline); \ + \ + return 0; \ + } \ + \ + static int \ + test_bit_atomic_parallel_test_and_modify ## size(void) \ + { \ + unsigned int worker_lcore_id; \ + uint ## size ## _t word = 0; \ + unsigned int bit = rte_rand_max(size); \ + struct parallel_test_and_set_lcore ## size lmain = { \ + .word = &word, \ + .bit = bit \ + }; \ + struct parallel_test_and_set_lcore ## size lworker = { \ + .word = &word, \ + .bit = bit \ + }; \ + \ + if (rte_lcore_count() < 2) { \ + printf("Need multiple cores to run parallel test.\n"); \ + return TEST_SKIPPED; \ + } \ + \ + worker_lcore_id = rte_get_next_lcore(-1, 1, 0); \ + \ + int rc = rte_eal_remote_launch(run_parallel_test_and_modify ## size, \ + &lworker, worker_lcore_id); \ + TEST_ASSERT(rc == 0, "Worker thread launch failed"); \ + \ + run_parallel_test_and_modify ## size(&lmain); \ + \ + rte_eal_mp_wait_lcore(); \ + \ + uint64_t total_flips = lmain.flips + lworker.flips; \ + bool expected_value = total_flips % 2; \ + \ + TEST_ASSERT(expected_value == rte_bit_test(&word, bit), \ + "After %"PRId64" flips, the bit value " \ + "should be %d", total_flips, expected_value); \ + \ + uint64_t expected_word = 0; \ + rte_bit_assign(&expected_word, bit, expected_value); \ + \ + TEST_ASSERT(expected_word == word, "Untouched bits have " \ + "changed value"); \ + \ + return TEST_SUCCESS; \ + } + +GEN_TEST_BIT_PARALLEL_TEST_AND_MODIFY(32) +GEN_TEST_BIT_PARALLEL_TEST_AND_MODIFY(64) + +#define GEN_TEST_BIT_PARALLEL_FLIP(size) \ + \ + struct parallel_flip_lcore ## size \ + { \ + uint ## size ##_t *word; \ + unsigned int bit; \ + uint64_t flips; \ + }; \ + \ + static int \ + run_parallel_flip ## size(void *arg) \ + { \ + struct parallel_flip_lcore ## size *lcore = arg; \ + uint64_t deadline = rte_get_timer_cycles() + \ + PARALLEL_TEST_RUNTIME * rte_get_timer_hz(); \ + do { \ + rte_bit_atomic_flip(lcore->word, lcore->bit, \ + rte_memory_order_relaxed); \ + lcore->flips++; \ + } while (rte_get_timer_cycles() < deadline); \ + \ + return 0; \ + } \ + \ + static int \ + test_bit_atomic_parallel_flip ## size(void) \ + { \ + unsigned int worker_lcore_id; \ + uint ## size ## _t word = 0; \ + unsigned int bit = rte_rand_max(size); \ + struct parallel_flip_lcore ## size lmain = { \ + .word = &word, \ + .bit = bit \ + }; \ + struct parallel_flip_lcore ## size lworker = { \ + .word = &word, \ + .bit = bit \ + }; \ + \ + if (rte_lcore_count() < 2) { \ + printf("Need multiple cores to run parallel test.\n"); \ + return TEST_SKIPPED; \ + } \ + \ + worker_lcore_id = rte_get_next_lcore(-1, 1, 0); \ + \ + int rc = rte_eal_remote_launch(run_parallel_flip ## size, \ + &lworker, worker_lcore_id); \ + TEST_ASSERT(rc == 0, "Worker thread launch failed"); \ + \ + run_parallel_flip ## size(&lmain); \ + \ + rte_eal_mp_wait_lcore(); \ + \ + uint64_t total_flips = lmain.flips + lworker.flips; \ + bool expected_value = total_flips % 2; \ + \ + TEST_ASSERT(expected_value == rte_bit_test(&word, bit), \ + "After %"PRId64" flips, the bit value " \ + "should be %d", total_flips, expected_value); \ + \ + uint64_t expected_word = 0; \ + rte_bit_assign(&expected_word, bit, expected_value); \ + \ + TEST_ASSERT(expected_word == word, "Untouched bits have " \ + "changed value"); \ + \ + return TEST_SUCCESS; \ + } + +GEN_TEST_BIT_PARALLEL_FLIP(32) +GEN_TEST_BIT_PARALLEL_FLIP(64) + static uint32_t val32; static uint64_t val64; @@ -177,6 +478,16 @@ static struct unit_test_suite test_suite = { .unit_test_cases = { TEST_CASE(test_bit_access32), TEST_CASE(test_bit_access64), + TEST_CASE(test_bit_access32), + TEST_CASE(test_bit_access64), + TEST_CASE(test_bit_atomic_access32), + TEST_CASE(test_bit_atomic_access64), + TEST_CASE(test_bit_atomic_parallel_assign32), + TEST_CASE(test_bit_atomic_parallel_assign64), + TEST_CASE(test_bit_atomic_parallel_test_and_modify32), + TEST_CASE(test_bit_atomic_parallel_test_and_modify64), + TEST_CASE(test_bit_atomic_parallel_flip32), + TEST_CASE(test_bit_atomic_parallel_flip64), TEST_CASE(test_bit_relaxed_set), TEST_CASE(test_bit_relaxed_clear), TEST_CASE(test_bit_relaxed_test_set_clear), From patchwork Wed Sep 18 09:04:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 144247 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id D15E844191; Wed, 18 Sep 2024 11:14:57 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CC3E142F9F; Wed, 18 Sep 2024 11:14:16 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2085.outbound.protection.outlook.com [40.107.21.85]) by mails.dpdk.org (Postfix) with ESMTP id 4AF3842EF1 for ; Wed, 18 Sep 2024 11:14:12 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tmVhNN8namc5R9fwyh7euNsZY8jDrUxqPqJBHaEyLL7kWRtLqwSXH/BysKmBdSj3EV46aCRR6csFt0XahFhuDDgszA1WnG5ImoI62Tl//bR6en2pLrGqtwPeU7AycrhsncWFJ9UxDsR41BOnnxsbD6DGLI1iHwq25CII9jzd57TfEK2vDhIuIJVHyBMR+7p2b7FJntQzuJXD95zvJQc5sIOM6ekHvRtK8cHYMnf0+0OwH5CoqkRMxRdFGdmJsud/QNw3d/gWuvDrPsxnkMUNKYlorS3erS4Wps4kMb5TWpue2QFbpgdI6VfXV3O7sIc3VRJ/zH17wtSZnHiB7pPhJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8m3UgXhFKSzTYlHXra2yjkfez6POUZKx41YlHLDAINY=; b=qy3huJO/2mSI4uCpRG2kJKM2JCgDj+WO8PSWoEjzPn3WgG1NIV4H3XnDtd8NtSCC3R3SoR57v311N5kC+aGbbeqfGicC94OWyBYvpvcn+a4R9WjKChtLFR00mVLnpUzCUl2sv9eieWTZ/CV15yu9C+svDePEjLndPWvkIM7gQuP3RsgVWjK6SXwuaZMU5CeMsApiV99vv6ckeHPHS0h1XM25CpZ9mIQhp7O7EuV9IiI60XoMaJO2M1tEZmKVSV1lnmbtvX65HjrovZVsoiP5/8Xoz3m0DzY5DZ38PA/4R9VgRA7Qw5b8r1ajEugk4az3C3HPa8IsF4vRjJjSY8kV6g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8m3UgXhFKSzTYlHXra2yjkfez6POUZKx41YlHLDAINY=; b=p2PumyFuUoYIcUeSU+k/FD7M0zXrl4s+5WmFi9clRuP6OTaW8HCJmHC7RCgXehyHs5x+BreG7SgIvNkq6gTY8ulcdA1iqAATN3RO1wgqaaTYLyw2fQdwmBov2XrJkxpmW0I35HT6ogcSMT9iCluVm7cP8U4LOmEzUcvY7GAliBMnOCnwvpQrJwBE8AEr3b6HjB99DB1aDwjOpdUe2XcOEFLInm/HlcOEJMenMfwMOYFViayc7Bne1iSEb14mxHAU9vYYiLoya6ReAQkw7+yfiDFCeKxiabquXQG+mOGcOrSAMQyIAi+G5T7Jpju2oNaz9b2ahuJ4jusYpS02KUu5wA== Received: from DU7PR01CA0033.eurprd01.prod.exchangelabs.com (2603:10a6:10:50e::11) by VI1PR07MB6303.eurprd07.prod.outlook.com (2603:10a6:800:140::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.18; Wed, 18 Sep 2024 09:14:07 +0000 Received: from DB1PEPF0003922D.eurprd03.prod.outlook.com (2603:10a6:10:50e:cafe::94) by DU7PR01CA0033.outlook.office365.com (2603:10a6:10:50e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.25 via Frontend Transport; Wed, 18 Sep 2024 09:14:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C Received: from oa.msg.ericsson.com (192.176.1.74) by DB1PEPF0003922D.mail.protection.outlook.com (10.167.8.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 09:14:06 +0000 Received: from seliicinfr00049.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.60) with Microsoft SMTP Server id 15.2.1544.11; Wed, 18 Sep 2024 11:14:03 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00049.seli.gic.ericsson.se (Postfix) with ESMTP id 58953380061; Wed, 18 Sep 2024 11:14:03 +0200 (CEST) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: CC: , Heng Wang , "Stephen Hemminger" , Tyler Retzlaff , =?utf-8?q?Morten_Br=C3=B8rup?= , Jack Bond-Preston , David Marchand , Chengwen Feng , =?utf-8?q?Mattias_R=C3=B6nnblom?= Subject: [PATCH v9 6/6] eal: extend bitops to handle volatile pointers Date: Wed, 18 Sep 2024 11:04:45 +0200 Message-ID: <20240918090445.725283-7-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240918090445.725283-1-mattias.ronnblom@ericsson.com> References: <20240917104811.723863-2-mattias.ronnblom@ericsson.com> <20240918090445.725283-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF0003922D:EE_|VI1PR07MB6303:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e0e71b1-6065-42c3-ddd4-08dcd7c23f9b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?q?T50bJ9JTB8+UacrtIKdtmJ4ZeFjC4VJ?= =?utf-8?q?LkGn+b3ZC3rS+CaVizBg1IGDRfoXB8/hYVOBYfZVvI6/P5vXZtSqzcYTtEofD2FEP?= =?utf-8?q?WkjJnC/u/09MmAtd/xI+HGdaC1S7HVUYrD279XEVUoR0JSQUaCbwumNZ7rmfG5fb6?= =?utf-8?q?lsikRfHmCYm1hIhobxfROP3MGN7fhRy/iy8vmhgYOHKefMLZAlVy00TASjNkSm9gN?= =?utf-8?q?EsI/f2cVw1ZsdDQ4pmYi42ER6EYXTP7o7t8uFAd7zgNuFvu/JnOVxl/UkzbSP6FV0?= =?utf-8?q?Mq8Bq7ujeQ6yqfkRq1Nbng7zaRhQOe4dBs2Xk4Pc0MtDMuPovCDu28qf6gAaUmSTU?= =?utf-8?q?jmZPeoF5qViGfv0/iCPpipmJ73a+75hV5RtsLnk4YN8EpmEhOkFuEYQoKUOg7syzw?= =?utf-8?q?wUx+hzSJ9JENtSItZmLmmibn+463GjcMxGHKGxFDTwEoVVRzKfAXoLr/Xv7cXxn9Q?= =?utf-8?q?RUd+owaZPcLCagDBdvkH2NkBrmDuim1zz+U0Y1CCB0IT104o0t2BMqLvI4QWJGUAd?= =?utf-8?q?rizZEIU0/Q+JA1gLJSJwu95eGbnJbHQ427/vj586ai4pDxzvjmUeAWfcCDj2oztxD?= =?utf-8?q?2N+2vjyGQ8b+bgfQkRoZPzZTJYBInsPGqw59IGlCppoY2Nbunumsk9nyvc6bnkPAF?= =?utf-8?q?+sH3E3jaSYgWvaH+eXRyTaQx15W1sF3QLzn5OyuDsxu/jorh1mQtrBgGbTQG42NRz?= =?utf-8?q?itt/NaC4DxJ+cQZ64xXetFuLcheJyDrfkbuM6ng3ltQ02u/Sbd/LqT231zD6iVFHS?= =?utf-8?q?HnV+7IHjRgw8EfhPW5r6U0Au3thUJZINNEjfCFNGDZJCRBMX3m5gw+DohWs+8Wlv0?= =?utf-8?q?jgiYQBYONi/1GwdOlc92kivSC2aCHIlMIhY14GgP2E7ei65gNo4vozRJ/aIzENqps?= =?utf-8?q?hLdtriuRFyDgK2PPv7JOcGMf0AwoEFKxUHi8he6MZelCE+KGsmceM0GorUWrsQUlN?= =?utf-8?q?bgZxrhmRu8hEkr0OSJiuKYs0VIdmJcla35UlEUg+vx9QJVBz3b/phP7Pm7MNenWio?= =?utf-8?q?oqan2v9gcYxw6W8863A49ELLcWUR4xIJgHJvlJ1y6YCFqB8tsbAvIBJWSMXmoRtGS?= =?utf-8?q?90b96VcFeTCZgVUYND++iXTAJv5bWkyyzZ58IXJ3JpnPv14ADwc4+z1sY03waRhAF?= =?utf-8?q?/d2/4eg01ZuOWDvAkP+iOeks1FNWcMmpXqqfPYwISEf9aZ2O3KhVETaIuNmY1b3Oy?= =?utf-8?q?srPpEbITo6+38d7USmP2XTLvFHo38mTjaWY2l9pvJoQC6CskIfG27kgh8B2KHR8M7?= =?utf-8?q?6Eq9fEELAsrGGRrsiBfZRWuEr90Q+E8uU3+LN/+RKhHuslI88FBp2UaE=3D?= X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 09:14:06.9793 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e0e71b1-6065-42c3-ddd4-08dcd7c23f9b X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF0003922D.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB6303 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Have rte_bit_[test|set|clear|assign|flip]() and rte_bit_atomic_*() handle volatile-marked pointers. Signed-off-by: Mattias Rönnblom Acked-by: Morten Brørup Acked-by: Jack Bond-Preston --- PATCH v3: * Updated to reflect removed 'fun' parameter in __RTE_GEN_BIT_*() (Jack Bond-Preston). PATCH v2: * Actually run the test_bit_atomic_v_access*() test functions. --- app/test/test_bitops.c | 32 +++- lib/eal/include/rte_bitops.h | 301 +++++++++++++++++++++++------------ 2 files changed, 222 insertions(+), 111 deletions(-) diff --git a/app/test/test_bitops.c b/app/test/test_bitops.c index b80216a0a1..10e87f6776 100644 --- a/app/test/test_bitops.c +++ b/app/test/test_bitops.c @@ -14,13 +14,13 @@ #include "test.h" #define GEN_TEST_BIT_ACCESS(test_name, set_fun, clear_fun, assign_fun, \ - flip_fun, test_fun, size) \ + flip_fun, test_fun, size, mod) \ static int \ test_name(void) \ { \ uint ## size ## _t reference = (uint ## size ## _t)rte_rand(); \ unsigned int bit_nr; \ - uint ## size ## _t word = (uint ## size ## _t)rte_rand(); \ + mod uint ## size ## _t word = (uint ## size ## _t)rte_rand(); \ \ for (bit_nr = 0; bit_nr < size; bit_nr++) { \ bool reference_bit = (reference >> bit_nr) & 1; \ @@ -41,7 +41,7 @@ "Bit %d had unflipped value", bit_nr); \ flip_fun(&word, bit_nr); \ \ - const uint ## size ## _t *const_ptr = &word; \ + const mod uint ## size ## _t *const_ptr = &word; \ TEST_ASSERT(test_fun(const_ptr, bit_nr) == \ reference_bit, \ "Bit %d had unexpected value", bit_nr); \ @@ -59,10 +59,16 @@ } GEN_TEST_BIT_ACCESS(test_bit_access32, rte_bit_set, rte_bit_clear, - rte_bit_assign, rte_bit_flip, rte_bit_test, 32) + rte_bit_assign, rte_bit_flip, rte_bit_test, 32,) GEN_TEST_BIT_ACCESS(test_bit_access64, rte_bit_set, rte_bit_clear, - rte_bit_assign, rte_bit_flip, rte_bit_test, 64) + rte_bit_assign, rte_bit_flip, rte_bit_test, 64,) + +GEN_TEST_BIT_ACCESS(test_bit_v_access32, rte_bit_set, rte_bit_clear, + rte_bit_assign, rte_bit_flip, rte_bit_test, 32, volatile) + +GEN_TEST_BIT_ACCESS(test_bit_v_access64, rte_bit_set, rte_bit_clear, + rte_bit_assign, rte_bit_flip, rte_bit_test, 64, volatile) #define bit_atomic_set(addr, nr) \ rte_bit_atomic_set(addr, nr, rte_memory_order_relaxed) @@ -81,11 +87,19 @@ GEN_TEST_BIT_ACCESS(test_bit_access64, rte_bit_set, rte_bit_clear, GEN_TEST_BIT_ACCESS(test_bit_atomic_access32, bit_atomic_set, bit_atomic_clear, bit_atomic_assign, - bit_atomic_flip, bit_atomic_test, 32) + bit_atomic_flip, bit_atomic_test, 32,) GEN_TEST_BIT_ACCESS(test_bit_atomic_access64, bit_atomic_set, bit_atomic_clear, bit_atomic_assign, - bit_atomic_flip, bit_atomic_test, 64) + bit_atomic_flip, bit_atomic_test, 64,) + +GEN_TEST_BIT_ACCESS(test_bit_atomic_v_access32, bit_atomic_set, + bit_atomic_clear, bit_atomic_assign, + bit_atomic_flip, bit_atomic_test, 32, volatile) + +GEN_TEST_BIT_ACCESS(test_bit_atomic_v_access64, bit_atomic_set, + bit_atomic_clear, bit_atomic_assign, + bit_atomic_flip, bit_atomic_test, 64, volatile) #define PARALLEL_TEST_RUNTIME 0.25 @@ -480,8 +494,12 @@ static struct unit_test_suite test_suite = { TEST_CASE(test_bit_access64), TEST_CASE(test_bit_access32), TEST_CASE(test_bit_access64), + TEST_CASE(test_bit_v_access32), + TEST_CASE(test_bit_v_access64), TEST_CASE(test_bit_atomic_access32), TEST_CASE(test_bit_atomic_access64), + TEST_CASE(test_bit_atomic_v_access32), + TEST_CASE(test_bit_atomic_v_access64), TEST_CASE(test_bit_atomic_parallel_assign32), TEST_CASE(test_bit_atomic_parallel_assign64), TEST_CASE(test_bit_atomic_parallel_test_and_modify32), diff --git a/lib/eal/include/rte_bitops.h b/lib/eal/include/rte_bitops.h index 3ad6795fd1..d7a07c4099 100644 --- a/lib/eal/include/rte_bitops.h +++ b/lib/eal/include/rte_bitops.h @@ -127,12 +127,16 @@ extern "C" { * @param nr * The index of the bit. */ -#define rte_bit_test(addr, nr) \ - _Generic((addr), \ - uint32_t *: __rte_bit_test32, \ - const uint32_t *: __rte_bit_test32, \ - uint64_t *: __rte_bit_test64, \ - const uint64_t *: __rte_bit_test64)(addr, nr) +#define rte_bit_test(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_test32, \ + const uint32_t *: __rte_bit_test32, \ + volatile uint32_t *: __rte_bit_v_test32, \ + const volatile uint32_t *: __rte_bit_v_test32, \ + uint64_t *: __rte_bit_test64, \ + const uint64_t *: __rte_bit_test64, \ + volatile uint64_t *: __rte_bit_v_test64, \ + const volatile uint64_t *: __rte_bit_v_test64)(addr, nr) /** * @warning @@ -152,10 +156,12 @@ extern "C" { * @param nr * The index of the bit. */ -#define rte_bit_set(addr, nr) \ - _Generic((addr), \ - uint32_t *: __rte_bit_set32, \ - uint64_t *: __rte_bit_set64)(addr, nr) +#define rte_bit_set(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_set32, \ + volatile uint32_t *: __rte_bit_v_set32, \ + uint64_t *: __rte_bit_set64, \ + volatile uint64_t *: __rte_bit_v_set64)(addr, nr) /** * @warning @@ -175,10 +181,12 @@ extern "C" { * @param nr * The index of the bit. */ -#define rte_bit_clear(addr, nr) \ - _Generic((addr), \ - uint32_t *: __rte_bit_clear32, \ - uint64_t *: __rte_bit_clear64)(addr, nr) +#define rte_bit_clear(addr, nr) \ + _Generic((addr), \ + uint32_t *: __rte_bit_clear32, \ + volatile uint32_t *: __rte_bit_v_clear32, \ + uint64_t *: __rte_bit_clear64, \ + volatile uint64_t *: __rte_bit_v_clear64)(addr, nr) /** * @warning @@ -202,7 +210,9 @@ extern "C" { #define rte_bit_assign(addr, nr, value) \ _Generic((addr), \ uint32_t *: __rte_bit_assign32, \ - uint64_t *: __rte_bit_assign64)(addr, nr, value) + volatile uint32_t *: __rte_bit_v_assign32, \ + uint64_t *: __rte_bit_assign64, \ + volatile uint64_t *: __rte_bit_v_assign64)(addr, nr, value) /** * @warning @@ -225,7 +235,9 @@ extern "C" { #define rte_bit_flip(addr, nr) \ _Generic((addr), \ uint32_t *: __rte_bit_flip32, \ - uint64_t *: __rte_bit_flip64)(addr, nr) + volatile uint32_t *: __rte_bit_v_flip32, \ + uint64_t *: __rte_bit_flip64, \ + volatile uint64_t *: __rte_bit_v_flip64)(addr, nr) /** * @warning @@ -250,9 +262,13 @@ extern "C" { _Generic((addr), \ uint32_t *: __rte_bit_atomic_test32, \ const uint32_t *: __rte_bit_atomic_test32, \ + volatile uint32_t *: __rte_bit_atomic_v_test32, \ + const volatile uint32_t *: __rte_bit_atomic_v_test32, \ uint64_t *: __rte_bit_atomic_test64, \ - const uint64_t *: __rte_bit_atomic_test64)(addr, nr, \ - memory_order) + const uint64_t *: __rte_bit_atomic_test64, \ + volatile uint64_t *: __rte_bit_atomic_v_test64, \ + const volatile uint64_t *: __rte_bit_atomic_v_test64) \ + (addr, nr, memory_order) /** * @warning @@ -274,7 +290,10 @@ extern "C" { #define rte_bit_atomic_set(addr, nr, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_set32, \ - uint64_t *: __rte_bit_atomic_set64)(addr, nr, memory_order) + volatile uint32_t *: __rte_bit_atomic_v_set32, \ + uint64_t *: __rte_bit_atomic_set64, \ + volatile uint64_t *: __rte_bit_atomic_v_set64)(addr, nr, \ + memory_order) /** * @warning @@ -296,7 +315,10 @@ extern "C" { #define rte_bit_atomic_clear(addr, nr, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_clear32, \ - uint64_t *: __rte_bit_atomic_clear64)(addr, nr, memory_order) + volatile uint32_t *: __rte_bit_atomic_v_clear32, \ + uint64_t *: __rte_bit_atomic_clear64, \ + volatile uint64_t *: __rte_bit_atomic_v_clear64)(addr, nr, \ + memory_order) /** * @warning @@ -320,8 +342,11 @@ extern "C" { #define rte_bit_atomic_assign(addr, nr, value, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_assign32, \ - uint64_t *: __rte_bit_atomic_assign64)(addr, nr, value, \ - memory_order) + volatile uint32_t *: __rte_bit_atomic_v_assign32, \ + uint64_t *: __rte_bit_atomic_assign64, \ + volatile uint64_t *: __rte_bit_atomic_v_assign64)(addr, nr, \ + value, \ + memory_order) /** * @warning @@ -344,7 +369,10 @@ extern "C" { #define rte_bit_atomic_flip(addr, nr, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_flip32, \ - uint64_t *: __rte_bit_atomic_flip64)(addr, nr, memory_order) + volatile uint32_t *: __rte_bit_atomic_v_flip32, \ + uint64_t *: __rte_bit_atomic_flip64, \ + volatile uint64_t *: __rte_bit_atomic_v_flip64)(addr, nr, \ + memory_order) /** * @warning @@ -368,8 +396,10 @@ extern "C" { #define rte_bit_atomic_test_and_set(addr, nr, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_test_and_set32, \ - uint64_t *: __rte_bit_atomic_test_and_set64)(addr, nr, \ - memory_order) + volatile uint32_t *: __rte_bit_atomic_v_test_and_set32, \ + uint64_t *: __rte_bit_atomic_test_and_set64, \ + volatile uint64_t *: __rte_bit_atomic_v_test_and_set64) \ + (addr, nr, memory_order) /** * @warning @@ -393,8 +423,10 @@ extern "C" { #define rte_bit_atomic_test_and_clear(addr, nr, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_test_and_clear32, \ - uint64_t *: __rte_bit_atomic_test_and_clear64)(addr, nr, \ - memory_order) + volatile uint32_t *: __rte_bit_atomic_v_test_and_clear32, \ + uint64_t *: __rte_bit_atomic_test_and_clear64, \ + volatile uint64_t *: __rte_bit_atomic_v_test_and_clear64) \ + (addr, nr, memory_order) /** * @warning @@ -421,9 +453,10 @@ extern "C" { #define rte_bit_atomic_test_and_assign(addr, nr, value, memory_order) \ _Generic((addr), \ uint32_t *: __rte_bit_atomic_test_and_assign32, \ - uint64_t *: __rte_bit_atomic_test_and_assign64)(addr, nr, \ - value, \ - memory_order) + volatile uint32_t *: __rte_bit_atomic_v_test_and_assign32, \ + uint64_t *: __rte_bit_atomic_test_and_assign64, \ + volatile uint64_t *: __rte_bit_atomic_v_test_and_assign64) \ + (addr, nr, value, memory_order) #define __RTE_GEN_BIT_TEST(variant, qualifier, size) \ __rte_experimental \ @@ -493,7 +526,8 @@ extern "C" { __RTE_GEN_BIT_FLIP(v, qualifier, size) #define __RTE_GEN_BIT_OPS_SIZE(size) \ - __RTE_GEN_BIT_OPS(,, size) + __RTE_GEN_BIT_OPS(,, size) \ + __RTE_GEN_BIT_OPS(v_, volatile, size) __RTE_GEN_BIT_OPS_SIZE(32) __RTE_GEN_BIT_OPS_SIZE(64) @@ -633,7 +667,8 @@ __RTE_GEN_BIT_OPS_SIZE(64) __RTE_GEN_BIT_ATOMIC_FLIP(variant, qualifier, size) #define __RTE_GEN_BIT_ATOMIC_OPS_SIZE(size) \ - __RTE_GEN_BIT_ATOMIC_OPS(,, size) + __RTE_GEN_BIT_ATOMIC_OPS(,, size) \ + __RTE_GEN_BIT_ATOMIC_OPS(v_, volatile, size) __RTE_GEN_BIT_ATOMIC_OPS_SIZE(32) __RTE_GEN_BIT_ATOMIC_OPS_SIZE(64) @@ -1342,120 +1377,178 @@ rte_log2_u64(uint64_t v) #undef rte_bit_atomic_test_and_clear #undef rte_bit_atomic_test_and_assign -#define __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, size, arg1_type, arg1_name) \ +#define __RTE_BIT_OVERLOAD_V_2(family, v, fun, c, size, arg1_type, arg1_name) \ static inline void \ - rte_bit_ ## fun(qualifier uint ## size ## _t *addr, \ - arg1_type arg1_name) \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ + arg1_type arg1_name) \ { \ - __rte_bit_ ## fun ## size(addr, arg1_name); \ + __rte_bit_ ## family ## v ## fun ## size(addr, arg1_name); \ } -#define __RTE_BIT_OVERLOAD_2(fun, qualifier, arg1_type, arg1_name) \ - __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, 32, arg1_type, arg1_name) \ - __RTE_BIT_OVERLOAD_SZ_2(fun, qualifier, 64, arg1_type, arg1_name) +#define __RTE_BIT_OVERLOAD_SZ_2(family, fun, c, size, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_V_2(family,, fun, c, size, arg1_type, \ + arg1_name) \ + __RTE_BIT_OVERLOAD_V_2(family, v_, fun, c volatile, size, \ + arg1_type, arg1_name) -#define __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, size, ret_type, arg1_type, \ - arg1_name) \ +#define __RTE_BIT_OVERLOAD_2(family, fun, c, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2(family, fun, c, 32, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2(family, fun, c, 64, arg1_type, arg1_name) + +#define __RTE_BIT_OVERLOAD_V_2R(family, v, fun, c, size, ret_type, arg1_type, \ + arg1_name) \ static inline ret_type \ - rte_bit_ ## fun(qualifier uint ## size ## _t *addr, \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ arg1_type arg1_name) \ { \ - return __rte_bit_ ## fun ## size(addr, arg1_name); \ + return __rte_bit_ ## family ## v ## fun ## size(addr, \ + arg1_name); \ } -#define __RTE_BIT_OVERLOAD_2R(fun, qualifier, ret_type, arg1_type, arg1_name) \ - __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, 32, ret_type, arg1_type, \ +#define __RTE_BIT_OVERLOAD_SZ_2R(family, fun, c, size, ret_type, arg1_type, \ + arg1_name) \ + __RTE_BIT_OVERLOAD_V_2R(family,, fun, c, size, ret_type, arg1_type, \ + arg1_name) \ + __RTE_BIT_OVERLOAD_V_2R(family, v_, fun, c volatile, \ + size, ret_type, arg1_type, arg1_name) + +#define __RTE_BIT_OVERLOAD_2R(family, fun, c, ret_type, arg1_type, arg1_name) \ + __RTE_BIT_OVERLOAD_SZ_2R(family, fun, c, 32, ret_type, arg1_type, \ arg1_name) \ - __RTE_BIT_OVERLOAD_SZ_2R(fun, qualifier, 64, ret_type, arg1_type, \ + __RTE_BIT_OVERLOAD_SZ_2R(family, fun, c, 64, ret_type, arg1_type, \ arg1_name) -#define __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, size, arg1_type, arg1_name, \ - arg2_type, arg2_name) \ +#define __RTE_BIT_OVERLOAD_V_3(family, v, fun, c, size, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ static inline void \ - rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ - arg2_type arg2_name) \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ + arg1_type arg1_name, arg2_type arg2_name) \ { \ - __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name); \ + __rte_bit_ ## family ## v ## fun ## size(addr, arg1_name, \ + arg2_name); \ } -#define __RTE_BIT_OVERLOAD_3(fun, qualifier, arg1_type, arg1_name, arg2_type, \ +#define __RTE_BIT_OVERLOAD_SZ_3(family, fun, c, size, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_V_3(family,, fun, c, size, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_V_3(family, v_, fun, c volatile, size, arg1_type, \ + arg1_name, arg2_type, arg2_name) + +#define __RTE_BIT_OVERLOAD_3(family, fun, c, arg1_type, arg1_name, arg2_type, \ arg2_name) \ - __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, 32, arg1_type, arg1_name, \ + __RTE_BIT_OVERLOAD_SZ_3(family, fun, c, 32, arg1_type, arg1_name, \ arg2_type, arg2_name) \ - __RTE_BIT_OVERLOAD_SZ_3(fun, qualifier, 64, arg1_type, arg1_name, \ + __RTE_BIT_OVERLOAD_SZ_3(family, fun, c, 64, arg1_type, arg1_name, \ arg2_type, arg2_name) -#define __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, size, ret_type, arg1_type, \ - arg1_name, arg2_type, arg2_name) \ +#define __RTE_BIT_OVERLOAD_V_3R(family, v, fun, c, size, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name) \ static inline ret_type \ - rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ - arg2_type arg2_name) \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ + arg1_type arg1_name, arg2_type arg2_name) \ { \ - return __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name); \ + return __rte_bit_ ## family ## v ## fun ## size(addr, \ + arg1_name, \ + arg2_name); \ } -#define __RTE_BIT_OVERLOAD_3R(fun, qualifier, ret_type, arg1_type, arg1_name, \ - arg2_type, arg2_name) \ - __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, 32, ret_type, arg1_type, \ +#define __RTE_BIT_OVERLOAD_SZ_3R(family, fun, c, size, ret_type, arg1_type, \ arg1_name, arg2_type, arg2_name) \ - __RTE_BIT_OVERLOAD_SZ_3R(fun, qualifier, 64, ret_type, arg1_type, \ - arg1_name, arg2_type, arg2_name) + __RTE_BIT_OVERLOAD_V_3R(family,, fun, c, size, ret_type, \ + arg1_type, arg1_name, arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_V_3R(family, v_, fun, c volatile, size, \ + ret_type, arg1_type, arg1_name, arg2_type, \ + arg2_name) -#define __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, size, arg1_type, arg1_name, \ - arg2_type, arg2_name, arg3_type, arg3_name) \ +#define __RTE_BIT_OVERLOAD_3R(family, fun, c, ret_type, arg1_type, arg1_name, \ + arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3R(family, fun, c, 32, ret_type, \ + arg1_type, arg1_name, arg2_type, arg2_name) \ + __RTE_BIT_OVERLOAD_SZ_3R(family, fun, c, 64, ret_type, \ + arg1_type, arg1_name, arg2_type, arg2_name) + +#define __RTE_BIT_OVERLOAD_V_4(family, v, fun, c, size, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) \ static inline void \ - rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ - arg2_type arg2_name, arg3_type arg3_name) \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ + arg1_type arg1_name, arg2_type arg2_name, \ + arg3_type arg3_name) \ { \ - __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name, \ - arg3_name); \ + __rte_bit_ ## family ## v ## fun ## size(addr, arg1_name, \ + arg2_name, \ + arg3_name); \ } -#define __RTE_BIT_OVERLOAD_4(fun, qualifier, arg1_type, arg1_name, arg2_type, \ - arg2_name, arg3_type, arg3_name) \ - __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, 32, arg1_type, arg1_name, \ +#define __RTE_BIT_OVERLOAD_SZ_4(family, fun, c, size, arg1_type, arg1_name, \ arg2_type, arg2_name, arg3_type, arg3_name) \ - __RTE_BIT_OVERLOAD_SZ_4(fun, qualifier, 64, arg1_type, arg1_name, \ - arg2_type, arg2_name, arg3_type, arg3_name) - -#define __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, size, ret_type, arg1_type, \ - arg1_name, arg2_type, arg2_name, arg3_type, \ - arg3_name) \ + __RTE_BIT_OVERLOAD_V_4(family,, fun, c, size, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ + __RTE_BIT_OVERLOAD_V_4(family, v_, fun, c volatile, size, \ + arg1_type, arg1_name, arg2_type, arg2_name, \ + arg3_type, arg3_name) + +#define __RTE_BIT_OVERLOAD_4(family, fun, c, arg1_type, arg1_name, arg2_type, \ + arg2_name, arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4(family, fun, c, 32, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4(family, fun, c, 64, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) + +#define __RTE_BIT_OVERLOAD_V_4R(family, v, fun, c, size, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ static inline ret_type \ - rte_bit_ ## fun(uint ## size ## _t *addr, arg1_type arg1_name, \ - arg2_type arg2_name, arg3_type arg3_name) \ + rte_bit_ ## family ## fun(c uint ## size ## _t *addr, \ + arg1_type arg1_name, arg2_type arg2_name, \ + arg3_type arg3_name) \ { \ - return __rte_bit_ ## fun ## size(addr, arg1_name, arg2_name, \ - arg3_name); \ + return __rte_bit_ ## family ## v ## fun ## size(addr, \ + arg1_name, \ + arg2_name, \ + arg3_name); \ } -#define __RTE_BIT_OVERLOAD_4R(fun, qualifier, ret_type, arg1_type, arg1_name, \ - arg2_type, arg2_name, arg3_type, arg3_name) \ - __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, 32, ret_type, arg1_type, \ +#define __RTE_BIT_OVERLOAD_SZ_4R(family, fun, c, size, ret_type, arg1_type, \ arg1_name, arg2_type, arg2_name, arg3_type, \ arg3_name) \ - __RTE_BIT_OVERLOAD_SZ_4R(fun, qualifier, 64, ret_type, arg1_type, \ - arg1_name, arg2_type, arg2_name, arg3_type, \ - arg3_name) - -__RTE_BIT_OVERLOAD_2R(test, const, bool, unsigned int, nr) -__RTE_BIT_OVERLOAD_2(set,, unsigned int, nr) -__RTE_BIT_OVERLOAD_2(clear,, unsigned int, nr) -__RTE_BIT_OVERLOAD_3(assign,, unsigned int, nr, bool, value) -__RTE_BIT_OVERLOAD_2(flip,, unsigned int, nr) - -__RTE_BIT_OVERLOAD_3R(atomic_test, const, bool, unsigned int, nr, + __RTE_BIT_OVERLOAD_V_4R(family,, fun, c, size, ret_type, arg1_type, \ + arg1_name, arg2_type, arg2_name, arg3_type, \ + arg3_name) \ + __RTE_BIT_OVERLOAD_V_4R(family, v_, fun, c volatile, size, \ + ret_type, arg1_type, arg1_name, arg2_type, \ + arg2_name, arg3_type, arg3_name) + +#define __RTE_BIT_OVERLOAD_4R(family, fun, c, ret_type, arg1_type, arg1_name, \ + arg2_type, arg2_name, arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4R(family, fun, c, 32, ret_type, \ + arg1_type, arg1_name, arg2_type, arg2_name, \ + arg3_type, arg3_name) \ + __RTE_BIT_OVERLOAD_SZ_4R(family, fun, c, 64, ret_type, \ + arg1_type, arg1_name, arg2_type, arg2_name, \ + arg3_type, arg3_name) + +__RTE_BIT_OVERLOAD_2R(, test, const, bool, unsigned int, nr) +__RTE_BIT_OVERLOAD_2(, set,, unsigned int, nr) +__RTE_BIT_OVERLOAD_2(, clear,, unsigned int, nr) +__RTE_BIT_OVERLOAD_3(, assign,, unsigned int, nr, bool, value) +__RTE_BIT_OVERLOAD_2(, flip,, unsigned int, nr) + +__RTE_BIT_OVERLOAD_3R(atomic_, test, const, bool, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_3(atomic_set,, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_3(atomic_clear,, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_4(atomic_assign,, unsigned int, nr, bool, value, +__RTE_BIT_OVERLOAD_3(atomic_, set,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_3(atomic_, clear,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_4(atomic_, assign,, unsigned int, nr, bool, value, int, memory_order) -__RTE_BIT_OVERLOAD_3(atomic_flip,, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_3R(atomic_test_and_set,, bool, unsigned int, nr, +__RTE_BIT_OVERLOAD_3(atomic_, flip,, unsigned int, nr, int, memory_order) +__RTE_BIT_OVERLOAD_3R(atomic_, test_and_set,, bool, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_3R(atomic_test_and_clear,, bool, unsigned int, nr, +__RTE_BIT_OVERLOAD_3R(atomic_, test_and_clear,, bool, unsigned int, nr, int, memory_order) -__RTE_BIT_OVERLOAD_4R(atomic_test_and_assign,, bool, unsigned int, nr, +__RTE_BIT_OVERLOAD_4R(atomic_, test_and_assign,, bool, unsigned int, nr, bool, value, int, memory_order) #endif