DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/61] reduce use of rte_memcpy
@ 2026-08-20  5:11 Stephen Hemminger
  2026-08-20  5:11 ` [PATCH 01/61] devtools/cocci: add script to replace fixed size rte_memcpy Stephen Hemminger
                   ` (61 more replies)
  0 siblings, 62 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20  5:11 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

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


^ permalink raw reply	[flat|nested] 64+ messages in thread

end of thread, other threads:[~2026-08-20  7:31 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-20  5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
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  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  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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox