From patchwork Tue Sep 10 06:20:46 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: 143839 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 DDA2F45952; Tue, 10 Sep 2024 08:31:14 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CF53D427B4; Tue, 10 Sep 2024 08:30:28 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2063.outbound.protection.outlook.com [40.107.21.63]) by mails.dpdk.org (Postfix) with ESMTP id BB9C942795 for ; Tue, 10 Sep 2024 08:30:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wvUEE4OhNKHw2N93LPNnU04lf+dEUi5nXVaxUVPl/xhV+ACrkB0itWgn/U+YyPfioZF8vZhxv+DNPNThJw/MzIIMPjulpQJppLM9R7/o6JDb/2DWMrQiplnjKiNGESwS8lInSpzLkSIMD6ZnHTgpjvIb20+pgyNV4QbpAbFmLhgo0rNe0hED494Fchhp+Ddyw/TeYtJpHqKsl5jAWKsnIqUacfTx/Mm69w0/oODF6eM448gu0rt+drUoew+OMGAksyzV7cXjE+6XvZUGHLGzz0inBiorF9Ak5Fc+qXr1v2pvaAnzIpRcSgTG+C0mtDuO1Vr+PgT/gdfwYpIDrRSQow== 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=5hJQoJxhgBMuJBql7IstLv1AhtEavjHsF+KPl58gl9c=; b=yVNoP9QsLwXk4quCjEBdulEY3NgqxxeHJ1pfXbDs2sSczXxECDqgGEHzsb3nBEACM88Zw9Ardx4JYHtLbl7wbDbePoyHnxdo7nEKGI/P887rBSdP+P4O503zB7HnxCDn28lzbTlx65/Z+LcTfIUSUZuvMdgN1PUBP4XsfOvpxKwbUnryle6RapgE91qkpvFx/qvSbPqwWtqj9gNpmA28UmUJOwp+qhV5nCUrDXhFZcYk5janpCaIT7pyfwkFNrMIZr7q0r/ts+C3wwYKU35GLGB0Cam91iG261IaZ67Gvy6lyvUaVhBPhy4+VSrA1aTF1n7br0nBv4RB10Owf306pw== 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=5hJQoJxhgBMuJBql7IstLv1AhtEavjHsF+KPl58gl9c=; b=mNzirLFPIuRQneoVAnVHRrh2HbNl/ZGTbyjHgZ8nFXO9eCVeFUd9BVoFPzByIZ3S7bnfPt3P1XgaYidmsari3a2z9b/1vndfC7ESEYS2BFFxmsHYMzfSdFK73OC5BksF+36PvMNElHnXl08gMn6rpkOiNMxhcRwmsyCccHiryHB+wZZutswsZK8G1y8SD8ngBV+RO7EfH1qIuWdBviM8PhU1VAReC96uP4OqKEMFOg7gpAJFv8BlWyTKNyqtXagKaaTsbwwrGDib6KEGtCWB8w1NXyLjWUBfT/P7EP+etQq3ISfoPAAkxzDK4CVgyYEnARWtO/oTwhZQt8oRgbUWqA== Received: from DU2PR04CA0064.eurprd04.prod.outlook.com (2603:10a6:10:232::9) by DU0PR07MB8467.eurprd07.prod.outlook.com (2603:10a6:10:356::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.23; Tue, 10 Sep 2024 06:30:15 +0000 Received: from DU2PEPF00028D05.eurprd03.prod.outlook.com (2603:10a6:10:232:cafe::f) by DU2PR04CA0064.outlook.office365.com (2603:10a6:10:232::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24 via Frontend Transport; Tue, 10 Sep 2024 06:30:15 +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 DU2PEPF00028D05.mail.protection.outlook.com (10.167.242.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:15 +0000 Received: from seliicinfr00050.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; Tue, 10 Sep 2024 08:30:12 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id 7A3F51C006B; Tue, 10 Sep 2024 08:30:12 +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 v5 1/6] dpdk: do not force C linkage on include file dependencies Date: Tue, 10 Sep 2024 08:20:46 +0200 Message-ID: <20240910062051.699096-2-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D05:EE_|DU0PR07MB8467:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e0c6d04-ae91-48c5-3191-08dcd162080b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?ne1OyUCASzD55JitoVmQ/Hw+EqmTJ0X?= =?utf-8?q?PZgiMh/KBfyToz1Bkl9myx+b6UKmd5mjT5ci5rI0n2CQufriTwpTLbVGY6SOfE5X2?= =?utf-8?q?kpvn9sCPk8emmzr5KuKOsCDpEY7cfj7OIst4Cb60V23/mLiHiHBkbecMch+fx7Nyx?= =?utf-8?q?+/2vzY40BnegVp6SGZuUGYAwrt98C68fZ0VlWYuGA4v7XOSTrTcKVH18JzHZ58WTL?= =?utf-8?q?yiXSUGun0VKtLsMzM/bcZaHdD5Rev2NvclAPgC6hxwJUsScFshloLUqIoi6TaWB27?= =?utf-8?q?eoYiUYm01gXNBzWTlfioDXBpVOuQx+718hs7/iLZrGxjoomcjcvl6vQ4/F4vemD0K?= =?utf-8?q?T2w5SnG5Ca4XnlBhLG6KgPtS3pGwe+gH6SgUe5xNLxp464am2d1QvHqfMmy+iCa4D?= =?utf-8?q?yZhzIeBf6KYE2y+TSFCNc5UQzAr/AMPoLiC11pZ7oGCiWzhf1s5LhNQ8hD5q2t7i7?= =?utf-8?q?pwBpeuy+i/4R+XgIKv7czt0TPet+U9t6xBsqarUON5UOYEi9GLQgBhO32W99n0Dcu?= =?utf-8?q?zhQjFrynCmX6st4r6Y2zlX+fc/w3O2KWam2VhppL+6E/cnqKP0x5n+yGrAEg06zS7?= =?utf-8?q?foJeYtd/ysNx5OMeVJxsUiUYQm2p2K9vhUOAA+s3Owx17Eo7OPgeJqynga/9ITBfB?= =?utf-8?q?eHDMKHx2TrC1uWHgLadeiCLsy4K5KThgBR5edocYDpN1ibeElZaa2QR3i5TOkrF3v?= =?utf-8?q?hvg0TtracTGLd0ESa1R5jYJbNt/kxJ03VwSmLLA7wKkpG54hf3TcOgOfTtTGmj3Nn?= =?utf-8?q?uyjl7hCVNO6stNRBV81Ewu0o9+WC21LIp3PvffPtJB/45tAikzrSDirF6z0x2gTWq?= =?utf-8?q?ZxHlx9YUWxYKgi3rVTsXOvuA87OFVJh8h2uRR0pCwZVtVNACeqxhF9MPqJMPJ1n40?= =?utf-8?q?FyPe22h/qUXPG4cBBStmFD+SNotdfIpqg9Prz44p5w/kC05knL2vNFB35HqH9UhTP?= =?utf-8?q?0K/Z8PuW4YL89Ch1FrzJCGM1RdzKS/YOWprRz6DEOREA5Vi0Ngh/62U+6prNGkFCr?= =?utf-8?q?fkb9fbKb+JWRFfQ6RMI1CgGusg3Ed5XXIpSetrx1MhDDMHjjDJ7N8dsy46MsDTaLu?= =?utf-8?q?mzuFg0nKRYFZh4iVqIcpZpxJLV8Uuto5IgzhojW0eVhA4P6Ds7AjJXVqRAHv3XzxF?= =?utf-8?q?XKxZPFYUT7IW1D2jAyuxOLe2PIHvP8J2CxFh2bmxFGENmshpCC+JBH/2AbYL9eUqQ?= =?utf-8?q?mDF6VuSpriR9AVTbZVbEB9Vkl/aNX+7Kgol28hSd+pWSW+YVy3ibNOwTswk+zXsSo?= =?utf-8?q?Lo2SAFYSgMqR9DKUqBojqaLUDx2Uvk5s8FDybAZNXob5R6GH41smgR0/R1MMDGP/g?= =?utf-8?q?S9gLE3ZuZLTV?= 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)(376014)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:15.0938 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7e0c6d04-ae91-48c5-3191-08dcd162080b 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: DU2PEPF00028D05.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR07MB8467 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 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 | 8 ++++---- 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_byteorder.h | 8 ++++++++ lib/eal/include/generic/rte_cycles.h | 8 ++++++++ lib/eal/include/generic/rte_memcpy.h | 8 ++++++++ lib/eal/include/generic/rte_pause.h | 8 ++++++++ lib/eal/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/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 | 8 ++++---- 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 | 8 ++++---- 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 ++++---- 278 files changed, 1036 insertions(+), 975 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..658768697c 100644 --- a/lib/eal/arm/include/rte_io.h +++ b/lib/eal/arm/include/rte_io.h @@ -5,14 +5,14 @@ #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" + +#ifdef __cplusplus +extern "C" { +#endif #endif #ifdef __cplusplus 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..c7d0c345ad 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() diff --git a/lib/eal/arm/include/rte_pause.h b/lib/eal/arm/include/rte_pause.h index 6c7002ad98..8f35d60a6e 100644 --- a/lib/eal/arm/include/rte_pause.h +++ b/lib/eal/arm/include/rte_pause.h @@ -5,14 +5,14 @@ #ifndef _RTE_PAUSE_ARM_H_ #define _RTE_PAUSE_ARM_H_ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef RTE_ARCH_64 #include #else #include + +#ifdef __cplusplus +extern "C" { +#endif #endif #ifdef __cplusplus 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_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_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_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/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..06b249dca0 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 @@ -36,6 +32,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + #define VFIO_DIR "/dev/vfio" #define VFIO_CONTAINER_PATH "/dev/vfio/vfio" #define VFIO_GROUP_FMT "/dev/vfio/%u" 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..ad571ad132 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 @@ -279,6 +275,10 @@ static inline int rte_atomic32_dec_and_test(rte_atomic32_t *v) #include "rte_atomic_32.h" #else #include "rte_atomic_64.h" + +#ifdef __cplusplus +extern "C" { +#endif #endif #endif 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..5632dec73e 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) 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..5234c1697f 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 @@ -16,6 +12,10 @@ extern "C" { #include +#ifdef __cplusplus +extern "C" { +#endif + #endif /** 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 Tue Sep 10 06:20:47 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: 143837 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 34C0B45952; Tue, 10 Sep 2024 08:30:59 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2796E42791; Tue, 10 Sep 2024 08:30:25 +0200 (CEST) Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2051.outbound.protection.outlook.com [40.107.241.51]) by mails.dpdk.org (Postfix) with ESMTP id 9F5D042759 for ; Tue, 10 Sep 2024 08:30:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N8vRZvQM592f6QRJT7lYeu75wNyiXKjUHJpM0IPomt55F6H6jzDhFIWoGbskMJpdHcM5Tn0cTjuf6TtQm9pqTwJWEznQVZ1UP/hxy+j+frvVhRiHv7ZaAtoYHVeSVm8YjqXNe1cqX2eWDDlN1vJJ2dSXt8w5BQxLdV7XrQX/FrdO2U1ocN3+wdV1jxVLSFDrNkKKG/BkWer0z6DKkF+5Aegi80laLG3iBSwyLw/KOZaeWhU8EpVq/BLc/QGNo4W7V5dWn0eAOqoCErlgJO51nJdl+KobYCB5LGhVhc+g6Wafz5vBjbTuBTgBmFccHewatL+xoi2PhpqWpAupbLYkgw== 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=Ra3pbQv9m1eDwoNReOF5l8MtJm55DD+bqjSfJTrFlPi7Q0mPM5ubRqPBAq1RIoAK0itNg36B8u7ULqg2ei7ii7DgBYcfWrL7McSMKemdi9MXY7XeqeeATH4XlLr4HSRTXShZ3ahyxAQ0GZcPFfbhyX/NofA1sjsdZwqTvwS5yjqhnGsuX80rf6q/7unNEzN/FMymzvJaGw0/vWdCuSp/EPfITA9/n5GKOcvrWJdp5UGKeA1V4E7YV9RDAeliEyZE4n4jcSaZWKhmdJy8BQyNRLmfCa/lA8jIXT71yyvrK+PnF/cr5OiwxkaSkISHXMMqf8VCnn0GoKDU/6NZByoOgw== 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=WRc78rYrHf8oS02biw+ldeYAUX0bh1D0TeY/ccuT6AKjcnoKm55EGFlIp0wJH9MMC8QOMZljNPQw5sG1e9k224IRpfnwQS9k5yLwJOKkAlb7YT6NfpDl9i5nLrb9zsFmY10jM+FmU5NiWddjl6FjYyq5B33jPX+CFGwpb4rqsvLxRGnjByKBh6Pg2dxYcLs+Z0e6laITcItB60ZOWtOfNBdKP+Bm+zc4I/X7sScNsLZ2WEdCDkYssCXYpu1rQ18q17rqlmZXQ19ss62PCv5JduoqYqj9qRJsHnEyJ/1DvR7ByeWzuFUpKLWdGDI+NahcCZJ4Thxu+hW9lLvq+qLvkA== Received: from DU2PR04CA0074.eurprd04.prod.outlook.com (2603:10a6:10:232::19) by PA4PR07MB7277.eurprd07.prod.outlook.com (2603:10a6:102:fa::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24; Tue, 10 Sep 2024 06:30:14 +0000 Received: from DU2PEPF00028D05.eurprd03.prod.outlook.com (2603:10a6:10:232:cafe::9e) by DU2PR04CA0074.outlook.office365.com (2603:10a6:10:232::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24 via Frontend Transport; Tue, 10 Sep 2024 06:30:14 +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 DU2PEPF00028D05.mail.protection.outlook.com (10.167.242.165) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:13 +0000 Received: from seliicinfr00050.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; Tue, 10 Sep 2024 08:30:12 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id A583D1C006A; Tue, 10 Sep 2024 08:30:12 +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 v5 2/6] eal: extend bit manipulation functionality Date: Tue, 10 Sep 2024 08:20:47 +0200 Message-ID: <20240910062051.699096-3-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PEPF00028D05:EE_|PA4PR07MB7277:EE_ X-MS-Office365-Filtering-Correlation-Id: e66e3a45-eab8-466e-1728-08dcd16206ed X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?i4wGKvk2KrCpaAfui/INTkCznPX8mY/?= =?utf-8?q?uPhZ1Db8c6dMoMavym0pTIOZEC8HqVT2hP2XBGwYQVibja2d/jILXvPw0W6/zSJRP?= =?utf-8?q?eAkvJ8HaH/XHOlXOh0+NUQG4f+eSJ8yeFIR1H63i9f0ze4z0I5AffFvVMU9ok4XsM?= =?utf-8?q?v9W7+vbseZO8yKdSajybVI3Cz6MyxIoyFieBS/Tn2HuMXfy7P40OKZ5WXtWOmaE5q?= =?utf-8?q?GcLZcVS8S1QsgYiWIH8iG9CQ4gl5hjzXGwe2VfzDskCVQ6ddMuz0ukkmhBEdWQewv?= =?utf-8?q?gYDhiQVacE5Padp7+iTvPiOJRMOUUoA/OLiXSk0ml3dupI9zMGvlHdnMyYECn6htO?= =?utf-8?q?EE0T0jRdiB8o/EOf1KPTREenR4CU3dmrKvB9v6GOmas6MPW8eDWnnIFx2wA4t7ZNn?= =?utf-8?q?KTVfitoGfoyb8X3RMQ3c0xBOAn2p9pXya8Hi5DoIJVqUSULBC3Tvjbh4ww/m8WkP7?= =?utf-8?q?itG6usAeEFzl+qiohUdeA/TvZ5US298vyXiyybh0txjY/b2X8VVPQ7lMRUAZxecK+?= =?utf-8?q?wzFZ8nYhJfkwCealPm9dSL/6EHFvhWyX/X2LAPHKwBY2Mjldcjgsb3cWc5UmGR4UF?= =?utf-8?q?pNdHeuCqWaQYyyLHKxZ74dPhDghtMFZfJkQYto14ahEGWt3JCs6qwedNWef9D/Tdj?= =?utf-8?q?2hrsfrtHDB9CdiqpGeld1yQESchUvccg56ZrLF5wQNdW0sEip/I4t73WfR1ZZiFyS?= =?utf-8?q?LiU5aK+WB9IRrphyaKkbVsBrdmvdmA0hEp/wOcMLvEFHXCnxJaisGl39u3AJJ6xrh?= =?utf-8?q?zVoR9d+qjTpaNl7F4eqKTWcp++ydEAaS08unEJX41FH/0S1mhSdZioWwLLQ+7tpUu?= =?utf-8?q?vGqu+0qqE2v6+gl0m0pg+B1BuArPxZAlDuY9j8jkdNel8du6AqJA4QUQAnXI8Vd37?= =?utf-8?q?xdU3RZ4LFevyhYbG9hnho2KhiKD0/LahiWNG7DfqpUkayezD8LmCWtMb9engSzQLT?= =?utf-8?q?7GeQFJwoQlIJDy/66KQ3IPLf6tnSdMhM0i92iXikcA/GEY1MFnXMcJhEFUxmPakEq?= =?utf-8?q?t1QNvC7CYsQ+HSD6PBvzoE7sccDOz3gzz/u0Hjtji+FhQp/nn2UDW6I49x9RMe6+S?= =?utf-8?q?Rzg4Xa4N78++T7xCGpSQBZ3/+nV9WF+qjp0NJv2A7Da51XikiTQs9qsp1W+6WvRny?= =?utf-8?q?7rYGoiwCln3NR6CqGW/Me/GlLDxzJGAcyP89lFbR3RhqBBvCbNDmH+PnR8vEorzzI?= =?utf-8?q?PWE9QavbF9+dADj+4GRFNyx43quq0NcZIqKgZyJVd67Ud40E/1ojROjaK4Z6pmRv0?= =?utf-8?q?or3ykIdWC4R+EeMvHS8RCjoq5rLPsn1/LWHRhbbLrMw+1NYgKxwwPqjZh0wd+wWrl?= =?utf-8?q?C5hfE88UV1LU3gRdIjhby3HMk5w17HK/Wmpa/SbpfLuBGIbhvbb3n5GHxGwXuiDts?= =?utf-8?q?X2Zcuhik9y2?= 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)(82310400026)(36860700013)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:13.2188 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e66e3a45-eab8-466e-1728-08dcd16206ed 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: DU2PEPF00028D05.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR07MB7277 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 Tue Sep 10 06:20:48 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: 143834 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 9F07545952; Tue, 10 Sep 2024 08:30:26 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C28842789; Tue, 10 Sep 2024 08:30:20 +0200 (CEST) Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2065.outbound.protection.outlook.com [40.107.104.65]) by mails.dpdk.org (Postfix) with ESMTP id EB6B74021F for ; Tue, 10 Sep 2024 08:30:17 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FYU1lSR7ysow+Qr29YV4tVGMNdESGaAZbkkoJemU1BTLk56VXC3MZzf2P1NHkoIed/YehOirUL0gtQVbppra+/VA8qEd4WSUDYJGc3z+51E7Xmdq9MveuPaWBWWwjiZeiLHSfQe1wiAtL01PDnt1Cw6tnMGqh6Gx861wVNdXIWPfPbpVIKPu3d2WGYAzJMhePPrfTHzOUyDGyUwAZiQINouwG0ezqIxi0GdGmvRANkieasg96d6em3kh/U4GO5xorUSeUd/qCLbEbLeTQdgtb1VO2xExEUAjnxyjcn8W6q8H/PSoMGPsoxJ8ewHnGp6m10o+sphESGFRf0x+aErsew== 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=I8hJuRbEfBK+RRSwrXLYnvYUWxx79aQXZTfSo08ItWD+lOTVpm0ZQKaFrf0B8dd3ImpI1mWHUFz/AgNisxUbEEqeobqHDwxA+yt881C1scgBwKyIrLODr4wugL6RUxowenFb5RzfGWruG7OCo3J5UHg6GOUN12Iz3O61SKCtFRSYvB7Yg730UYsqzvzp6MG46OQ0pfX4GDPvj/3eQvA3lPuXXzZGQFLQO3rw1WV4c8Lm8AUrRz0+eohR9CbtnSQOrf8GtVgo4+c7PPsuajKr3HpCLgkTZKwspmxpZEZE3YaneVn8h6w8tHvRiwA8u6BZOfK2aj5gUOGzhFn2dFzZAQ== 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=mZd3GNcrkhP8n/pgQP0xHE5/vDNXN4QHi1bYA0vkBuGfY4WRhLpS5gnc6mxz2uEidRUTqt5rP72Q9E4aDN/bzbSQc5u2H3hImdNQBazjZxSOno5Sw0A1Ck9fOcfwRWCo+QiklEIzueNFnxbAw07HEVA6/L30uabHWPrdtBUXNzgcJ1zwHqK7vBN063nHxem5wlrf2ADmvkjTCShi3lIQLGvpqFS6+eyrTxMkSQC0EqLQ5CX98IPWkCdZ4sVRkvB3fIdqYykjJQuzEnELhvh2CUYiKhM+n5LQBHvY8SCwlkaCdTVO/gOIdwNsL90GZXDhLTrdMaug2TiNY0f0boBM2w== Received: from AS4P191CA0005.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d5::15) by DB9PR07MB7866.eurprd07.prod.outlook.com (2603:10a6:10:2a9::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24; Tue, 10 Sep 2024 06:30:13 +0000 Received: from AM4PEPF00027A64.eurprd04.prod.outlook.com (2603:10a6:20b:5d5:cafe::44) by AS4P191CA0005.outlook.office365.com (2603:10a6:20b:5d5::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.25 via Frontend Transport; Tue, 10 Sep 2024 06:30:13 +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 AM4PEPF00027A64.mail.protection.outlook.com (10.167.16.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:13 +0000 Received: from seliicinfr00050.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.64) with Microsoft SMTP Server id 15.2.1544.11; Tue, 10 Sep 2024 08:30:12 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id B90611C006D; Tue, 10 Sep 2024 08:30:12 +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 v5 3/6] eal: add unit tests for bit operations Date: Tue, 10 Sep 2024 08:20:48 +0200 Message-ID: <20240910062051.699096-4-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM4PEPF00027A64:EE_|DB9PR07MB7866:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f499a2d-579c-411b-b4a1-08dcd16206ee X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?q?vGt0Plpsv1iFbUD1jxWofuDvygcd5dk?= =?utf-8?q?c0MXn4dDlsRWBrtigaClcF2YfpuGEZClcp7T0WPqIWZnf6dZVd1rTcabiWIKyfjFi?= =?utf-8?q?QqcitjPS1iUwFW/cvipQltYIAa6rrB4TIDSpTS4Iuzksms2gUMBFbtICrwlJPCZ+D?= =?utf-8?q?fNCvVKrc9v1XusIbi77lZHukrSoi84ZeMATGKbZBfbh+Q8phBmchKS+XnzPqJSioC?= =?utf-8?q?36k0V+CYCKumj2IrJCmO4auboNdl6nXEVHbfgbKdO7GA/M+KxI7ORmCIy1J/T2Ez8?= =?utf-8?q?FUEGZPAayKVB+9RwFr6e7bv5jNMCxqMTRCQzQTTpijjahE0jEvahdyFlcZspCi2y/?= =?utf-8?q?988rFxW2b39OzUttQ5/Ayansrk/lpRDAFS2bHYLQoOgUIhGNYCbeiTL8TXGQgETRG?= =?utf-8?q?t4ddYKZ9r9B3VIc9GZvjjBPytGvA2NAMaFVQM+T+gA32JAvyuhKQGriaDbLrJihyZ?= =?utf-8?q?N+XNdGs3SyFovZLrlw5SzwEmVPiCj17Qe8Z2wGB3WFgHXc+0effNa7xsKqc3p+sP8?= =?utf-8?q?o4ysKPJqp3fJXYfzuPdvFjvoHgwy1Oxy5YjvqVsCXD0z0yJWtHpj46+mZdamqIGO3?= =?utf-8?q?diKFpLqtPx6s7ixoMRW3gkk7GnOfC7oItPiAbuJ0wpnplKy+m5x/UpS7H/ltF2uru?= =?utf-8?q?VCvsC/pLjEHA5QJ/T/rG7IrP5F6JZ2Vl4+jVASYaDo82wT98aNJslf011gNtX5EEK?= =?utf-8?q?9IdFx7KfvUs8fjNhJXn1MT8bDIvq4t8MznuEQeWRY46PidYRmyaSa1drF3NxctkN6?= =?utf-8?q?SeWr01KMqEI/gqzRmgkgOPDPK2bkTGL9IGWtO3mmRbNzwa0dbmZq6hhX2ueWfQLX3?= =?utf-8?q?HSz90sXKNkUd/Rxi7tFLO3oz5UQTC3c2UdFDxDHw68p35zr5JiDoz48JklkzB+Y8c?= =?utf-8?q?oMt2OEDZBzioGNLsOObVm1+bxLt1o6p3btUTRuA/lTIlA088mvKYg9goOhlpTjmnT?= =?utf-8?q?T9OFdbAtUbZ93R2JnFmyBiBUzQVcuOfOBFH5GCoq4RMdedavI+AKwtUrtSwBbTDlK?= =?utf-8?q?wRO+wqnprdXub5sAAz9ujXrNyZC4LAoLAaa7XUhB0UJBqqPvXB5z3wYmcb9em2K16?= =?utf-8?q?c0kPZlqzsxAQul96EHGMACYLVMZrLeUuBaiVhZuM3wmGbxiHAFqvcd9Jyqo3YKKOh?= =?utf-8?q?O4jCG80Wot3MP+wAhE6xVX9zYU0lpf1KS5H6PIkO2ZkNe1ufN+dbCQjEbskdY0YsP?= =?utf-8?q?kHyz0R+66TQ62aM5ek54SvkjY+L7xLTPGvtjuY43Tso8nECvaezrcN/IMw/3YTuvJ?= =?utf-8?q?hnmUvj7qbVQjUl/G1PjF3kCEIJVurbZIRvPw84tD8u1+JA1UYKUj7Pu0KkoyFNCZT?= =?utf-8?q?B8gYpqUIMkyW8b2Z7fHRaUEkKen3v2qsSkDPX8JgEBR8B/deyHUQMF8zI6XFKPzTp?= =?utf-8?q?yun26Tmc1Ai?= 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)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:13.2606 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0f499a2d-579c-411b-b4a1-08dcd16206ee 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: AM4PEPF00027A64.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR07MB7866 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 Tue Sep 10 06:20:49 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: 143838 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 8A7C545952; Tue, 10 Sep 2024 08:31:06 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 70B40427A7; Tue, 10 Sep 2024 08:30:26 +0200 (CEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2045.outbound.protection.outlook.com [40.107.21.45]) by mails.dpdk.org (Postfix) with ESMTP id 692DE42759 for ; Tue, 10 Sep 2024 08:30:20 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wH8hxK8+tfu2A6enENFIA43BuTuzChK6Ga8s0LssQgpWCczCghm46nkQU8LMbVYuGHRbn8X20DCuHFTthQ7IYFOyk1SeBfe2vVxb6Nd+rnt+S/faJq/OplNcyP66lKa8OjPx4bNQvLFv6oCjjSNdGbuBYnjLZRj3yG6aidsSYCWR3Dgs1S8Xipekcwma0B6wm7O/HrMs5Us/iZxfdg27lSWSJEJk7jJW689Br8O9MVPIU6b3HuBHC1Edp7OCFkk/elvBZEVADCUJo3jSu8HCue3bypFg/GsDfvXgXa57yVncFb6Vr9mudd3fiVd+MCyTwmDAWgUx9Kk2eDTkBKwm4Q== 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=Xem3iEHKWaAvM0COjWHl125aiMzL1otwzof7vkGxzPPVutPXs141DBa0E40vJWSUC6N4BxA+u7qjq8+zDDY3FSqeuH4+A40aWOuu0pJo9H7ivx+Ds5yDFO9ld3cAJH3qdo0fwTHQYRjS+nJE8u8U1lWgNTaIcZg8A284sCOiMXMe42ntGj0a5JTRBBsWYdkjnEkR/CfAMYIbd72aMmKjS673RqByqOYi9nCF/wXQ/2cvhLczmDIq5zb6KfA7INJnMcZDcylt8goQ1JEiAdMYzuYraddDES3GBXodAAc2Nb0lCoBrQjY8XOZ4lOzSVqzsLtQ1rE2sYHYMkLLWqBEGIQ== 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=FOnUg1LY9DDIyit8gtl3FpEc+21CqiK3o8+IeO5Ytn0qU+vZsvCs+YNmJxb/UGW73HLse8eSHoMIlry1Ie+MKP7qyZVTay7r612o9DjEoblayH2Csqfszav7iuSvwh3P1I7wyDAZPEu1ndz996b9H3QGg6vKYbPtstQuC9Ai2j/R55aDB6p4gzCwl7nq2VuYrmB5qsv1EHaolHvXwyShfuUINGSVOBkpHLb9V1uUrINHjRj9+rjYjpsYPFyQv42+jT8OZB5rSSLxRIVkkfIh1coXnPGIT1XE/gxTAxaT0RmkU2zp0b5pbE2zn3zbvMWbz9CxkvfjADD6K86hQ1aWAw== Received: from AS4P191CA0012.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d5::11) by DUZPR07MB10037.eurprd07.prod.outlook.com (2603:10a6:10:4ae::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24; Tue, 10 Sep 2024 06:30:14 +0000 Received: from AM4PEPF00027A64.eurprd04.prod.outlook.com (2603:10a6:20b:5d5:cafe::45) by AS4P191CA0012.outlook.office365.com (2603:10a6:20b:5d5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24 via Frontend Transport; Tue, 10 Sep 2024 06:30:14 +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 AM4PEPF00027A64.mail.protection.outlook.com (10.167.16.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:14 +0000 Received: from seliicinfr00050.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.64) with Microsoft SMTP Server id 15.2.1544.11; Tue, 10 Sep 2024 08:30:12 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id C9C021C006B; Tue, 10 Sep 2024 08:30:12 +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 v5 4/6] eal: add atomic bit operations Date: Tue, 10 Sep 2024 08:20:49 +0200 Message-ID: <20240910062051.699096-5-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM4PEPF00027A64:EE_|DUZPR07MB10037:EE_ X-MS-Office365-Filtering-Correlation-Id: d5befaad-c4d4-4b6f-87cc-08dcd1620763 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|1800799024|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?Qac7gJj65Sorzh7Iz/qrffh5EwVSGYy?= =?utf-8?q?D1x+SnDftCVx0CwQ0qpXUoCffMowBi7LjAgQt0mtOzqzflC6gaJA6dqwq98ZP8wV+?= =?utf-8?q?uhcdExkG6rNpMzAV3n0d9MsXbEiOaKfGEoUo71lxZbUAqYVVaDApj4Yes/dpNlL5T?= =?utf-8?q?23vYZL9UL6ueCCSGPP7QLjpHXfbURDQIUUQ0CuXD22aMWOBAnDRSloAUYjpTmIvhP?= =?utf-8?q?s80FUHsIDSmyrLxUp0Su6foFXO9p7+66D/FYoH+ycepPkvCZW8W0aotex8U96fRvK?= =?utf-8?q?McCl7f7kD7LoPU0ApLkUK5j2UBV7JDiINoAK5vIHeKSelwwXEWjYOdKjtczSqGCB7?= =?utf-8?q?YRVgRkyHcUlHbLN5AlSlvli2G3R+Cj7Zhx5L48jqGUMsygRvHlbov8uYx5C0CXFmY?= =?utf-8?q?SkPJt9IFrborEKl5kGOhx/RLm/GMIDvd7o1X/CHuoBYSsNhJD+y+NnC7y1b0euCBj?= =?utf-8?q?voGCZ0o/9SnwU/g5JFYyXFqQtvxCA8OjcOZxGv5/11RcrbZmscQSxRETZCRcwY+Dw?= =?utf-8?q?dcJJTUcN2fPKPr6/IcgkV9Y5iMgX1/yOOlJ9SQ1PVEPxbIlWeSSU6aWADovrbh0ep?= =?utf-8?q?sI04PaKrNPzXDuNmGpO3RKT3cMoLebL2tQcgry3VUaEZ1SEAubXsLvHRpEU7Qn5nu?= =?utf-8?q?fjOGfBp4hCq7oZiCbkScg1M5oRIcVRqkSeOvuznev8a5dG1gxxv93GA+RwlCLCmwc?= =?utf-8?q?UkIdNCvyvEUh1MYokCo0peIqfXyuwzvH1qtnefzEz6JmM0o+eaTThQHURz5ekJZ8m?= =?utf-8?q?VkdQEbDyIAnziFX3SsopiNhNqH8iXlKLCDUqCY8wErpB4nZnumqGK98iNWjfP+gXe?= =?utf-8?q?P4Pgw46JCLmGDQ3g4r7PBCTGMMvIQKj/5gzWMeI5Q4XkxCJI7c189pMSnZJ0aXpcI?= =?utf-8?q?37c56lNw0djFYJXjeE5fKnEzBf3+vp8ZocytBCevZGISDWcijGHdv4YTd9OZ2RlXY?= =?utf-8?q?thCIJoZ8/gfhEeRsHhAp8gAna4d2igWJdGRq0/8dvt36ocwZOQ0BbKujxD7xSbqwo?= =?utf-8?q?Ep0nkNHvhJABpICqjt+hNP13l+2kyUn6xHxA1t/NzjBHhNKRpBg+KhImL8D0NRKWv?= =?utf-8?q?Z/WMLj0lRSu9qz+7q9McZgLxR0pBqbtWVBN1cMjbzN4MTb2DiEzB3HiStIXmWk4gh?= =?utf-8?q?+ICoiIFUPlKnkeoKCJ0JMyr5Fr2Tkdan+oKO407pvt+0rq0TAtXLRmaS4XNUE8XBu?= =?utf-8?q?ZczwpTc3Ew9R4X/ybrd18I1/On/AfHgcH1itHnjr//QMqgINHCQJeIdCKbELMaDSY?= =?utf-8?q?VjdOkvYgM0fjSE7/INYpXvlQa0eXOcfTbMB4rEvu4pEOtI58wWkSWHeZCxJP1Eu2/?= =?utf-8?q?qAhKH+vG+tdDbDgh9BOR7OHNUMBtLv5JI0HMPuVIAZ7sKVpvbZMT4FRPd6fRxNjD4?= =?utf-8?q?KF6eXIG/0S/?= 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)(1800799024)(82310400026)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:14.0262 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d5befaad-c4d4-4b6f-87cc-08dcd1620763 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: AM4PEPF00027A64.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUZPR07MB10037 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 Tue Sep 10 06:20:50 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: 143836 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 6D82C45952; Tue, 10 Sep 2024 08:30:50 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AF11B427A1; Tue, 10 Sep 2024 08:30:23 +0200 (CEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2050.outbound.protection.outlook.com [40.107.22.50]) by mails.dpdk.org (Postfix) with ESMTP id DDEE940151 for ; Tue, 10 Sep 2024 08:30:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iLsBUfAU3Q/FXtZkz3pPH3n5rx+OdYfxnsYUtP3o3y2Hvtc/PJtvx83gxRmllnz7K8FQWQfHwW6rmLVyhr6cvlIMWKNLvBSYE6D80lT1fhbcp52t93ItbK8wdJgofwhRKrK/XshK3d0OAqwlv/CGQyOKxrvG7VYvxH/pfMHYvA4dgZRPtGm7firsRemR+IWbpq5yCJQee/fXVgSAIQ2PTYbk0mkfcw94/ZnR0U57BwEHpFn+lRl7yUnixJ7V87MGDAFpmdLRamMTIkC0E0SQrrbru6qWK/7x1KjPoyCJGKB+zezdpD0E54HcYaFolsdrNmmrtpAeyv5fE2O/ixMbjw== 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=CcgrmrmESpTELVr1GMbt3q35J83g4VmLHIhUj+M02BxUjuMwgrmNQ2xJdHGteDdnneOdTy818VD3QAniHPIXl2/y3Rnc8N5xykovwhG9ht83Uod91hok2vtgoqvY7M4kmLLIWK8sozz0oFwQhIvKe8sUqMWgtiUJzCCRG8vCLdHkBujLNI9+xtbxTZIuq8/3QVLvuljkYxvzaAamreqKNfFpfZDNOJ3dUicoiEdgjYuEqSMws6Ll+OWnpv4fF/uZm5Ss4IhkGFZDN1uhN8vDGosVCusVcjLYbCFY5QNUnI6+4Uj2ZhEL5AIeGPs3O1Kz7X7iXQx3fFhFBUiUIcLiHw== 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=FnEbdpj7eMM4gBkcZBSRpLaOUw94+mLKskNY/y4f+SZUzO2sau01zvy/5triwmwKb2J+Iya+JZ6Qds+VK5kaU72tUt2gjDihchd8iamT358KF3pfSY0VhhuvmvBDjwFxF1/M7Dew4pGaFdNQVm3OLi6VA6vXBmBhcOzIUeChtMRFBxGNamI6+V8828z3Z18K/1nOf8cEcRw5V8KlEdmVSEwL6SWX501uYqc6wriVtx8ujdOYAKUlHw2GMgZQacNb9mtkwSsxEqW/S3GHEhgvJK4sqYANKbccBUlwCDrOBNF683/jOR4kzjrwJPxiBsHz9+tmtD8v0tkH9NB9lSxnig== Received: from DUZPR01CA0139.eurprd01.prod.exchangelabs.com (2603:10a6:10:4bd::14) by VI1PR0701MB6990.eurprd07.prod.outlook.com (2603:10a6:800:19e::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.23; Tue, 10 Sep 2024 06:30:14 +0000 Received: from DB5PEPF00014B88.eurprd02.prod.outlook.com (2603:10a6:10:4bd:cafe::bf) by DUZPR01CA0139.outlook.office365.com (2603:10a6:10:4bd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.25 via Frontend Transport; Tue, 10 Sep 2024 06:30:13 +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 DB5PEPF00014B88.mail.protection.outlook.com (10.167.8.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:13 +0000 Received: from seliicinfr00050.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.68) with Microsoft SMTP Server id 15.2.1544.11; Tue, 10 Sep 2024 08:30:13 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id DDCE81C006A; Tue, 10 Sep 2024 08:30:12 +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 v5 5/6] eal: add unit tests for atomic bit access functions Date: Tue, 10 Sep 2024 08:20:50 +0200 Message-ID: <20240910062051.699096-6-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB5PEPF00014B88:EE_|VI1PR0701MB6990:EE_ X-MS-Office365-Filtering-Correlation-Id: 356b6b5b-8fe9-4369-a03b-08dcd1620742 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?q?2kyplhk4ezlqAQNJO3oxsRH4TF7Bc9P?= =?utf-8?q?0FgZTicJ8zd0F9bvW422yZizomkn/MTVo9ksTgTe+BOyI4RXOYiLJMArujRCK0XLE?= =?utf-8?q?Lj7ykjFcG0HU0acstT04vksvTuABVNfq//Iia2cjj1NWV22geLR1AJsW7AdZITHuG?= =?utf-8?q?aEATt1gaYqxm0IIXgn4g3TIKM8IpbaigM74+5mSZV+YXPpODGLcLvuAhXb4Gja4dB?= =?utf-8?q?zcmHCVgdpQQPZ+1hjlm9qA1UTtR+LVQKXlRb5AkZRp0EO2XqaXYcVWNPzFrE1Cj1W?= =?utf-8?q?4o6gMz0L9dCKfFfIalJ1taLxHkJ8lxp+Tib0c3aZOIceIizHDCVC1OfRn23bV36b3?= =?utf-8?q?ET8AUwgfGs+HUq0EROXPLYxbnYJpkcUEAVpc1GDYSVHMn8A+DMjq/R/RCvJI2RqC2?= =?utf-8?q?PUjL3y5YujWWBTzIlNAgM0nadY2u/eeAIYnUNtMOpAnKmgPc5JZ/kiDO6aout3HIw?= =?utf-8?q?SyxREUC8RYrPVgvrl4od/MgE6Ar410kSjtj9LUk27ZnCQuPR7vse+DInc7pD1kfqD?= =?utf-8?q?HQkLS19doi9PpZjPLjMJoIG8o+VtrrnskTLQbYEwQp8GG79wIJH7ig28qgK6qn2r4?= =?utf-8?q?zWJajwHwrKgW8pQdJgDZG34aavMzZ8RmPTU7iG/K4e/cVYxIljpCQr9C2UBzaXban?= =?utf-8?q?91803UuUcUP04kSxpQGeNHHoh7ba929l70NDGKY9H47271LlYGi3TVZBNA28pyrAp?= =?utf-8?q?e7CI8pfoWSqTEBMCnSuBxgYVzAOv3OS0ITi7ME3HFrDX7BZUeQICmzWCol3zCyKQ7?= =?utf-8?q?4qPX+2hGJ0hcJv9GXrq4IXB8xNNjGHzLBZ9GALnjht22EmtY9j9B3XJSkhe6gGc/L?= =?utf-8?q?Vu1pxfjfIpNyQi6IgaVvWPVHUdP/FKPX5i1YnPDBJTGMnMJLjNp+YfIgUztZM4jGu?= =?utf-8?q?pgh6UxbbzG/3eaqpMvm0Tk7mGV/ej2LH7AzL8pAmTYnHwR0aifjTm4yme70ph/mVz?= =?utf-8?q?to7fuOzMBlh2vLE4Vf1UHNbw/gkwPQn7vtvugRr9yMHujbr9elZzECmNGQnJ6nxIT?= =?utf-8?q?/ypM+UK+feP+aXBfZiX5zasDvejljPTxC5kSxqJxWVQxCEiyiFeGq8c9hmjsoHKp+?= =?utf-8?q?O9iwnV74JNFLDNHrm/Ad84a2yNfnY6H1lPRCyyn4/ly4ZPbEbeqG+biQVzS2xF9T0?= =?utf-8?q?ewHl/NoVSpPlx9lOQcY/ZAXMHd2KOxgGS0M4zlkQixW4hVxHbuAoG113Su+JjF5eM?= =?utf-8?q?00GUDV/Y9Pj9u+apbLVbYajPTuddIGJqVTCZnLSMeK9b6J+I7KTqxTgT+FrYhQ/8e?= =?utf-8?q?Quc5Cs9qyizLwcsstuw1l8xCM47Q6OnVq3aylMNvHVmGFToFP18oZRwueEIkzz9PP?= =?utf-8?q?Vduf4sfc4pcVt7NpsqsD+1oOQhRXFigcLed9DQ704oi7CxavoiLxJ63Jl5ruaHOEO?= =?utf-8?q?kJalWfsUMo0?= 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)(376014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:13.7793 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 356b6b5b-8fe9-4369-a03b-08dcd1620742 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: DB5PEPF00014B88.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB6990 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 Tue Sep 10 06:20:51 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: 143835 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 C3EF245952; Tue, 10 Sep 2024 08:30:34 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9503C4278E; Tue, 10 Sep 2024 08:30:21 +0200 (CEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2054.outbound.protection.outlook.com [40.107.20.54]) by mails.dpdk.org (Postfix) with ESMTP id 0329C4270A for ; Tue, 10 Sep 2024 08:30:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a/uA4ZYVvMkSPv97t7U0gb5GAkiql0AG+M8SOvd0qeihnPY0qvqyR5QHxGWwBY/A2n1gNUoBgemoEY3+JRa1hxm17CYGG6kL69xvDn72WbNONhJ2HCjx2Ht+Mtax/0oiy4Iyk/I3vZ8EG+fWQ/eskDPk5JiVSex/3IvZnH5QsozHRHJwQ8Oy3aFvFuoCuBj6RsTRGhuPtpNQoMWTztAnbA9KwyaSHUirhDiR7aWp99IWHKmKJH3Bw/lCeXTOOILLQb1zEeRln6bkvHQy6L3XPe6n8HAeX+Z1Av/+mi58wSqFMLLCuZMooev1bwa0UyuOhXqvjvpuZPia59NEdWcUJg== 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=y2pW3Wwc32FxA7ozyWweOmJ930fUaT5PM3Clp3z3mZxsZKfhlwNAyOkY5PHo2Cayt2GUHu7IYJu6KA083cx+dZi07s/XfjDOhpb91TgvXDIle0cM3iSDvk17OWL1Fipk1zS5/vB5/aSmuvjSZV+l+qA53GHYojx+g1nXZMNpxVOucDanh688/PI8H0vSIK3pmaVfWkKK+tumZChUWd0RzgY9kLGu6xC2lrJxvvw9cKyWEOHs2QVaWIo0wSiL38ivo6nqqLpTgBLTS4qg7OMk1/rwBRbmnaCwPzO0863l0cwGdpaj8/D8rFUvdlYOhIr5OM7vdFR9vB12lhCBmZC4sg== 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=f5tgdzi9rI4lCs083A6rJdSFeGccQ+NagoRW92vPDxO4SS1cCz4gOcUjR5vG+lqMK0tEvV0ScGxUqP+kQB8yDrZjQa/8H0YTmqFN54mPvrntEYuIxjal+GEkijMyFojf0zTBDETJQbEdYnvZURfWjohuuRR61ltvT2c8U/0sTAP3VR+xiNqKBsi0Bi+QIxx8TeSYmXt+25ZvzMfBdg8YYS69c78JHXyqa44sYaeZEIT/5WNWqi3c/Iq37Mz9GOk3qXadve013Iv7MdDPchRdfOIMGe0Z88lYKfgHmGveQC79+y/5ZvXxIi5IYXlWVlrptJD0Ylue1qBM4p6Gli6xZw== Received: from AS4P191CA0013.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d5::8) by PR3PR07MB6779.eurprd07.prod.outlook.com (2603:10a6:102:75::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24; Tue, 10 Sep 2024 06:30:14 +0000 Received: from AM4PEPF00027A64.eurprd04.prod.outlook.com (2603:10a6:20b:5d5:cafe::cb) by AS4P191CA0013.outlook.office365.com (2603:10a6:20b:5d5::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24 via Frontend Transport; Tue, 10 Sep 2024 06:30:14 +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 AM4PEPF00027A64.mail.protection.outlook.com (10.167.16.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Tue, 10 Sep 2024 06:30:14 +0000 Received: from seliicinfr00050.seli.gic.ericsson.se (153.88.142.248) by smtp-central.internal.ericsson.com (100.87.178.64) with Microsoft SMTP Server id 15.2.1544.11; Tue, 10 Sep 2024 08:30:13 +0200 Received: from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id F1A1D1C006D; Tue, 10 Sep 2024 08:30:12 +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 v5 6/6] eal: extend bitops to handle volatile pointers Date: Tue, 10 Sep 2024 08:20:51 +0200 Message-ID: <20240910062051.699096-7-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910062051.699096-1-mattias.ronnblom@ericsson.com> References: <20240909145743.697342-2-mattias.ronnblom@ericsson.com> <20240910062051.699096-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM4PEPF00027A64:EE_|PR3PR07MB6779:EE_ X-MS-Office365-Filtering-Correlation-Id: ca9daeff-0b8d-4fb5-354a-08dcd16207b2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?q?LUjLU4p8CDfZnlqcf0uV1WUhODiZyjW?= =?utf-8?q?GhK50AOeRPYUg7lOY0RfpgROjnOAxxCxZFEurQXgIN3o/iFciu4HjghT5HtcUwvpC?= =?utf-8?q?ASfHuKeITLx4iER+GIXR4Y7cCPvaGZBqXiE376VGWR3UfCUPaUg5oUQ++s4ObxhLW?= =?utf-8?q?vtPccR+s7i895s349paCMHRKAuKJZZh4uidC7jv6aA70tWRCCnllUNAKcBge6nGxg?= =?utf-8?q?+IT+clUriibUQgUtKgovwoKEDYEY9Aq25qX/bf02QT9UgNP1J07RsC/Y3gUezUckG?= =?utf-8?q?ZfUjtRQAkGkMKTnuRNTNajOM7FDy1++hLAlc+zvISkuZftHjxBT7RilNNwG+pAHQB?= =?utf-8?q?YfiJ1djaaHCL5WgF3KEfo3eBh42se3QtNsnUi7+knCbVnBnoBT4ya/1mlDDQ78En0?= =?utf-8?q?Bd+8LXTKBV5xO4qpQpo2n5Hvng2VH1B830IGXq+I9XmPMQULYkRg64XhRL2tMZvdk?= =?utf-8?q?d07reLZQ79tczSZzrVHTLTCXPivzU2QnIfqV2B/hfarh9vVdW8+xXlvEC45LOLLt+?= =?utf-8?q?l41Hdz+kOoN8nRXu+SODJKa+e1PZG/nxAqQpiX9VkjwZkdfcGKqaLbsm8z5WrxPTO?= =?utf-8?q?w7VIdS6zsc4Mz+RHXLBkJC0CGRjz1hIInOd7M7lvL9O7ZuBdXToDImFiWUsMr7gOB?= =?utf-8?q?yLB0/hooKq+Emg8ynPpV8AOO6elDlDusASeMyi7TZ40SP/Wnfx4TT7qXJ7U5uYPk8?= =?utf-8?q?zJhgKiQuUgx3mlQmWqI2hZB8nWfYME+4D16h6R4LTAYk4D/nX4X87cCtNxjne8dOt?= =?utf-8?q?yWgKEvxHA5t2Vf8YbshtilM90dLxWhEB3RTFIK+tGpi9t4DWnMC7c72ASwECjPoHO?= =?utf-8?q?LWBNy2E+cKKr6HldGEFH0DYV7RYqfrpI7TgYol0tqfx0g80OT2K7QLttODfJg65vT?= =?utf-8?q?OKAwI+AhyfWygLCtHTt8sbkzGvxEK9cDb91KBvKL+WfsOaL7PIsdc9AZKQHnyctH2?= =?utf-8?q?s8uUZNnqq2SLq05pJ7QOP+QtERRS63uviTbR931BcurLTqpN9X/FQzWyCMndssHnh?= =?utf-8?q?f8KavmYVt7MYIENkgaeKPjVMtPkjmgeDC61asGGRBB9YilypBV91gObN7RY5EWbi4?= =?utf-8?q?BB6vhlapRYHT1kXBplMc3tUeGviWtDWc7L9JC82t0FTRqgeAmmgC410z3rqifBD2P?= =?utf-8?q?8y1CzmcU7ytmt876tvU1Yfim7vLygJSBSIPv1vP6QI+YqMDqwVVqkbSLA9AebFgdC?= =?utf-8?q?BtaM2G/z1qvBRDWFIYgY68xV7XV1X7xuQWcXr1pAbUgSelT57tAxs3fJSFHLOiRw+?= =?utf-8?q?WRYz6PRMKp8yzHdRsFiGNRSY3DuQZiDCSnzvudWZ4yzOWMO7rl6znf6F3mAEOHT1w?= =?utf-8?q?QEwBzq8RmyK9etSK2NkIwORE87f4OQAiko5uFWsKEds94bUHFJ2PqSLiTzX9EGCab?= =?utf-8?q?HgodU+vvvv7?= 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)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2024 06:30:14.5418 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ca9daeff-0b8d-4fb5-354a-08dcd16207b2 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: AM4PEPF00027A64.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR07MB6779 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