[PATCH 00/61] reduce use of rte_memcpy

Stephen Hemminger <[email protected]>
Newsgroups org.dpdk.dev
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.