[PATCH v3 00/30] replace rte_memcpy of fixed size with memcpy
Stephen Hemminger
stephen at networkplumber.org
Tue Apr 2 23:50:16 CEST 2024
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.
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 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
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 | 17 ++-
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 | 6 +-
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 | 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 | 5 +-
lib/security/rte_security.c | 4 +-
232 files changed, 886 insertions(+), 1045 deletions(-)
create mode 100644 devtools/cocci/rte_memcpy.cocci
--
2.43.0
More information about the dev
mailing list