From patchwork Fri Apr 5 16:53:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 844 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 DD76543E0C; Fri, 5 Apr 2024 18:55:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A2BBE402D4; Fri, 5 Apr 2024 18:55:38 +0200 (CEST) Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) by mails.dpdk.org (Postfix) with ESMTP id 9E0F4402CE for ; Fri, 5 Apr 2024 18:55:36 +0200 (CEST) Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-6ecf3943040so1340599b3a.0 for ; Fri, 05 Apr 2024 09:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1712336136; x=1712940936; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ih/+PV2eS7IY4ZT3aQI8e/WbYC9t3vpaPmzE3l6ea10=; b=T785DUYBw9SwHvsCfifz5qHCmPSihveLCrAg00Rk029VvPTGEVM9JruivOKF9oAEtF hktGH9twekj+uTc5AOk+SeDfRG4rjMCUQqmcPH6nISxS5RphhgMhV4D5E36ALmUzJWyI rIvZ0/mVOrJSSihR3CfEwPKnYcSlJjAAw95Aqwjdydgcl7fIGDcJUd08PpJ/LhXfMLnl 2hHXuhoBw7VQ6KLO3c047f4BCEe/RluZsq3yQg6BkCdv1OTpDpsdnbZGWmxMC2/x0D0N ZV81XB3Z86wsaN3S1bGl7EZ4KY1kExPbbintZbxMKPyabhsrFRLlLyZojoFuZMU/olCT sxWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712336136; x=1712940936; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ih/+PV2eS7IY4ZT3aQI8e/WbYC9t3vpaPmzE3l6ea10=; b=N/Excsad98CMp/O6fBqrPqXXyzSZ5Mm9VY3/V8DLq2jyMaS6ooc8COCgDRLOxuswif kI1Ds6Vp1kgd9XgOUbgfEyAsPeF9gE93+lTj9oGw/um/HeuUEYYwMnu9kUY8zAkd5wP6 crdSGc6rHnMt4Rf8oQ98jlEP4Ya0IolTqfk7HMxhT5sItKLNPyn5CJrzVq3Zbj4PzlIa QRdLSgc1g1Xe3AziJ5nLGuj/ikv1AJeIkS2mFUxDOKBWwHEpZfZKBurhdnj8QQxCjKfw 1njdHy1oe77QeHUsFpJ/1pz8GzRFIbICMx7KKPgBKbqra7QlQbtPL9DZqQdwx3Rk77uG W7UA== X-Gm-Message-State: AOJu0YxlFcbrtaoyRmaCyZXOJE7jdQBUX6h5+AQFMEB6e919R/tPOu3J NAiEIE2p1VLQcyXAJ/xabg58eKYdfdF7sk9qR5y9p9wybRypgmto3SWbbeBTU+Pa/w5vdDNnpMJ AYN8= X-Google-Smtp-Source: AGHT+IGQByyTSqpTUN6i3ZpkiC5F8U5HccN3sJThuwb+XNZlUiJmL5SvCGmlq2uRF6QO25mE5AeN/Q== X-Received: by 2002:a05:6a00:3d49:b0:6ec:f667:fcc7 with SMTP id lp9-20020a056a003d4900b006ecf667fcc7mr2259030pfb.15.1712336135637; Fri, 05 Apr 2024 09:55:35 -0700 (PDT) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id c2-20020aa781c2000000b006e6c0f8ce1bsm1728555pfn.47.2024.04.05.09.55.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 09:55:35 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Subject: [PATCH v4 00/30] replace use of rte_memcpy with fixed sizes Date: Fri, 5 Apr 2024 09:53:11 -0700 Message-ID: <20240405165518.367503-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240403163432.437275-1-stephen@networkplumber.org> References: <20240403163432.437275-1-stephen@networkplumber.org> 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 unnecessary 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 does not change the resulting binary on almost all architectures because x86 version of intrisics and glibc are the same, and other architectures were using __builtin_constant_p(). The main benefit is that analysis tools like fortify, Coverity, and ASAN analyzers can check these memcpy's. The first patch is a simple coccinelle script to do the replacement and the rest are the results broken out by module. The script can be used again to make sure more bad usage doesn't creep in with new drivers. v4 - replace other unnecessary rte_memcpy in ethdev. replace memcpy with structure assignment where possible. fixup formatting in a couple places. v3 - rebase and rerun coccinelle script on 24.03 - consolidate patches by subtree - remove inclusion of rte_memcpy.h when no longer used. Stephen Hemminger (30): cocci/rte_memcpy: add script to eliminate fixed size rte_memcpy eal: replace use of fixed size rte_memcpy ethdev: replace uses of 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 bus: remove unneeded rte_memcpy.h include net: replace use of fixed size rte_memcpy raw: replace use of fixed size rte_memcpy baseband: replace use of fixed size rte_memcpy common: replace use of fixed size rte_memcpy crypto: replace use of fixed size rte_memcpy crypto: replace use of fixed size rte_memcpy event: replace use of fixed size rte_memcpy mempool: replace use of fixed size rte_memcpy ml/cnxk: 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 app/test-pipeline: remove unused rte_memcpy.h include app/test-bbdev: remove unnecessary include of rte_memcpy.h examples: replace use of fixed size rte_memcpy app/graph/neigh.c | 8 +- app/test-bbdev/test_bbdev.c | 1 - app/test-eventdev/test_pipeline_common.c | 19 ++- app/test-pipeline/config.c | 1 - app/test-pipeline/init.c | 1 - app/test-pipeline/main.c | 1 - app/test-pipeline/runtime.c | 1 - app/test-pmd/cmdline.c | 48 ++++---- app/test-pmd/cmdline_flow.c | 24 ++-- app/test-pmd/config.c | 8 +- app/test-pmd/csumonly.c | 1 - app/test-pmd/flowgen.c | 1 - app/test-pmd/iofwd.c | 1 - app/test-pmd/macfwd.c | 1 - app/test-pmd/macswap.c | 1 - app/test-pmd/noisy_vnf.c | 1 - app/test-pmd/rxonly.c | 1 - app/test-pmd/testpmd.c | 1 - app/test/commands.c | 1 - app/test/packet_burst_generator.c | 4 +- app/test/test_crc.c | 5 +- app/test/test_cryptodev.c | 18 ++- app/test/test_cryptodev_asym.c | 1 - app/test/test_cryptodev_security_pdcp.c | 1 - app/test/test_efd.c | 1 - app/test/test_efd_perf.c | 1 - app/test/test_event_crypto_adapter.c | 12 +- app/test/test_event_dma_adapter.c | 4 +- app/test/test_eventdev.c | 1 - app/test/test_ipsec.c | 6 +- app/test/test_link_bonding_mode4.c | 8 +- app/test/test_mbuf.c | 1 - app/test/test_member.c | 1 - app/test/test_member_perf.c | 1 - app/test/test_rawdev.c | 1 - app/test/test_security_inline_proto.c | 36 +++--- app/test/test_service_cores.c | 1 - app/test/virtual_pmd.c | 3 +- devtools/cocci/rte_memcpy.cocci | 11 ++ drivers/baseband/acc/rte_acc100_pmd.c | 16 ++- drivers/baseband/acc/rte_vrb_pmd.c | 21 ++-- drivers/baseband/la12xx/bbdev_la12xx.c | 4 +- drivers/bus/auxiliary/linux/auxiliary.c | 1 - drivers/bus/fslmc/fslmc_bus.c | 1 - drivers/bus/fslmc/fslmc_vfio.c | 1 - drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c | 1 - drivers/bus/fslmc/portal/dpaa2_hw_dpci.c | 1 - drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 1 - drivers/bus/pci/linux/pci.c | 1 - drivers/common/idpf/idpf_common_device.c | 4 +- drivers/common/idpf/idpf_common_virtchnl.c | 10 +- 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_eventdev_selftest.c | 1 - drivers/event/cnxk/cnxk_tim_evdev.c | 4 +- drivers/event/dlb2/dlb2.c | 4 +- drivers/event/dpaa/dpaa_eventdev.c | 1 - drivers/event/dpaa2/dpaa2_eventdev.c | 7 +- drivers/event/dpaa2/dpaa2_eventdev_selftest.c | 1 - drivers/event/dpaa2/dpaa2_hw_dpcon.c | 1 - drivers/event/octeontx/ssovf_evdev_selftest.c | 1 - drivers/event/octeontx/timvf_evdev.c | 4 +- drivers/mempool/dpaa/dpaa_mempool.c | 4 +- drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 5 +- 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/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_eswitch_devargs.c | 3 +- drivers/net/cnxk/cnxk_ethdev_ops.c | 2 +- drivers/net/cnxk/cnxk_rep.c | 3 +- drivers/net/cnxk/cnxk_rep_flow.c | 6 +- drivers/net/cnxk/cnxk_rep_msg.c | 8 +- drivers/net/cnxk/cnxk_rep_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/base/dpaa2_hw_dpni.c | 1 - drivers/net/dpaa2/dpaa2_ethdev.c | 1 - drivers/net/dpaa2/dpaa2_recycle.c | 1 - drivers/net/dpaa2/dpaa2_rxtx.c | 1 - drivers/net/dpaa2/dpaa2_sparser.c | 1 - drivers/net/dpaa2/dpaa2_tm.c | 2 +- drivers/net/e1000/em_rxtx.c | 1 - drivers/net/e1000/igb_flow.c | 22 ++-- drivers/net/e1000/igb_pf.c | 7 +- drivers/net/e1000/igb_rxtx.c | 1 - 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_ethdev.c | 1 - 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 | 109 ++++++++---------- drivers/net/i40e/i40e_fdir.c | 28 +++-- drivers/net/i40e/i40e_flow.c | 56 +++++---- drivers/net/i40e/i40e_pf.c | 3 +- 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 | 5 +- 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 | 27 ++--- drivers/net/mlx5/mlx5_rx.c | 6 +- drivers/net/mlx5/mlx5_rxtx_vec.c | 8 +- drivers/net/mvpp2/mrvl_tm.c | 2 +- drivers/net/netvsc/hn_ethdev.c | 1 - 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 | 3 +- drivers/net/pcap/pcap_osdep_linux.c | 3 +- drivers/net/qede/qede_main.c | 2 +- drivers/net/ring/rte_eth_ring.c | 1 - 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 | 5 +- drivers/net/txgbe/txgbe_tm.c | 11 +- drivers/net/vhost/rte_eth_vhost.c | 1 - drivers/net/virtio/virtio_ethdev.c | 1 - drivers/raw/ifpga/afu_pmd_he_hssi.c | 3 +- drivers/raw/ifpga/afu_pmd_he_lpbk.c | 3 +- drivers/raw/ifpga/afu_pmd_he_mem.c | 3 +- drivers/raw/ifpga/afu_pmd_n3000.c | 8 +- drivers/raw/ifpga/ifpga_rawdev.c | 11 +- drivers/raw/skeleton/skeleton_rawdev.c | 8 +- drivers/raw/skeleton/skeleton_rawdev_test.c | 1 - examples/bbdev_app/main.c | 2 +- examples/bond/main.c | 1 - examples/ip_fragmentation/main.c | 1 - examples/ip_reassembly/main.c | 1 - examples/ipv4_multicast/main.c | 1 - examples/l2fwd-cat/cat.c | 4 +- examples/l2fwd-jobstats/main.c | 1 - examples/l2fwd-keepalive/main.c | 1 - examples/l2fwd-macsec/main.c | 1 - examples/l2fwd/main.c | 1 - examples/l3fwd-power/main.c | 1 - examples/l3fwd/main.c | 1 - examples/link_status_interrupt/main.c | 1 - .../client_server_mp/mp_server/init.c | 1 - .../client_server_mp/mp_server/main.c | 1 - examples/multi_process/symmetric_mp/main.c | 1 - examples/ptpclient/ptpclient.c | 11 +- examples/qos_sched/app_thread.c | 1 - examples/qos_sched/main.c | 1 - examples/server_node_efd/efd_server/init.c | 1 - examples/server_node_efd/efd_server/main.c | 1 - examples/vhost/main.c | 6 +- examples/vmdq/main.c | 7 +- examples/vmdq_dcb/main.c | 15 +-- lib/cryptodev/rte_cryptodev.c | 2 +- lib/eal/common/eal_common_options.c | 7 +- lib/ethdev/rte_ethdev.c | 12 +- lib/ethdev/rte_flow.c | 101 ++++++++-------- 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 | 5 +- lib/security/rte_security.c | 4 +- 232 files changed, 936 insertions(+), 1100 deletions(-) create mode 100644 devtools/cocci/rte_memcpy.cocci