From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH 00/61] reduce use of rte_memcpy
Date: Wed, 19 Aug 2026 22:11:50 -0700 [thread overview]
Message-ID: <20260820052251.1453273-1-stephen@networkplumber.org> (raw)
The DPDK function rte_memcpy() only exists as an optimization
for shortcomings in performance of libc memcpy() on some platforms.
Many platforms have no special rte_memcpy() and just use memcpy().
But many analysis and test tools know that memcpy() is a special
case and check for overwrite, bounds errors etc. Therefore memcpy()
should be preferred wherever possible.
This patch series introduces a coccinelle script to find
calls to rte_memcpy() where size is fixed, and change them to
regular memcpy(). This was the starting point for this cleanup.
There is also some cleanups to include rte_memcpy.h and string.h
where needed. Often the includes were happening by some other
header. And also removal of rte_memcpy.h where no longer needed.
The result is a 46% reduction in use of rte_memcpy.
The remaining rte_memcpy can be cleaned up later:
- drivers with active maintenance (like mlx5);
- changes to rte_memcpy which need benchmarking;
- test code for rte_memcpy can be removed as last step.
No functional change, no warnings in all compilers including LTO.
Stephen Hemminger (61):
devtools/cocci: add script to replace fixed size rte_memcpy
app/testpmd: replace rte_memcpy with memcpy
test: use memcpy instead of rte_memcpy
app/graph: replace rte_memcpy with memcpy
lpm: remove unnecessary include of rte_memcpy.h
acl: remove unnecessary include of rte_memcpy.h
drivers/bus: remove unnecessary include of rte_memcpy.h
security: replace fixed size rte_memcpy
ethdev: replace use of rte_memcpy
net: replace use of rte_memcpy
pdcp: replace use of rte_memcpy
eventdev: replace fixed size rte_memcpy
eal: replace rte_memcpy of cpuset
cryptodev: replace use of rte_memcpy
drivers/raw: use memcpy for fixed size data
test-pipeline: replace use of rte_memcpy
net/af_xdp: replace use of rte_memcpy
net/avp: replace use of rte_memcpy
net/axgbe: replace use of rte_memcpy
net/bnx2x: replace use of rte_memcpy
net/bnxt: replace use of rte_memcpy
net/bonding: replace use of rte_memcpy
net/cnxk: replace use of rte_memcpy
net/cxgbe: replace use of rte_memcpy
net/dpaa2: replace use of rte_memcpy
net/enic: replace use of rte_memcpy
net/failsafe: replace use of rte_memcpy
net/gve: replace use of rte_memcpy
net/hinic: replace use of rte_memcpy
net/hns3: replace use of rte_memcpy
net/mlx5: replace use of rte_memcpy
net/mvpp2: replace use of rte_memcpy
net/netvsc: replace use of rte_memcpy
net/nfp: replace use of rte_memcpy
net/ngbe: replace use of rte_memcpy
net/ntnic: replace use of rte_memcpy
net/null: replace use of rte_memcpy
net/qede: replace use of rte_memcpy
net/ring: replace use of rte_memcpy
net/sfc: replace use of rte_memcpy
net/txgbe: replace use of rte_memcpy
net/vhost: replace use of rte_memcpy
net/virtio: replace use of rte_memcpy
net/sxe2: replace use of rte_memcpy
net/zxdh: replace use of rte_memcpy
net/memif: use memcpy for fixed size data
net/ice: use memcpy for fixed size data
test-bbdev: remove unnecessary include rte_memcpy.h
drivers/mempool: use memcpy for fixed size data
ml/cnxk: use memcpy for fixed size data
drivers/event: use memcpy for fixed size data
baseband/la12xx: use memcpy for fixed size data
baseband/acc: replace use of rte_memcpy
drivers/*/qat: use memcpy for fixed size data
hash: replace use of rte_memcpy
rib: remove rte_memcpy include
pcapng: replace use of rte_memcpy
efd: replace use of rte_memcpy
net/xsc: replace use of rte_memcpy
net/pcap: replace use of rte_memcpy
power: replace use of rte_memcpy
app/graph/neigh.c | 8 +-
app/test-bbdev/test_bbdev.c | 1 -
app/test-eventdev/test_pipeline_common.c | 8 +-
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 | 28 ++---
app/test-pmd/cmdline_flow.c | 34 +++---
app/test-pmd/config.c | 13 +--
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-pmd/txonly.c | 7 +-
app/test/commands.c | 1 -
app/test/packet_burst_generator.c | 10 +-
app/test/test_bpf.c | 1 +
app/test/test_crc.c | 7 +-
app/test/test_cryptodev.c | 14 +--
app/test/test_cryptodev.h | 1 +
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_eventdev.c | 1 -
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_ring.h | 17 ++-
app/test/test_security_inline_macsec.c | 2 +-
app/test/test_security_inline_proto.c | 42 +++----
app/test/test_security_proto.c | 2 +-
app/test/test_service_cores.c | 1 -
app/test/test_thash.c | 4 +-
app/test/virtual_pmd.c | 5 +-
devtools/cocci/rte_memcpy_fixed.cocci | 15 +++
drivers/baseband/acc/rte_acc100_pmd.c | 7 +-
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_dpcon.c | 1 -
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 1 -
drivers/bus/pci/linux/pci.c | 1 -
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_se.h | 2 +-
drivers/crypto/ipsec_mb/pmd_snow3g.c | 4 +-
drivers/crypto/mlx5/mlx5_crypto_gcm.c | 10 +-
drivers/crypto/qat/qat_sym_session.c | 33 +++---
.../scheduler/rte_cryptodev_scheduler.c | 6 +-
drivers/crypto/scheduler/scheduler_failover.c | 12 +-
drivers/crypto/zsda/zsda_crypto_session.c | 6 +-
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 | 3 +-
drivers/event/dpaa2/dpaa2_eventdev_selftest.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 | 8 +-
drivers/ml/cnxk/tvmrt_ml_model.c | 9 +-
drivers/ml/cnxk/tvmrt_ml_ops.c | 6 +-
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/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_mux.c | 36 +++---
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/enic/enic_main.c | 6 +-
drivers/net/failsafe/failsafe_ops.c | 10 +-
drivers/net/gve/base/gve_adminq.c | 2 +-
drivers/net/hinic/hinic_pmd_ethdev.c | 1 -
drivers/net/hinic/hinic_pmd_flow.c | 41 ++++---
drivers/net/hns3/hns3_fdir.c | 2 +-
drivers/net/hns3/hns3_flow.c | 4 +-
drivers/net/intel/ice/ice_fdir_filter.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 | 31 +++---
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 +--
drivers/net/nfp/nfp_mtr.c | 10 +-
drivers/net/ngbe/ngbe_pf.c | 4 +-
drivers/net/ntnic/ntnic_ethdev.c | 11 +-
drivers/net/null/rte_eth_null.c | 12 +-
drivers/net/pcap/pcap_ethdev.c | 9 +-
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/sxe2/sxe2_cmd_chnl.c | 6 +-
drivers/net/sxe2/sxe2_flow.c | 11 +-
drivers/net/sxe2/sxe2_flow_parse_pattern.c | 36 +++---
drivers/net/sxe2/sxe2_ipsec.c | 2 +-
drivers/net/sxe2/sxe2_rss.c | 10 +-
drivers/net/sxe2/sxe2_rx.c | 4 +-
drivers/net/sxe2/sxe2_stats.c | 25 +++--
drivers/net/sxe2/sxe2_tm.c | 4 +-
drivers/net/txgbe/txgbe_ethdev.c | 9 +-
drivers/net/txgbe/txgbe_fdir.c | 11 +-
drivers/net/txgbe/txgbe_flow.c | 73 ++++++------
drivers/net/txgbe/txgbe_ipsec.c | 8 +-
drivers/net/txgbe/txgbe_pf.c | 6 +-
drivers/net/txgbe/txgbe_tm.c | 11 +-
drivers/net/vhost/rte_eth_vhost.c | 1 -
drivers/net/virtio/virtio_ethdev.c | 1 -
drivers/net/xsc/xsc_dev.c | 2 +-
drivers/net/zxdh/zxdh_common.c | 7 +-
drivers/net/zxdh/zxdh_flow.c | 67 ++++++-----
drivers/net/zxdh/zxdh_msg.c | 15 +--
drivers/net/zxdh/zxdh_mtr.c | 10 +-
drivers/net/zxdh/zxdh_np.c | 1 -
drivers/net/zxdh/zxdh_queue.c | 8 +-
drivers/net/zxdh/zxdh_tables.c | 21 ++--
drivers/power/acpi/acpi_cpufreq.c | 4 +-
drivers/power/amd_pstate/amd_pstate_cpufreq.c | 4 +-
drivers/power/amd_uncore/amd_uncore.c | 5 +-
drivers/power/cppc/cppc_cpufreq.c | 4 +-
.../power/intel_pstate/intel_pstate_cpufreq.c | 3 +-
drivers/power/intel_uncore/intel_uncore.c | 5 +-
drivers/raw/ifpga/afu_pmd_he_hssi.c | 4 +-
drivers/raw/ifpga/afu_pmd_he_lpbk.c | 4 +-
drivers/raw/ifpga/afu_pmd_he_mem.c | 4 +-
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 -
lib/acl/rte_acl_osdep.h | 1 -
lib/cryptodev/rte_cryptodev.c | 12 +-
lib/eal/common/eal_common_options.c | 6 +-
lib/efd/rte_efd.c | 3 +-
lib/ethdev/rte_ethdev.c | 3 +-
lib/ethdev/rte_flow.c | 104 ++++++++----------
lib/eventdev/rte_event_crypto_adapter.c | 2 +-
lib/hash/rte_thash.c | 4 +-
lib/lpm/rte_lpm6.c | 1 -
lib/net/rte_ether.c | 2 +-
lib/pcapng/rte_pcapng.c | 2 +-
lib/pdcp/pdcp_process.c | 51 +++++----
lib/rib/rte_rib6.h | 1 -
lib/security/rte_security.c | 4 +-
190 files changed, 746 insertions(+), 807 deletions(-)
create mode 100644 devtools/cocci/rte_memcpy_fixed.cocci
--
2.53.0
next reply other threads:[~2026-08-20 5:23 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-20 5:11 Stephen Hemminger [this message]
2026-08-20 5:11 ` [PATCH 01/61] devtools/cocci: add script to replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 02/61] app/testpmd: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 03/61] test: use memcpy instead of rte_memcpy Stephen Hemminger
2026-08-20 6:22 ` Morten Brørup
2026-08-20 16:22 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 04/61] app/graph: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h Stephen Hemminger
2026-08-20 5:11 ` [PATCH 06/61] acl: " Stephen Hemminger
2026-08-20 5:11 ` [PATCH 07/61] drivers/bus: " Stephen Hemminger
2026-08-20 5:11 ` [PATCH 08/61] security: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:11 ` [PATCH 09/61] ethdev: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 10/61] net: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 11/61] pdcp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 12/61] eventdev: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 13/61] eal: replace rte_memcpy of cpuset Stephen Hemminger
2026-08-20 5:12 ` [PATCH 14/61] cryptodev: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 15/61] drivers/raw: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 16/61] test-pipeline: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 17/61] net/af_xdp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 18/61] net/avp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 19/61] net/axgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 20/61] net/bnx2x: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 21/61] net/bnxt: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 22/61] net/bonding: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 23/61] net/cnxk: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 24/61] net/cxgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 25/61] net/dpaa2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 26/61] net/enic: " Stephen Hemminger
2026-08-20 9:05 ` Hyong Youb Kim (hyonkim)
2026-08-20 5:12 ` [PATCH 27/61] net/failsafe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 28/61] net/gve: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 29/61] net/hinic: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 30/61] net/hns3: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 31/61] net/mlx5: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 32/61] net/mvpp2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 33/61] net/netvsc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 34/61] net/nfp: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 35/61] net/ngbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 36/61] net/ntnic: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 37/61] net/null: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 38/61] net/qede: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 39/61] net/ring: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 40/61] net/sfc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 41/61] net/txgbe: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 42/61] net/vhost: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 43/61] net/virtio: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 44/61] net/sxe2: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 45/61] net/zxdh: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 46/61] net/memif: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 47/61] net/ice: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h Stephen Hemminger
2026-08-20 5:12 ` [PATCH 49/61] drivers/mempool: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 50/61] ml/cnxk: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 51/61] drivers/event: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 52/61] baseband/la12xx: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 53/61] baseband/acc: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data Stephen Hemminger
2026-08-20 5:12 ` [PATCH 55/61] hash: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 56/61] rib: remove rte_memcpy include Stephen Hemminger
2026-08-20 5:12 ` [PATCH 57/61] pcapng: replace use of rte_memcpy Stephen Hemminger
2026-08-20 5:12 ` [PATCH 58/61] efd: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 59/61] net/xsc: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 60/61] net/pcap: " Stephen Hemminger
2026-08-20 5:12 ` [PATCH 61/61] power: " Stephen Hemminger
2026-08-20 7:31 ` [PATCH 00/61] reduce " Morten Brørup
2026-08-20 8:16 ` Bruce Richardson
2026-08-20 8:46 ` Konstantin Ananyev
2026-08-20 9:03 ` Morten Brørup
2026-08-20 13:07 ` Konstantin Ananyev
2026-08-20 14:00 ` Morten Brørup
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260820052251.1453273-1-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.