From patchwork Thu Feb 29 22:57:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 729 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 5BC2C43BB1; Fri, 1 Mar 2024 00:00:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8EE6043001; Fri, 1 Mar 2024 00:00:02 +0100 (CET) Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by mails.dpdk.org (Postfix) with ESMTP id CE22A427D9 for ; Thu, 29 Feb 2024 23:59:59 +0100 (CET) Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-29b10d73630so866026a91.0 for ; Thu, 29 Feb 2024 14:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1709247599; x=1709852399; darn=dpdk.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=bWGlIdzDHtV7KD7QTH444L7/37WdQhmep/uLl8FC910=; b=kX74HUel2VBAMEaOqbS3G+cxScmiV++dm3F2IIy0Ta7+zlwQv7NUPyrYDNV5CHkQ97 PGkpCqgg4zqO+w6TAPNojd2CKSWvolxm7xEFN2a4w0CXGx9LwCX3KVjmcJ+v22QmzVRS GidXDliIuyLbwQJ4+MoDj+LndrJf2zFNl8Xaejk2mSmpysca57nD+7+iWG25Rjmo3x1Z JKXKbDXJjtfkwHcXCPGgQj/owgyMzTEQTGdzvDUPUzWk1whO/GvH8YDhmFl29bx96cjW z/UWgegOr5LvyOd3ZhaUxTqGxUKqe3Wj2RO1pjT0CO5/WlYbuWJf74oDiKL/X/OhnxCy Rcig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709247599; x=1709852399; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bWGlIdzDHtV7KD7QTH444L7/37WdQhmep/uLl8FC910=; b=WiblzgQ79Cj4N+s6QZ8rp2zWxz5fG6CK3TFfVbUjQ1jTcSc3U4AxYmWUmhTH/honsz QXaAqHuaP7Gr8Qd0eYTeNkcjxdDWtx+KJIr/5HEQPm3NE/x0lhjiCqRBdtS1hy2kVVAo 9XZ4JoGtqsRe0yKvXq8pDy0mw4ubBhd7wIziMHQL0OH5XGoHi3aq6EQm4tzsitrFs0Ta cJjdV0A5uQSYYF8QOv1oFRKKS3snv9YeAHqNmz4gDQ75tTDkNav2gaS4VG/L/DEG0DMv Z0zM9C9bXVxMqG4FLzC2lo7v0ZvWhYsiXPl2zlNzt1n0JcDaWqhROnf1cDm4Ki94Slod 8lxA== X-Gm-Message-State: AOJu0YzBS3r0D0PExjv246Xfj/IX5MDtWJ1fdUPiNTeX6iVfNr3/tBTl 1eRxsBjpEReQatceR0ZX3dDepCpq0uhfU1/pcipSNI8hIfahFzahzXWjyl1YOPDmoW1CX0t0LXO l X-Google-Smtp-Source: AGHT+IH1IAdSWdADKGl1HFtUcONDFVHWBM5VnC2qKI9QjIXB/Ios0JYgXLMGoX3ukGeIZyq3xnL0Zg== X-Received: by 2002:a17:90b:238d:b0:299:2990:f6f1 with SMTP id mr13-20020a17090b238d00b002992990f6f1mr30677pjb.17.1709247597426; Thu, 29 Feb 2024 14:59:57 -0800 (PST) Received: from hermes.local (204-195-123-141.wavecable.com. [204.195.123.141]) by smtp.gmail.com with ESMTPSA id l22-20020a17090b079600b0029a8e5355fcsm1965578pjz.53.2024.02.29.14.59.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Feb 2024 14:59:55 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Subject: [PATCH 00/71] replace use of fixed size rte_memcpy Date: Thu, 29 Feb 2024 14:57:47 -0800 Message-ID: <20240229225936.483472-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 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 The DPDK has a lot of "cargo cult" usage of rte_memcpy. This patch set replaces cases where rte_memcpy is used with a fixed size constant size. Typical example is: rte_memcpy(mac_addrs, mac.addr_bytes, RTE_ETHER_ADDR_LEN); which can be replaced with: memcpy(mac_addrs, mac.addr_bytes, RTE_ETHER_ADDR_LEN); This has two benefits. Gcc (and clang) are smart enough that for all small fixed size values, they just generate the necessary instructions to do it inline. It also means that fortify, Coverity, and ASAN analyzers can check these memcpy's. So faster, better, safer. The first patch is a simple coccinelle script to do the replacement and the rest are the results broken out by module. The coccinelle script can be used again to make sure more bad usage doesn't creep in with new drivers. Stephen Hemminger (71): cocci/rte_memcpy: add script to eliminate fixed size rte_memcpy eal: replace use of fixed size rte_memcpy ethdev: replace use of fixed size rte_memcpy eventdev: replace use of fixed size rte_memcpy cryptodev: replace use of fixed size rte_memcpy ip_frag: replace use of fixed size rte_memcpy net: replace use of fixed size rte_memcpy lpm: replace use of fixed size rte_memcpy node: replace use of fixed size rte_memcpy pdcp: replace use of fixed size rte_memcpy pipeline: replace use of fixed size rte_memcpy rib: replace use of fixed size rte_memcpy security: replace use of fixed size rte_memcpy net/mlx5: replace use of fixed size rte_memcpy net/nfp: replace use of fixed size rte_memcpy net/ngbe: replace use of fixed size rte_memcpy net/null: replace use of fixed size rte_memcpy net/pcap: replace use of fixed size rte_memcpy net/sfc: replace use of fixed size rte_memcpy net/tap: replace use of fixed size rte_memcpy net/txgbe: replace use of fixed size rte_memcpy raw/ifpga: replace use of fixed size rte_memcpy raw/skeleton: replace use of fixed size rte_memcpy net/hns3: replace use of fixed size rte_memcpy net/i40e: replace use of fixed size rte_memcpy net/iavf: replace use of fixed size rte_memcpy net/ice: replace use of fixed size rte_memcpy net/idpf: replace use of fixed size rte_memcpy net/ipn3ke: replace use of fixed size rte_memcpy net/ixgbe: replace use of fixed size rte_memcpy net/memif: replace use of fixed size rte_memcpy net/qede: replace use of fixed size rte_memcpy baseband/acc: replace use of fixed size rte_memcpy baseband/la12xx: replace use of fixed size rte_memcpy common/idpf: replace use of fixed size rte_memcpy common/qat: replace use of fixed size rte_memcpy compress/qat: replace use of fixed size rte_memcpy crypto/ccp: replace use of fixed size rte_memcpy crypto/cnxk: replace use of fixed size rte_memcpy crypto/dpaa_sec: replace use of fixed size rte_memcpy crypto/ipsec_mb: replace use of fixed size rte_memcpy crypto/qat: replace use of fixed size rte_memcpy crypto/scheduler: replace use of fixed size rte_memcpy event/cnxk: replace use of fixed size rte_memcpy event/dlb2: replace use of fixed size rte_memcpy event/dpaa2: replace use of fixed size rte_memcpy event/octeontx: replace use of fixed size rte_memcpy mempool/dpaa: replace use of fixed size rte_memcpy mempool/dpaa2: replace use of fixed size rte_memcpy ml/cnxk: replace use of fixed size rte_memcpy net/af_xdp: replace use of fixed size rte_memcpy net/avp: replace use of fixed size rte_memcpy net/axgbe: replace use of fixed size rte_memcpy net/bnx2x: replace use of fixed size rte_memcpy net/bnxt: replace use of fixed size rte_memcpy net/bonding: replace use of fixed size rte_memcpy net/cnxk: replace use of fixed size rte_memcpy net/cpfl: replace use of fixed size rte_memcpy net/cxgbe: replace use of fixed size rte_memcpy net/dpaa2: replace use of fixed size rte_memcpy net/e1000: replace use of fixed size rte_memcpy net/enic: replace use of fixed size rte_memcpy net/failsafe: replace use of fixed size rte_memcpy net/gve/base: replace use of fixed size rte_memcpy net/hinic: replace use of fixed size rte_memcpy net/mvpp2: replace use of fixed size rte_memcpy app/test-pmd: replace use of fixed size rte_memcpy app/graph: replace use of fixed size rte_memcpy app/test-eventdev: replace use of fixed size rte_memcpy app/test: replace use of fixed size rte_memcpy examples: replace use of fixed size rte_memcpy app/graph/neigh.c | 8 +- app/test-eventdev/test_pipeline_common.c | 19 ++- app/test-pmd/cmdline.c | 48 ++++---- app/test-pmd/cmdline_flow.c | 24 ++-- app/test-pmd/config.c | 8 +- app/test/packet_burst_generator.c | 4 +- app/test/test_crc.c | 4 +- app/test/test_cryptodev.c | 18 ++- app/test/test_event_crypto_adapter.c | 12 +- app/test/test_event_dma_adapter.c | 4 +- app/test/test_ipsec.c | 6 +- app/test/test_link_bonding_mode4.c | 8 +- app/test/test_security_inline_proto.c | 36 +++--- app/test/virtual_pmd.c | 2 +- devtools/cocci/rte_memcpy.cocci | 11 ++ drivers/baseband/acc/rte_acc100_pmd.c | 19 ++- drivers/baseband/acc/rte_vrb_pmd.c | 21 ++-- drivers/baseband/la12xx/bbdev_la12xx.c | 4 +- drivers/common/idpf/idpf_common_device.c | 4 +- drivers/common/idpf/idpf_common_virtchnl.c | 8 +- drivers/common/qat/qat_qp.c | 10 +- drivers/compress/qat/qat_comp.c | 8 +- drivers/crypto/ccp/ccp_crypto.c | 14 +-- drivers/crypto/cnxk/cnxk_cryptodev_ops.c | 2 +- drivers/crypto/cnxk/cnxk_se.h | 2 +- drivers/crypto/dpaa_sec/dpaa_sec.c | 2 +- drivers/crypto/ipsec_mb/pmd_snow3g.c | 4 +- drivers/crypto/qat/qat_sym_session.c | 52 ++++----- .../scheduler/rte_cryptodev_scheduler.c | 6 +- drivers/crypto/scheduler/scheduler_failover.c | 12 +- drivers/event/cnxk/cnxk_tim_evdev.c | 4 +- drivers/event/dlb2/dlb2.c | 6 +- drivers/event/dpaa2/dpaa2_eventdev.c | 6 +- drivers/event/octeontx/timvf_evdev.c | 4 +- drivers/mempool/dpaa/dpaa_mempool.c | 4 +- drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 4 +- drivers/ml/cnxk/cn10k_ml_model.c | 8 +- drivers/ml/cnxk/cn10k_ml_ops.c | 11 +- drivers/ml/cnxk/cnxk_ml_ops.c | 2 +- drivers/ml/cnxk/mvtvm_ml_model.c | 8 +- drivers/ml/cnxk/mvtvm_ml_ops.c | 8 +- drivers/net/af_xdp/rte_eth_af_xdp.c | 2 +- drivers/net/avp/avp_ethdev.c | 4 +- drivers/net/axgbe/axgbe_ethdev.c | 4 +- drivers/net/bnx2x/bnx2x.c | 32 +++--- drivers/net/bnx2x/bnx2x_stats.c | 10 +- drivers/net/bnx2x/bnx2x_vfpf.c | 19 +-- drivers/net/bnxt/bnxt_flow.c | 34 +++--- drivers/net/bonding/rte_eth_bond_8023ad.c | 4 +- drivers/net/bonding/rte_eth_bond_flow.c | 2 +- drivers/net/cnxk/cnxk_ethdev_ops.c | 2 +- drivers/net/cnxk/cnxk_tm.c | 5 +- drivers/net/cpfl/cpfl_ethdev.c | 3 +- drivers/net/cpfl/cpfl_vchnl.c | 4 +- drivers/net/cxgbe/clip_tbl.c | 2 +- drivers/net/cxgbe/cxgbe_filter.c | 8 +- drivers/net/cxgbe/l2t.c | 4 +- drivers/net/cxgbe/smt.c | 20 ++-- drivers/net/dpaa2/dpaa2_tm.c | 2 +- drivers/net/e1000/igb_flow.c | 22 ++-- drivers/net/e1000/igb_pf.c | 6 +- drivers/net/enic/enic_main.c | 8 +- drivers/net/failsafe/failsafe_ops.c | 6 +- drivers/net/gve/base/gve_adminq.c | 2 +- drivers/net/hinic/hinic_pmd_flow.c | 40 +++---- drivers/net/hns3/hns3_fdir.c | 2 +- drivers/net/hns3/hns3_flow.c | 4 +- drivers/net/i40e/i40e_ethdev.c | 108 ++++++++---------- drivers/net/i40e/i40e_fdir.c | 28 +++-- drivers/net/i40e/i40e_flow.c | 56 +++++---- drivers/net/i40e/i40e_pf.c | 2 +- drivers/net/i40e/i40e_tm.c | 11 +- drivers/net/i40e/rte_pmd_i40e.c | 34 +++--- drivers/net/iavf/iavf_fdir.c | 93 +++++++-------- drivers/net/iavf/iavf_fsub.c | 50 ++++---- drivers/net/iavf/iavf_generic_flow.c | 2 +- drivers/net/iavf/iavf_tm.c | 11 +- drivers/net/iavf/iavf_vchnl.c | 9 +- drivers/net/ice/ice_dcf.c | 5 +- drivers/net/ice/ice_dcf_parent.c | 2 +- drivers/net/ice/ice_dcf_sched.c | 11 +- drivers/net/ice/ice_diagnose.c | 4 +- drivers/net/ice/ice_ethdev.c | 14 +-- drivers/net/ice/ice_fdir_filter.c | 37 +++--- drivers/net/ice/ice_generic_flow.c | 2 +- drivers/net/ice/ice_hash.c | 2 +- drivers/net/ice/ice_tm.c | 11 +- drivers/net/idpf/idpf_ethdev.c | 7 +- drivers/net/idpf/idpf_rxtx.c | 10 +- drivers/net/ipn3ke/ipn3ke_flow.c | 32 +++--- drivers/net/ipn3ke/ipn3ke_representor.c | 16 +-- drivers/net/ipn3ke/ipn3ke_tm.c | 6 +- drivers/net/ixgbe/ixgbe_ethdev.c | 9 +- drivers/net/ixgbe/ixgbe_fdir.c | 7 +- drivers/net/ixgbe/ixgbe_flow.c | 65 +++++------ drivers/net/ixgbe/ixgbe_ipsec.c | 8 +- drivers/net/ixgbe/ixgbe_pf.c | 4 +- drivers/net/ixgbe/ixgbe_tm.c | 11 +- drivers/net/ixgbe/rte_pmd_ixgbe.c | 4 +- drivers/net/memif/memif_socket.c | 4 +- drivers/net/mlx5/mlx5_devx.c | 4 +- drivers/net/mlx5/mlx5_flow.c | 38 +++--- drivers/net/mlx5/mlx5_flow_aso.c | 6 +- drivers/net/mlx5/mlx5_flow_hw.c | 16 +-- drivers/net/mlx5/mlx5_rx.c | 6 +- drivers/net/mlx5/mlx5_rxtx_vec.c | 8 +- drivers/net/mvpp2/mrvl_tm.c | 2 +- drivers/net/nfp/flower/nfp_conntrack.c | 2 +- drivers/net/nfp/flower/nfp_flower_flow.c | 16 +-- .../net/nfp/flower/nfp_flower_representor.c | 2 +- drivers/net/nfp/nfp_mtr.c | 10 +- drivers/net/ngbe/ngbe_pf.c | 4 +- drivers/net/null/rte_eth_null.c | 6 +- drivers/net/pcap/pcap_ethdev.c | 2 +- drivers/net/pcap/pcap_osdep_freebsd.c | 2 +- drivers/net/pcap/pcap_osdep_linux.c | 2 +- drivers/net/qede/qede_main.c | 2 +- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc_ef10_tx.c | 2 +- drivers/net/sfc/sfc_ethdev.c | 11 +- drivers/net/sfc/sfc_flow.c | 20 ++-- drivers/net/sfc/sfc_flow_rss.c | 2 +- drivers/net/sfc/sfc_mae.c | 2 +- drivers/net/sfc/sfc_rx.c | 2 +- drivers/net/sfc/sfc_tso.c | 2 +- drivers/net/sfc/sfc_tso.h | 9 +- drivers/net/tap/rte_eth_tap.c | 14 +-- drivers/net/txgbe/txgbe_ethdev.c | 9 +- drivers/net/txgbe/txgbe_fdir.c | 6 +- drivers/net/txgbe/txgbe_flow.c | 65 +++++------ drivers/net/txgbe/txgbe_ipsec.c | 8 +- drivers/net/txgbe/txgbe_pf.c | 4 +- drivers/net/txgbe/txgbe_tm.c | 11 +- drivers/raw/ifpga/afu_pmd_he_hssi.c | 2 +- drivers/raw/ifpga/afu_pmd_he_lpbk.c | 2 +- drivers/raw/ifpga/afu_pmd_he_mem.c | 2 +- drivers/raw/ifpga/afu_pmd_n3000.c | 8 +- drivers/raw/ifpga/ifpga_rawdev.c | 10 +- drivers/raw/skeleton/skeleton_rawdev.c | 7 +- examples/bbdev_app/main.c | 2 +- examples/l2fwd-cat/cat.c | 3 +- examples/ptpclient/ptpclient.c | 11 +- examples/vhost/main.c | 5 +- examples/vmdq/main.c | 5 +- examples/vmdq_dcb/main.c | 14 +-- lib/cryptodev/rte_cryptodev.c | 2 +- lib/eal/common/eal_common_options.c | 7 +- lib/ethdev/rte_ethdev.c | 3 +- lib/ethdev/rte_flow.c | 5 +- lib/eventdev/rte_event_crypto_adapter.c | 2 +- lib/eventdev/rte_event_dma_adapter.c | 4 +- lib/eventdev/rte_event_timer_adapter.c | 2 +- lib/fib/trie.c | 2 +- lib/ip_frag/rte_ipv6_fragmentation.c | 4 +- lib/ip_frag/rte_ipv6_reassembly.c | 6 +- lib/lpm/rte_lpm6.c | 3 +- lib/net/rte_ether.c | 2 +- lib/node/ip6_lookup.c | 8 +- lib/pdcp/pdcp_process.c | 36 +++--- lib/pipeline/rte_table_action.c | 8 +- lib/rib/rte_rib6.h | 3 +- lib/security/rte_security.c | 4 +- 162 files changed, 880 insertions(+), 960 deletions(-) create mode 100644 devtools/cocci/rte_memcpy.cocci Acked-by: Hemant Agrawal Acked-by: Ajit Khaparde