Merge ~paelzer/ubuntu/+source/dpdk:lp-1940913-MRE-20.11.3-HIRSUTE into ubuntu/+source/dpdk:ubuntu/hirsute-devel

Proposed by Christian Ehrhardt 
Status: Merged
Approved by: Christian Ehrhardt 
Approved revision: f653bcabc24a827c0b729dbd38641dbcbfebdc31
Merged at revision: be80662c09bee7713b6316b704757d7c80311268
Proposed branch: ~paelzer/ubuntu/+source/dpdk:lp-1940913-MRE-20.11.3-HIRSUTE
Merge into: ubuntu/+source/dpdk:ubuntu/hirsute-devel
Diff against target: 35145 lines (+11003/-4997)
627 files modified
.ci/linux-build.sh (+48/-11)
.github/workflows/build.yml (+130/-0)
.travis.yml (+39/-12)
MAINTAINERS (+2/-0)
VERSION (+1/-1)
app/meson.build (+0/-4)
app/test-bbdev/test_bbdev_perf.c (+5/-2)
app/test-compress-perf/comp_perf_options_parse.c (+1/-1)
app/test-crypto-perf/cperf_options_parsing.c (+7/-1)
app/test-crypto-perf/cperf_test_common.c (+1/-1)
app/test-eventdev/evt_options.c (+2/-2)
app/test-eventdev/parser.c (+3/-1)
app/test-eventdev/parser.h (+1/-1)
app/test-eventdev/test_perf_common.c (+14/-8)
app/test-flow-perf/main.c (+22/-25)
app/test-pmd/bpf_cmd.c (+1/-1)
app/test-pmd/cmdline.c (+27/-20)
app/test-pmd/cmdline_flow.c (+2/-0)
app/test-pmd/config.c (+99/-14)
app/test-pmd/csumonly.c (+11/-10)
app/test-pmd/parameters.c (+10/-29)
app/test-pmd/testpmd.c (+75/-117)
app/test-pmd/testpmd.h (+2/-3)
app/test-regex/main.c (+3/-4)
app/test/autotest_test_funcs.py (+4/-1)
app/test/meson.build (+0/-3)
app/test/packet_burst_generator.c (+3/-2)
app/test/process.h (+8/-2)
app/test/test.c (+6/-5)
app/test/test_bpf.c (+1/-1)
app/test/test_cmdline_ipaddr.c (+1/-1)
app/test/test_cmdline_lib.c (+27/-12)
app/test/test_cmdline_num.c (+2/-2)
app/test/test_cryptodev.c (+50/-25)
app/test/test_cryptodev_aes_test_vectors.h (+1/-1)
app/test/test_cryptodev_blockcipher.c (+1/-1)
app/test/test_debug.c (+9/-2)
app/test/test_distributor_perf.c (+4/-2)
app/test/test_eal_flags.c (+1/-0)
app/test/test_event_crypto_adapter.c (+4/-5)
app/test/test_event_timer_adapter.c (+3/-1)
app/test/test_external_mem.c (+2/-1)
app/test/test_flow_classify.c (+6/-0)
app/test/test_kni.c (+6/-2)
app/test/test_mbuf.c (+9/-2)
app/test/test_mempool.c (+1/-1)
app/test/test_power_cpufreq.c (+84/-20)
app/test/test_prefetch.c (+1/-1)
app/test/test_reciprocal_division_perf.c (+24/-17)
app/test/test_stack.c (+4/-0)
app/test/test_stack_perf.c (+4/-0)
app/test/test_table_tables.c (+2/-1)
app/test/test_timer_secondary.c (+4/-4)
app/test/test_trace_perf.c (+2/-3)
buildtools/binutils-avx512-check.sh (+1/-1)
buildtools/check-symbols.sh (+1/-1)
buildtools/list-dir-globs.py (+1/-1)
buildtools/map-list-symbol.sh (+1/-1)
buildtools/meson.build (+2/-2)
buildtools/symlink-drivers-solibs.py (+49/-0)
config/meson.build (+10/-3)
config/ppc/meson.build (+14/-3)
debian/changelog (+23/-0)
debian/control (+2/-1)
debian/patches/disable_armhf_autopkgtest_fails.patch (+32/-0)
debian/patches/disable_autopkgtest_fails.patch (+49/-0)
debian/patches/disable_lcores_autotest_ppc.patch (+26/-0)
debian/patches/disable_ppc64_autopkgtest_fails.patch (+27/-0)
debian/patches/series (+5/-1)
debian/patches/ubuntu/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch (+42/-0)
dev/null (+0/-66)
devtools/check-maintainers.sh (+2/-2)
devtools/check-symbol-maps.sh (+1/-2)
devtools/checkpatches.sh (+1/-2)
doc/api/doxy-api.conf.in (+2/-1)
doc/guides/conf.py (+4/-45)
doc/guides/contributing/coding_style.rst (+1/-1)
doc/guides/contributing/documentation.rst (+10/-64)
doc/guides/cryptodevs/caam_jr.rst (+1/-1)
doc/guides/cryptodevs/qat.rst (+1/-1)
doc/guides/cryptodevs/scheduler.rst (+1/-1)
doc/guides/cryptodevs/virtio.rst (+1/-1)
doc/guides/eventdevs/dlb2.rst (+10/-31)
doc/guides/howto/pvp_reference_benchmark.rst (+1/-1)
doc/guides/linux_gsg/linux_drivers.rst (+10/-0)
doc/guides/nics/bnx2x.rst (+1/-1)
doc/guides/nics/dpaa.rst (+3/-3)
doc/guides/nics/ena.rst (+1/-1)
doc/guides/nics/enic.rst (+14/-18)
doc/guides/nics/hns3.rst (+3/-3)
doc/guides/nics/i40e.rst (+1/-1)
doc/guides/nics/ice.rst (+1/-1)
doc/guides/nics/mlx5.rst (+8/-1)
doc/guides/nics/netvsc.rst (+1/-1)
doc/guides/nics/nfp.rst (+5/-5)
doc/guides/nics/octeontx2.rst (+2/-2)
doc/guides/nics/virtio.rst (+4/-3)
doc/guides/nics/vmxnet3.rst (+2/-1)
doc/guides/platform/dpaa.rst (+1/-1)
doc/guides/prog_guide/bbdev.rst (+1/-1)
doc/guides/prog_guide/env_abstraction_layer.rst (+1/-1)
doc/guides/prog_guide/eventdev.rst (+1/-1)
doc/guides/prog_guide/multi_proc_support.rst (+1/-1)
doc/guides/prog_guide/qos_framework.rst (+1/-1)
doc/guides/prog_guide/regexdev.rst (+1/-1)
doc/guides/prog_guide/vhost_lib.rst (+12/-0)
doc/guides/prog_guide/writing_efficient_code.rst (+8/-7)
doc/guides/rawdevs/ioat.rst (+1/-1)
doc/guides/rawdevs/ntb.rst (+1/-1)
doc/guides/regexdevs/features_overview.rst (+1/-1)
doc/guides/rel_notes/deprecation.rst (+10/-14)
doc/guides/rel_notes/known_issues.rst (+5/-5)
doc/guides/rel_notes/release_16_11.rst (+1/-1)
doc/guides/rel_notes/release_19_08.rst (+1/-1)
doc/guides/rel_notes/release_20_05.rst (+7/-0)
doc/guides/rel_notes/release_20_11.rst (+896/-0)
doc/guides/rel_notes/release_2_2.rst (+1/-1)
doc/guides/sample_app_ug/fips_validation.rst (+1/-1)
doc/guides/sample_app_ug/hello_world.rst (+1/-1)
doc/guides/sample_app_ug/ipsec_secgw.rst (+1/-1)
doc/guides/sample_app_ug/performance_thread.rst (+1/-1)
doc/guides/sample_app_ug/vhost.rst (+1/-1)
doc/guides/testpmd_app_ug/run_app.rst (+7/-5)
doc/guides/testpmd_app_ug/testpmd_funcs.rst (+4/-3)
doc/guides/tools/hugepages.rst (+3/-3)
doc/meson.build (+1/-1)
drivers/bus/dpaa/base/fman/fman.c (+1/-1)
drivers/bus/dpaa/base/fman/fman_hw.c (+16/-17)
drivers/bus/dpaa/base/fman/netcfg_layer.c (+2/-2)
drivers/bus/dpaa/base/qbman/bman_driver.c (+9/-4)
drivers/bus/dpaa/base/qbman/qman_driver.c (+12/-5)
drivers/bus/dpaa/include/fsl_qman.h (+1/-1)
drivers/bus/dpaa/include/netcfg.h (+0/-1)
drivers/bus/fslmc/fslmc_logs.h (+0/-2)
drivers/bus/fslmc/qbman/include/compat.h (+0/-3)
drivers/bus/fslmc/qbman/qbman_portal.c (+3/-11)
drivers/bus/pci/linux/pci.c (+2/-2)
drivers/bus/pci/linux/pci_uio.c (+12/-0)
drivers/bus/pci/pci_common.c (+4/-1)
drivers/bus/pci/rte_bus_pci.h (+7/-6)
drivers/bus/pci/windows/pci.c (+15/-13)
drivers/bus/vmbus/vmbus_common.c (+4/-1)
drivers/common/dpaax/caamflib/compat.h (+6/-6)
drivers/common/dpaax/compat.h (+0/-5)
drivers/common/dpaax/dpaax_iova_table.c (+3/-1)
drivers/common/dpaax/meson.build (+0/-1)
drivers/common/iavf/iavf_impl.c (+3/-2)
drivers/common/iavf/virtchnl.h (+3/-3)
drivers/common/mlx5/linux/meson.build (+4/-0)
drivers/common/mlx5/linux/mlx5_glue.c (+64/-9)
drivers/common/mlx5/linux/mlx5_glue.h (+17/-1)
drivers/common/mlx5/linux/mlx5_nl.c (+76/-15)
drivers/common/mlx5/mlx5_common.c (+1/-8)
drivers/common/mlx5/mlx5_common_mr.c (+89/-0)
drivers/common/mlx5/mlx5_common_mr.h (+3/-0)
drivers/common/mlx5/mlx5_devx_cmds.c (+135/-5)
drivers/common/mlx5/mlx5_devx_cmds.h (+16/-0)
drivers/common/mlx5/mlx5_prm.h (+151/-4)
drivers/common/mlx5/version.map (+5/-1)
drivers/common/octeontx2/otx2_dev.h (+3/-0)
drivers/common/octeontx2/otx2_mbox.h (+7/-0)
drivers/common/qat/qat_device.h (+1/-1)
drivers/common/sfc_efx/base/ef10_filter.c (+9/-2)
drivers/common/sfc_efx/base/ef10_nic.c (+9/-1)
drivers/common/sfc_efx/base/efx_mae.c (+50/-11)
drivers/common/sfc_efx/base/efx_mcdi.c (+10/-0)
drivers/common/sfc_efx/base/efx_pci.c (+2/-1)
drivers/common/sfc_efx/base/rhead_nic.c (+0/-1)
drivers/common/sfc_efx/meson.build (+1/-1)
drivers/compress/qat/qat_comp.c (+4/-3)
drivers/compress/qat/qat_comp_pmd.c (+75/-36)
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c (+8/-2)
drivers/crypto/bcmfs/bcmfs_logs.c (+2/-15)
drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c (+24/-26)
drivers/crypto/dpaa_sec/dpaa_sec.c (+14/-0)
drivers/crypto/mvsam/rte_mrvl_pmd.c (+10/-2)
drivers/crypto/mvsam/rte_mrvl_pmd_ops.c (+7/-7)
drivers/crypto/octeontx/otx_cryptodev.c (+4/-1)
drivers/crypto/octeontx/otx_cryptodev_ops.c (+2/-2)
drivers/crypto/octeontx2/otx2_cryptodev_qp.h (+3/-1)
drivers/crypto/octeontx2/otx2_ipsec_po_ops.h (+2/-12)
drivers/crypto/octeontx2/otx2_security.h (+6/-4)
drivers/crypto/qat/qat_asym_pmd.c (+4/-0)
drivers/crypto/qat/qat_sym.c (+7/-3)
drivers/crypto/qat/qat_sym_session.c (+3/-0)
drivers/crypto/zuc/rte_zuc_pmd.c (+4/-4)
drivers/event/dlb/dlb.c (+1/-1)
drivers/event/dlb/pf/dlb_pf.c (+2/-1)
drivers/event/dlb2/dlb2.c (+1/-1)
drivers/event/dlb2/dlb2_priv.h (+0/-3)
drivers/event/dlb2/pf/dlb2_pf.c (+2/-1)
drivers/event/dpaa2/dpaa2_eventdev_logs.h (+0/-2)
drivers/event/octeontx2/otx2_evdev.c (+41/-24)
drivers/event/octeontx2/otx2_evdev_adptr.c (+1/-1)
drivers/event/octeontx2/otx2_evdev_crypto_adptr.c (+80/-30)
drivers/event/octeontx2/otx2_worker.h (+1/-1)
drivers/mempool/octeontx2/otx2_mempool_ops.c (+4/-2)
drivers/meson.build (+1/-1)
drivers/net/af_xdp/rte_eth_af_xdp.c (+2/-1)
drivers/net/ark/ark_ethdev.c (+3/-0)
drivers/net/ark/ark_ethdev_rx.c (+11/-38)
drivers/net/ark/ark_pktdir.c (+1/-1)
drivers/net/ark/ark_pktdir.h (+1/-1)
drivers/net/atlantic/atl_ethdev.c (+4/-3)
drivers/net/bnx2x/bnx2x.h (+7/-6)
drivers/net/bnx2x/bnx2x_rxtx.c (+7/-6)
drivers/net/bnxt/bnxt.h (+59/-9)
drivers/net/bnxt/bnxt_cpr.c (+2/-0)
drivers/net/bnxt/bnxt_cpr.h (+36/-4)
drivers/net/bnxt/bnxt_ethdev.c (+501/-144)
drivers/net/bnxt/bnxt_flow.c (+114/-56)
drivers/net/bnxt/bnxt_hwrm.c (+294/-174)
drivers/net/bnxt/bnxt_hwrm.h (+5/-10)
drivers/net/bnxt/bnxt_irq.c (+8/-4)
drivers/net/bnxt/bnxt_reps.c (+2/-2)
drivers/net/bnxt/bnxt_ring.c (+14/-16)
drivers/net/bnxt/bnxt_ring.h (+1/-1)
drivers/net/bnxt/bnxt_rxq.c (+4/-33)
drivers/net/bnxt/bnxt_rxq.h (+1/-0)
drivers/net/bnxt/bnxt_rxr.c (+116/-17)
drivers/net/bnxt/bnxt_rxr.h (+4/-1)
drivers/net/bnxt/bnxt_rxtx_vec_neon.c (+24/-7)
drivers/net/bnxt/bnxt_rxtx_vec_sse.c (+24/-7)
drivers/net/bnxt/bnxt_stats.c (+141/-25)
drivers/net/bnxt/bnxt_stats.h (+1/-6)
drivers/net/bnxt/bnxt_txq.c (+2/-2)
drivers/net/bnxt/bnxt_txr.c (+12/-14)
drivers/net/bnxt/bnxt_util.h (+2/-0)
drivers/net/bnxt/bnxt_vnic.c (+4/-3)
drivers/net/bnxt/bnxt_vnic.h (+1/-3)
drivers/net/bnxt/meson.build (+1/-1)
drivers/net/bonding/eth_bond_private.h (+1/-1)
drivers/net/bonding/rte_eth_bond_8023ad.c (+16/-1)
drivers/net/bonding/rte_eth_bond_api.c (+17/-9)
drivers/net/bonding/rte_eth_bond_args.c (+4/-4)
drivers/net/bonding/rte_eth_bond_pmd.c (+18/-8)
drivers/net/cxgbe/base/common.h (+9/-9)
drivers/net/dpaa/dpaa_ethdev.c (+19/-7)
drivers/net/dpaa/dpaa_flow.c (+4/-1)
drivers/net/dpaa2/dpaa2_ethdev.c (+19/-6)
drivers/net/e1000/base/e1000_i210.c (+2/-0)
drivers/net/e1000/e1000_logs.c (+5/-44)
drivers/net/e1000/em_ethdev.c (+9/-12)
drivers/net/e1000/igb_ethdev.c (+14/-19)
drivers/net/e1000/igb_flow.c (+1/-1)
drivers/net/e1000/igb_rxtx.c (+6/-3)
drivers/net/ena/base/ena_com.c (+36/-24)
drivers/net/ena/base/ena_defs/ena_admin_defs.h (+41/-44)
drivers/net/ena/base/ena_eth_com.c (+9/-7)
drivers/net/ena/base/ena_plat_dpdk.h (+7/-2)
drivers/net/ena/ena_ethdev.c (+29/-15)
drivers/net/ena/ena_platform.h (+0/-12)
drivers/net/enic/base/vnic_dev.c (+1/-1)
drivers/net/enic/base/vnic_enet.h (+1/-0)
drivers/net/enic/enic.h (+2/-2)
drivers/net/enic/enic_ethdev.c (+49/-36)
drivers/net/enic/enic_fm_flow.c (+4/-2)
drivers/net/enic/enic_main.c (+94/-67)
drivers/net/enic/enic_res.c (+3/-4)
drivers/net/failsafe/failsafe_ops.c (+8/-2)
drivers/net/hinic/base/hinic_compat.h (+8/-17)
drivers/net/hinic/base/hinic_pmd_niccfg.h (+0/-9)
drivers/net/hinic/base/hinic_pmd_nicio.c (+2/-2)
drivers/net/hinic/hinic_pmd_ethdev.c (+8/-9)
drivers/net/hinic/hinic_pmd_ethdev.h (+17/-0)
drivers/net/hns3/hns3_cmd.c (+17/-11)
drivers/net/hns3/hns3_cmd.h (+9/-12)
drivers/net/hns3/hns3_dcb.c (+60/-49)
drivers/net/hns3/hns3_dcb.h (+2/-2)
drivers/net/hns3/hns3_ethdev.c (+295/-214)
drivers/net/hns3/hns3_ethdev.h (+32/-17)
drivers/net/hns3/hns3_ethdev_vf.c (+78/-92)
drivers/net/hns3/hns3_fdir.c (+31/-21)
drivers/net/hns3/hns3_fdir.h (+3/-9)
drivers/net/hns3/hns3_flow.c (+167/-85)
drivers/net/hns3/hns3_intr.c (+36/-41)
drivers/net/hns3/hns3_intr.h (+3/-1)
drivers/net/hns3/hns3_logs.h (+1/-1)
drivers/net/hns3/hns3_mbx.c (+190/-66)
drivers/net/hns3/hns3_mbx.h (+19/-13)
drivers/net/hns3/hns3_mp.c (+3/-3)
drivers/net/hns3/hns3_mp.h (+1/-1)
drivers/net/hns3/hns3_regs.c (+3/-6)
drivers/net/hns3/hns3_regs.h (+1/-1)
drivers/net/hns3/hns3_rss.c (+1/-1)
drivers/net/hns3/hns3_rss.h (+1/-1)
drivers/net/hns3/hns3_rxtx.c (+237/-77)
drivers/net/hns3/hns3_rxtx.h (+23/-14)
drivers/net/hns3/hns3_rxtx_vec.c (+29/-9)
drivers/net/hns3/hns3_rxtx_vec.h (+4/-1)
drivers/net/hns3/hns3_rxtx_vec_neon.h (+1/-1)
drivers/net/hns3/hns3_rxtx_vec_sve.c (+27/-7)
drivers/net/hns3/hns3_stats.c (+5/-5)
drivers/net/hns3/hns3_stats.h (+3/-3)
drivers/net/hns3/meson.build (+20/-2)
drivers/net/i40e/base/virtchnl.h (+28/-1)
drivers/net/i40e/i40e_ethdev.c (+157/-63)
drivers/net/i40e/i40e_ethdev.h (+8/-6)
drivers/net/i40e/i40e_ethdev_vf.c (+48/-47)
drivers/net/i40e/i40e_fdir.c (+95/-4)
drivers/net/i40e/i40e_flow.c (+87/-98)
drivers/net/i40e/i40e_pf.c (+65/-0)
drivers/net/i40e/i40e_rxtx.c (+15/-7)
drivers/net/i40e/i40e_rxtx_vec_neon.c (+16/-4)
drivers/net/i40e/i40e_vf_representor.c (+20/-17)
drivers/net/iavf/iavf.h (+3/-3)
drivers/net/iavf/iavf_ethdev.c (+8/-10)
drivers/net/iavf/iavf_rxtx.c (+11/-1)
drivers/net/iavf/iavf_rxtx.h (+1/-1)
drivers/net/iavf/iavf_rxtx_vec_avx2.c (+2/-118)
drivers/net/iavf/iavf_rxtx_vec_avx512.c (+8/-5)
drivers/net/iavf/iavf_rxtx_vec_common.h (+203/-0)
drivers/net/iavf/iavf_vchnl.c (+20/-9)
drivers/net/ice/base/ice_flow.c (+8/-3)
drivers/net/ice/base/ice_lan_tx_rx.h (+1/-1)
drivers/net/ice/base/ice_osdep.h (+4/-3)
drivers/net/ice/base/ice_switch.c (+2/-1)
drivers/net/ice/base/meson.build (+5/-0)
drivers/net/ice/ice_dcf_ethdev.c (+4/-3)
drivers/net/ice/ice_dcf_parent.c (+2/-1)
drivers/net/ice/ice_ethdev.c (+75/-36)
drivers/net/ice/ice_ethdev.h (+6/-3)
drivers/net/ice/ice_fdir_filter.c (+3/-3)
drivers/net/ice/ice_hash.c (+14/-0)
drivers/net/ice/ice_rxtx.c (+31/-37)
drivers/net/ice/ice_rxtx.h (+2/-2)
drivers/net/ice/ice_rxtx_vec_avx2.c (+3/-119)
drivers/net/ice/ice_rxtx_vec_avx512.c (+5/-2)
drivers/net/ice/ice_rxtx_vec_common.h (+204/-1)
drivers/net/ice/ice_rxtx_vec_sse.c (+1/-1)
drivers/net/ice/ice_switch_filter.c (+3/-3)
drivers/net/ice/meson.build (+2/-0)
drivers/net/igc/igc_ethdev.c (+23/-23)
drivers/net/igc/igc_ethdev.h (+2/-1)
drivers/net/igc/igc_flow.c (+1/-1)
drivers/net/igc/igc_txrx.c (+16/-14)
drivers/net/ionic/ionic_ethdev.c (+9/-6)
drivers/net/ionic/ionic_lif.c (+3/-2)
drivers/net/ixgbe/ixgbe_ethdev.c (+18/-4)
drivers/net/ixgbe/ixgbe_flow.c (+1/-0)
drivers/net/kni/rte_eth_kni.c (+10/-2)
drivers/net/memif/memif_socket.c (+12/-3)
drivers/net/memif/rte_eth_memif.c (+1/-0)
drivers/net/memif/rte_eth_memif.h (+0/-4)
drivers/net/mlx4/mlx4.c (+1/-0)
drivers/net/mlx4/mlx4_flow.c (+2/-1)
drivers/net/mlx4/mlx4_mp.c (+1/-1)
drivers/net/mlx4/mlx4_rxtx.c (+0/-4)
drivers/net/mlx4/mlx4_txq.c (+9/-10)
drivers/net/mlx5/linux/mlx5_ethdev_os.c (+2/-2)
drivers/net/mlx5/linux/mlx5_mp_os.c (+1/-1)
drivers/net/mlx5/linux/mlx5_os.c (+194/-58)
drivers/net/mlx5/linux/mlx5_socket.c (+0/-4)
drivers/net/mlx5/linux/mlx5_verbs.c (+121/-0)
drivers/net/mlx5/linux/mlx5_verbs.h (+2/-0)
drivers/net/mlx5/meson.build (+1/-0)
drivers/net/mlx5/mlx5.c (+20/-8)
drivers/net/mlx5/mlx5.h (+20/-3)
drivers/net/mlx5/mlx5_devx.c (+6/-0)
drivers/net/mlx5/mlx5_flow.c (+184/-82)
drivers/net/mlx5/mlx5_flow.h (+48/-21)
drivers/net/mlx5/mlx5_flow_age.c (+3/-2)
drivers/net/mlx5/mlx5_flow_dv.c (+304/-100)
drivers/net/mlx5/mlx5_flow_verbs.c (+6/-4)
drivers/net/mlx5/mlx5_mr.c (+16/-96)
drivers/net/mlx5/mlx5_rxq.c (+3/-9)
drivers/net/mlx5/mlx5_rxtx.c (+27/-20)
drivers/net/mlx5/mlx5_rxtx.h (+1/-0)
drivers/net/mlx5/mlx5_rxtx_vec.c (+2/-1)
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h (+7/-6)
drivers/net/mlx5/mlx5_rxtx_vec_neon.h (+15/-11)
drivers/net/mlx5/mlx5_rxtx_vec_sse.h (+6/-5)
drivers/net/mlx5/mlx5_trigger.c (+15/-7)
drivers/net/mlx5/mlx5_txpp.c (+17/-6)
drivers/net/mlx5/mlx5_txq.c (+1/-1)
drivers/net/mvpp2/mrvl_ethdev.c (+9/-3)
drivers/net/mvpp2/mrvl_ethdev.h (+2/-1)
drivers/net/mvpp2/mrvl_tm.c (+66/-1)
drivers/net/nfp/nfp_net.c (+15/-11)
drivers/net/octeontx/base/octeontx_pkivf.h (+0/-1)
drivers/net/octeontx2/otx2_ethdev.c (+41/-31)
drivers/net/octeontx2/otx2_ethdev.h (+12/-1)
drivers/net/octeontx2/otx2_ethdev_devargs.c (+1/-1)
drivers/net/octeontx2/otx2_ethdev_ops.c (+2/-3)
drivers/net/octeontx2/otx2_flow.c (+14/-2)
drivers/net/octeontx2/otx2_flow.h (+0/-1)
drivers/net/octeontx2/otx2_tm.c (+6/-0)
drivers/net/octeontx2/otx2_tx.c (+6/-2)
drivers/net/octeontx2/otx2_tx.h (+7/-5)
drivers/net/octeontx2/otx2_vlan.c (+4/-4)
drivers/net/pcap/rte_eth_pcap.c (+8/-4)
drivers/net/pfe/pfe_ethdev.c (+0/-5)
drivers/net/qede/base/ecore_int.c (+1/-1)
drivers/net/qede/qede_ethdev.c (+4/-5)
drivers/net/sfc/meson.build (+1/-1)
drivers/net/sfc/sfc.h (+3/-2)
drivers/net/sfc/sfc_ef100_rx.c (+14/-9)
drivers/net/sfc/sfc_ethdev.c (+50/-44)
drivers/net/sfc/sfc_mae.c (+35/-25)
drivers/net/sfc/sfc_mae.h (+2/-1)
drivers/net/sfc/sfc_port.c (+32/-17)
drivers/net/softnic/conn.c (+1/-0)
drivers/net/softnic/rte_eth_softnic.c (+28/-4)
drivers/net/softnic/rte_eth_softnic_action.c (+1/-0)
drivers/net/softnic/rte_eth_softnic_internals.h (+3/-2)
drivers/net/tap/rte_eth_tap.c (+18/-9)
drivers/net/tap/tap_flow.c (+7/-1)
drivers/net/tap/tap_intr.c (+1/-1)
drivers/net/txgbe/base/txgbe_eeprom.c (+2/-74)
drivers/net/txgbe/base/txgbe_eeprom.h (+0/-2)
drivers/net/txgbe/base/txgbe_type.h (+1/-0)
drivers/net/txgbe/txgbe_ethdev.c (+39/-8)
drivers/net/txgbe/txgbe_ptypes.c (+3/-1)
drivers/net/virtio/meson.build (+1/-1)
drivers/net/virtio/virtio_ethdev.c (+67/-0)
drivers/net/virtio/virtio_ethdev.h (+5/-0)
drivers/net/virtio/virtio_pci.h (+2/-0)
drivers/net/virtio/virtio_rxtx.c (+61/-19)
drivers/net/virtio/virtio_rxtx_simple_altivec.c (+6/-6)
drivers/net/virtio/virtio_rxtx_simple_neon.c (+6/-6)
drivers/net/virtio/virtio_rxtx_simple_sse.c (+6/-6)
drivers/net/virtio/virtio_user/virtio_user_dev.c (+6/-0)
drivers/net/virtio/virtio_user_ethdev.c (+56/-19)
drivers/raw/ifpga/ifpga_rawdev.c (+2/-2)
drivers/raw/ifpga/ifpga_rawdev.h (+2/-0)
drivers/raw/ioat/dpdk_idxd_cfg.py (+7/-7)
drivers/raw/ntb/ntb.c (+13/-0)
drivers/raw/ntb/ntb_hw_intel.c (+5/-0)
drivers/raw/octeontx2_dma/otx2_dpi_rawdev.c (+1/-0)
drivers/raw/skeleton/skeleton_rawdev_test.c (+1/-0)
drivers/regex/mlx5/mlx5_regex.c (+1/-2)
drivers/regex/mlx5/mlx5_regex.h (+1/-0)
drivers/regex/mlx5/mlx5_regex_control.c (+1/-0)
drivers/regex/mlx5/mlx5_regex_fastpath.c (+2/-2)
drivers/regex/octeontx2/meson.build (+0/-1)
drivers/vdpa/ifc/base/ifcvf.c (+6/-1)
drivers/vdpa/mlx5/mlx5_vdpa.c (+3/-0)
drivers/vdpa/mlx5/mlx5_vdpa.h (+1/-0)
drivers/vdpa/mlx5/mlx5_vdpa_event.c (+3/-1)
drivers/vdpa/mlx5/mlx5_vdpa_virtq.c (+9/-6)
examples/bbdev_app/Makefile (+3/-3)
examples/bbdev_app/main.c (+4/-1)
examples/bond/Makefile (+3/-3)
examples/bond/main.c (+4/-0)
examples/cmdline/Makefile (+3/-3)
examples/cmdline/main.c (+3/-0)
examples/distributor/Makefile (+3/-3)
examples/distributor/main.c (+3/-0)
examples/ethtool/ethtool-app/Makefile (+3/-3)
examples/ethtool/ethtool-app/ethapp.c (+0/-1)
examples/ethtool/ethtool-app/main.c (+3/-0)
examples/ethtool/lib/Makefile (+3/-3)
examples/eventdev_pipeline/Makefile (+3/-3)
examples/fips_validation/Makefile (+3/-3)
examples/fips_validation/main.c (+3/-0)
examples/flow_classify/Makefile (+3/-3)
examples/flow_classify/flow_classify.c (+4/-1)
examples/flow_filtering/Makefile (+3/-3)
examples/flow_filtering/main.c (+6/-1)
examples/helloworld/Makefile (+3/-3)
examples/helloworld/main.c (+4/-0)
examples/ioat/Makefile (+3/-3)
examples/ioat/ioatfwd.c (+3/-0)
examples/ip_fragmentation/Makefile (+3/-3)
examples/ip_fragmentation/main.c (+3/-0)
examples/ip_pipeline/Makefile (+3/-3)
examples/ip_reassembly/Makefile (+3/-3)
examples/ip_reassembly/main.c (+3/-0)
examples/ipsec-secgw/Makefile (+3/-3)
examples/ipsec-secgw/ipsec-secgw.c (+3/-0)
examples/ipv4_multicast/Makefile (+3/-3)
examples/ipv4_multicast/main.c (+3/-0)
examples/kni/Makefile (+3/-3)
examples/kni/main.c (+3/-0)
examples/l2fwd-cat/Makefile (+3/-3)
examples/l2fwd-cat/l2fwd-cat.c (+4/-1)
examples/l2fwd-crypto/Makefile (+3/-3)
examples/l2fwd-crypto/main.c (+23/-0)
examples/l2fwd-event/Makefile (+3/-3)
examples/l2fwd-event/main.c (+3/-0)
examples/l2fwd-jobstats/Makefile (+3/-3)
examples/l2fwd-jobstats/main.c (+3/-0)
examples/l2fwd-keepalive/Makefile (+3/-3)
examples/l2fwd-keepalive/ka-agent/Makefile (+3/-3)
examples/l2fwd-keepalive/main.c (+4/-0)
examples/l2fwd/Makefile (+3/-3)
examples/l2fwd/main.c (+17/-3)
examples/l3fwd-acl/Makefile (+3/-3)
examples/l3fwd-acl/main.c (+3/-0)
examples/l3fwd-graph/Makefile (+3/-3)
examples/l3fwd-graph/main.c (+3/-0)
examples/l3fwd-power/Makefile (+3/-3)
examples/l3fwd-power/main.c (+2/-2)
examples/l3fwd/Makefile (+3/-3)
examples/l3fwd/l3fwd_lpm.c (+16/-10)
examples/l3fwd/main.c (+4/-0)
examples/link_status_interrupt/Makefile (+3/-3)
examples/link_status_interrupt/main.c (+3/-0)
examples/meson.build (+7/-3)
examples/multi_process/client_server_mp/mp_client/Makefile (+3/-3)
examples/multi_process/client_server_mp/mp_client/client.c (+3/-0)
examples/multi_process/client_server_mp/mp_server/Makefile (+3/-3)
examples/multi_process/client_server_mp/mp_server/main.c (+4/-0)
examples/multi_process/hotplug_mp/Makefile (+3/-3)
examples/multi_process/simple_mp/Makefile (+3/-3)
examples/multi_process/simple_mp/main.c (+4/-0)
examples/multi_process/symmetric_mp/Makefile (+3/-3)
examples/multi_process/symmetric_mp/main.c (+3/-0)
examples/ntb/Makefile (+3/-3)
examples/ntb/ntb_fwd.c (+3/-0)
examples/packet_ordering/Makefile (+3/-3)
examples/packet_ordering/main.c (+5/-1)
examples/performance-thread/l3fwd-thread/Makefile (+3/-2)
examples/performance-thread/l3fwd-thread/main.c (+3/-0)
examples/performance-thread/pthread_shim/Makefile (+3/-3)
examples/performance-thread/pthread_shim/main.c (+4/-0)
examples/pipeline/Makefile (+3/-3)
examples/pipeline/main.c (+3/-0)
examples/ptpclient/Makefile (+3/-3)
examples/ptpclient/ptpclient.c (+3/-4)
examples/qos_meter/Makefile (+3/-3)
examples/qos_meter/main.c (+3/-0)
examples/qos_sched/Makefile (+3/-3)
examples/qos_sched/main.c (+3/-0)
examples/rxtx_callbacks/Makefile (+3/-3)
examples/rxtx_callbacks/main.c (+5/-1)
examples/server_node_efd/node/Makefile (+3/-3)
examples/server_node_efd/node/node.c (+3/-0)
examples/server_node_efd/server/Makefile (+3/-3)
examples/server_node_efd/server/main.c (+4/-0)
examples/service_cores/Makefile (+3/-3)
examples/service_cores/main.c (+3/-0)
examples/skeleton/Makefile (+3/-3)
examples/skeleton/basicfwd.c (+4/-1)
examples/timer/Makefile (+3/-3)
examples/timer/main.c (+13/-10)
examples/vdpa/Makefile (+3/-3)
examples/vdpa/main.c (+3/-0)
examples/vhost/Makefile (+3/-3)
examples/vhost/main.c (+26/-22)
examples/vhost/virtio_net.c (+7/-1)
examples/vhost_blk/Makefile (+3/-3)
examples/vhost_blk/vhost_blk.c (+3/-0)
examples/vhost_crypto/Makefile (+3/-3)
examples/vhost_crypto/main.c (+4/-1)
examples/vm_power_manager/Makefile (+3/-3)
examples/vm_power_manager/guest_cli/Makefile (+3/-3)
examples/vm_power_manager/guest_cli/main.c (+3/-0)
examples/vm_power_manager/main.c (+3/-0)
examples/vmdq/Makefile (+3/-3)
examples/vmdq/main.c (+3/-0)
examples/vmdq_dcb/Makefile (+3/-3)
examples/vmdq_dcb/main.c (+3/-0)
kernel/linux/kni/kni_net.c (+36/-18)
lib/librte_acl/acl_run_avx512_common.h (+24/-0)
lib/librte_bpf/bpf_validate.c (+1/-1)
lib/librte_cryptodev/rte_cryptodev_pmd.c (+2/-1)
lib/librte_distributor/rte_distributor.c (+1/-1)
lib/librte_eal/arm/rte_cpuflags.c (+1/-1)
lib/librte_eal/common/eal_common_fbarray.c (+3/-4)
lib/librte_eal/common/eal_common_options.c (+9/-3)
lib/librte_eal/common/eal_common_proc.c (+27/-22)
lib/librte_eal/common/eal_common_thread.c (+38/-28)
lib/librte_eal/common/malloc_mp.c (+1/-3)
lib/librte_eal/freebsd/eal.c (+4/-0)
lib/librte_eal/freebsd/include/rte_os.h (+3/-3)
lib/librte_eal/include/rte_bitmap.h (+1/-2)
lib/librte_eal/include/rte_eal_paging.h (+1/-1)
lib/librte_eal/include/rte_lcore.h (+8/-0)
lib/librte_eal/include/rte_malloc.h (+1/-1)
lib/librte_eal/include/rte_reciprocal.h (+8/-0)
lib/librte_eal/include/rte_service.h (+1/-4)
lib/librte_eal/include/rte_vfio.h (+5/-3)
lib/librte_eal/linux/eal.c (+4/-0)
lib/librte_eal/linux/eal_log.c (+3/-3)
lib/librte_eal/linux/eal_memalloc.c (+2/-12)
lib/librte_eal/linux/eal_vfio.c (+41/-57)
lib/librte_eal/linux/eal_vfio.h (+1/-0)
lib/librte_eal/linux/include/rte_os.h (+5/-3)
lib/librte_eal/unix/eal_file.c (+1/-0)
lib/librte_eal/unix/eal_unix_memory.c (+6/-5)
lib/librte_eal/version.map (+0/-1)
lib/librte_eal/windows/eal.c (+5/-0)
lib/librte_eal/windows/eal_alarm.c (+12/-0)
lib/librte_eal/windows/eal_hugepages.c (+4/-0)
lib/librte_eal/windows/eal_memory.c (+8/-1)
lib/librte_eal/windows/eal_thread.c (+2/-2)
lib/librte_eal/windows/eal_windows.h (+5/-0)
lib/librte_eal/windows/include/pthread.h (+11/-5)
lib/librte_eal/windows/include/rte_os.h (+2/-3)
lib/librte_eal/windows/include/sched.h (+1/-0)
lib/librte_ethdev/rte_ethdev.c (+13/-1)
lib/librte_ethdev/rte_ethdev.h (+5/-0)
lib/librte_ethdev/rte_flow.h (+3/-3)
lib/librte_eventdev/rte_event_crypto_adapter.c (+1/-0)
lib/librte_eventdev/rte_event_eth_rx_adapter.c (+2/-3)
lib/librte_eventdev/rte_event_eth_tx_adapter.c (+0/-1)
lib/librte_flow_classify/rte_flow_classify.c (+2/-2)
lib/librte_graph/graph_stats.c (+5/-2)
lib/librte_ip_frag/rte_ipv4_fragmentation.c (+21/-13)
lib/librte_kni/rte_kni.c (+8/-4)
lib/librte_kni/rte_kni_common.h (+1/-0)
lib/librte_mbuf/rte_mbuf_dyn.c (+8/-2)
lib/librte_net/rte_ip.h (+1/-1)
lib/librte_pipeline/rte_swx_pipeline.c (+394/-100)
lib/librte_power/guest_channel.c (+11/-11)
lib/librte_power/power_acpi_cpufreq.c (+3/-2)
lib/librte_power/power_pstate_cpufreq.c (+3/-2)
lib/librte_power/rte_power_guest_channel.h (+0/-8)
lib/librte_power/version.map (+0/-2)
lib/librte_rib/rte_rib6.c (+21/-8)
lib/librte_sched/rte_sched.c (+33/-29)
lib/librte_stack/rte_stack.c (+3/-1)
lib/librte_stack/rte_stack.h (+2/-1)
lib/librte_stack/rte_stack_lf.h (+5/-0)
lib/librte_table/rte_swx_table_em.c (+3/-5)
lib/librte_telemetry/rte_telemetry.h (+4/-0)
lib/librte_telemetry/telemetry.c (+2/-0)
lib/librte_vhost/rte_vhost.h (+1/-0)
lib/librte_vhost/socket.c (+4/-1)
lib/librte_vhost/vhost.c (+6/-2)
lib/librte_vhost/vhost.h (+8/-6)
lib/librte_vhost/vhost_crypto.c (+4/-2)
lib/librte_vhost/vhost_user.c (+42/-11)
lib/librte_vhost/virtio_net.c (+265/-59)
license/README (+2/-2)
meson.build (+1/-1)
Reviewer Review Type Date Requested Status
Bryce Harrington (community) Approve
Canonical Server Team Pending
Canonical Server packageset reviewers Pending
Review via email: mp+408162@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

FYI this follows Debians model of importing the upstream not as a single commit, but as

To ease comparison I recommend from <email address hidden>:debian/dpdk.git the branch upstream-20.11-stable

With that you can easily see that it matches the upstream release and other than that doesn't change too much.

Revision history for this message
Bryce Harrington (bryce) wrote :

LGTM, see focal MP for detail.

review: Approve
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

Thank you, uploaded

Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading dpdk_20.11.3-0ubuntu0.21.04.1.dsc: done.
  Uploading dpdk_20.11.3.orig.tar.xz: done.
  Uploading dpdk_20.11.3-0ubuntu0.21.04.1.debian.tar.xz: done.
  Uploading dpdk_20.11.3-0ubuntu0.21.04.1_source.buildinfo: done.
  Uploading dpdk_20.11.3-0ubuntu0.21.04.1_source.changes: done.
Successfully uploaded packages.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
2index d079801..26c30a2 100755
3--- a/.ci/linux-build.sh
4+++ b/.ci/linux-build.sh
5@@ -4,7 +4,10 @@ on_error() {
6 if [ $? = 0 ]; then
7 exit
8 fi
9- FILES_TO_PRINT="build/meson-logs/testlog.txt build/.ninja_log build/meson-logs/meson-log.txt"
10+ FILES_TO_PRINT="build/meson-logs/testlog.txt"
11+ FILES_TO_PRINT="$FILES_TO_PRINT build/.ninja_log"
12+ FILES_TO_PRINT="$FILES_TO_PRINT build/meson-logs/meson-log.txt"
13+ FILES_TO_PRINT="$FILES_TO_PRINT build/gdb.log"
14
15 for pr_file in $FILES_TO_PRINT; do
16 if [ -e "$pr_file" ]; then
17@@ -12,7 +15,9 @@ on_error() {
18 fi
19 done
20 }
21-trap on_error EXIT
22+# We capture the error logs as artifacts in Github Actions, no need to dump
23+# them via a EXIT handler.
24+[ -n "$GITHUB_WORKFLOW" ] || trap on_error EXIT
25
26 install_libabigail() {
27 version=$1
28@@ -28,16 +33,36 @@ install_libabigail() {
29 rm ${version}.tar.gz
30 }
31
32-if [ "$AARCH64" = "1" ]; then
33+configure_coredump() {
34+ # No point in configuring coredump without gdb
35+ which gdb >/dev/null || return 0
36+ ulimit -c unlimited
37+ sudo sysctl -w kernel.core_pattern=/tmp/dpdk-core.%e.%p
38+}
39+
40+catch_coredump() {
41+ ls /tmp/dpdk-core.*.* 2>/dev/null || return 0
42+ for core in /tmp/dpdk-core.*.*; do
43+ binary=$(sudo readelf -n $core |grep $(pwd)/build/ 2>/dev/null |head -n1)
44+ [ -x $binary ] || binary=
45+ sudo gdb $binary -c $core \
46+ -ex 'info threads' \
47+ -ex 'thread apply all bt full' \
48+ -ex 'quit'
49+ done |tee -a build/gdb.log
50+ return 1
51+}
52+
53+if [ "$AARCH64" = "true" ]; then
54 # convert the arch specifier
55 OPTS="$OPTS --cross-file config/arm/arm64_armv8_linux_gcc"
56 fi
57
58-if [ "$BUILD_DOCS" = "1" ]; then
59+if [ "$BUILD_DOCS" = "true" ]; then
60 OPTS="$OPTS -Denable_docs=true"
61 fi
62
63-if [ "$BUILD_32BIT" = "1" ]; then
64+if [ "$BUILD_32BIT" = "true" ]; then
65 OPTS="$OPTS -Dc_args=-m32 -Dc_link_args=-m32"
66 export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig"
67 fi
68@@ -48,16 +73,21 @@ else
69 OPTS="$OPTS -Dexamples=all"
70 fi
71
72+OPTS="$OPTS -Dmachine=default"
73 OPTS="$OPTS --default-library=$DEF_LIB"
74 OPTS="$OPTS --buildtype=debugoptimized"
75 meson build --werror $OPTS
76 ninja -C build
77
78-if [ "$AARCH64" != "1" ]; then
79- devtools/test-null.sh
80+if [ "$AARCH64" != "true" ]; then
81+ failed=
82+ configure_coredump
83+ devtools/test-null.sh || failed="true"
84+ catch_coredump
85+ [ "$failed" != "true" ]
86 fi
87
88-if [ "$ABI_CHECKS" = "1" ]; then
89+if [ "$ABI_CHECKS" = "true" ]; then
90 LIBABIGAIL_VERSION=${LIBABIGAIL_VERSION:-libabigail-1.6}
91
92 if [ "$(cat libabigail/VERSION 2>/dev/null)" != "$LIBABIGAIL_VERSION" ]; then
93@@ -83,10 +113,13 @@ if [ "$ABI_CHECKS" = "1" ]; then
94 if [ ! -d reference ]; then
95 refsrcdir=$(readlink -f $(pwd)/../dpdk-$REF_GIT_TAG)
96 git clone --single-branch -b $REF_GIT_TAG $REF_GIT_REPO $refsrcdir
97- meson --werror $OPTS $refsrcdir $refsrcdir/build
98+ meson $OPTS -Dexamples= $refsrcdir $refsrcdir/build
99 ninja -C $refsrcdir/build
100 DESTDIR=$(pwd)/reference ninja -C $refsrcdir/build install
101 devtools/gen-abi.sh reference
102+ find reference/usr/local -name '*.a' -delete
103+ rm -rf reference/usr/local/bin
104+ rm -rf reference/usr/local/share
105 echo $REF_GIT_TAG > reference/VERSION
106 fi
107
108@@ -95,6 +128,10 @@ if [ "$ABI_CHECKS" = "1" ]; then
109 devtools/check-abi.sh reference install ${ABI_CHECKS_WARN_ONLY:-}
110 fi
111
112-if [ "$RUN_TESTS" = "1" ]; then
113- sudo meson test -C build --suite fast-tests -t 3
114+if [ "$RUN_TESTS" = "true" ]; then
115+ failed=
116+ configure_coredump
117+ sudo meson test -C build --suite fast-tests -t 3 || failed="true"
118+ catch_coredump
119+ [ "$failed" != "true" ]
120 fi
121diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
122new file mode 100644
123index 0000000..4093b32
124--- /dev/null
125+++ b/.github/workflows/build.yml
126@@ -0,0 +1,130 @@
127+name: build
128+
129+on:
130+ push:
131+ schedule:
132+ - cron: '0 0 * * 1'
133+
134+defaults:
135+ run:
136+ shell: bash --noprofile --norc -exo pipefail {0}
137+
138+jobs:
139+ build:
140+ name: ${{ join(matrix.config.*, '-') }}
141+ runs-on: ${{ matrix.config.os }}
142+ env:
143+ AARCH64: ${{ matrix.config.cross == 'aarch64' }}
144+ ABI_CHECKS: ${{ contains(matrix.config.checks, 'abi') }}
145+ BUILD_32BIT: ${{ matrix.config.cross == 'i386' }}
146+ BUILD_DOCS: ${{ contains(matrix.config.checks, 'doc') }}
147+ CC: ccache ${{ matrix.config.compiler }}
148+ DEF_LIB: ${{ matrix.config.library }}
149+ LIBABIGAIL_VERSION: libabigail-1.8
150+ REF_GIT_TAG: v20.11
151+ RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }}
152+
153+ strategy:
154+ fail-fast: false
155+ matrix:
156+ config:
157+ - os: ubuntu-18.04
158+ compiler: gcc
159+ library: static
160+ - os: ubuntu-18.04
161+ compiler: gcc
162+ library: shared
163+ checks: abi+doc+tests
164+ - os: ubuntu-18.04
165+ compiler: clang
166+ library: static
167+ - os: ubuntu-18.04
168+ compiler: clang
169+ library: shared
170+ checks: doc+tests
171+ - os: ubuntu-18.04
172+ compiler: gcc
173+ library: static
174+ cross: i386
175+ - os: ubuntu-18.04
176+ compiler: gcc
177+ library: static
178+ cross: aarch64
179+ - os: ubuntu-18.04
180+ compiler: gcc
181+ library: shared
182+ cross: aarch64
183+
184+ steps:
185+ - name: Checkout sources
186+ uses: actions/checkout@v2
187+ - name: Generate cache keys
188+ id: get_ref_keys
189+ run: |
190+ echo -n '::set-output name=ccache::'
191+ echo 'ccache-${{ matrix.config.os }}-${{ matrix.config.compiler }}-${{ matrix.config.cross }}-'$(date -u +%Y-w%W)
192+ echo -n '::set-output name=libabigail::'
193+ echo 'libabigail-${{ matrix.config.os }}'
194+ echo -n '::set-output name=abi::'
195+ echo 'abi-${{ matrix.config.os }}-${{ matrix.config.compiler }}-${{ matrix.config.cross }}-${{ env.LIBABIGAIL_VERSION }}-${{ env.REF_GIT_TAG }}'
196+ - name: Retrieve ccache cache
197+ uses: actions/cache@v2
198+ with:
199+ path: ~/.ccache
200+ key: ${{ steps.get_ref_keys.outputs.ccache }}-${{ github.ref }}
201+ restore-keys: |
202+ ${{ steps.get_ref_keys.outputs.ccache }}-refs/heads/main
203+ - name: Retrieve libabigail cache
204+ id: libabigail-cache
205+ uses: actions/cache@v2
206+ if: env.ABI_CHECKS == 'true'
207+ with:
208+ path: libabigail
209+ key: ${{ steps.get_ref_keys.outputs.libabigail }}
210+ - name: Retrieve ABI reference cache
211+ uses: actions/cache@v2
212+ if: env.ABI_CHECKS == 'true'
213+ with:
214+ path: reference
215+ key: ${{ steps.get_ref_keys.outputs.abi }}
216+ - name: Update APT cache
217+ run: sudo apt update || true
218+ - name: Install packages
219+ run: sudo apt install -y ccache libnuma-dev python3-setuptools
220+ python3-wheel python3-pip ninja-build libbsd-dev libpcap-dev
221+ libibverbs-dev libcrypto++-dev libfdt-dev libjansson-dev
222+ - name: Install libabigail build dependencies if no cache is available
223+ if: env.ABI_CHECKS == 'true' && steps.libabigail-cache.outputs.cache-hit != 'true'
224+ run: sudo apt install -y autoconf automake libtool pkg-config libxml2-dev
225+ libdw-dev
226+ - name: Install i386 cross compiling packages
227+ if: env.BUILD_32BIT == 'true'
228+ run: sudo apt install -y gcc-multilib
229+ - name: Install aarch64 cross compiling packages
230+ if: env.AARCH64 == 'true'
231+ run: sudo apt install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross
232+ pkg-config-aarch64-linux-gnu
233+ - name: Install test tools packages
234+ if: env.AARCH64 != 'true' || env.RUN_TESTS == 'true'
235+ run: sudo apt install -y gdb
236+ - name: Install doc generation packages
237+ if: env.BUILD_DOCS == 'true'
238+ run: sudo apt install -y doxygen graphviz python3-sphinx
239+ python3-sphinx-rtd-theme
240+ - name: Run setup
241+ run: |
242+ .ci/linux-setup.sh
243+ # Workaround on $HOME permissions as EAL checks them for plugin loading
244+ chmod o-w $HOME
245+ - name: Build and test
246+ run: .ci/linux-build.sh
247+ - name: Upload logs on failure
248+ if: failure()
249+ uses: actions/upload-artifact@v2
250+ with:
251+ name: meson-logs-${{ join(matrix.config.*, '-') }}
252+ path: |
253+ build/meson-logs/testlog.txt
254+ build/.ninja_log
255+ build/meson-logs/meson-log.txt
256+ build/gdb.log
257diff --git a/.travis.yml b/.travis.yml
258index 5e12db2..5aa7ad4 100644
259--- a/.travis.yml
260+++ b/.travis.yml
261@@ -2,6 +2,9 @@
262 language: c
263 cache:
264 ccache: true
265+ directories:
266+ - libabigail
267+ - reference
268
269 dist: bionic
270
271@@ -18,6 +21,9 @@ _aarch64_packages: &aarch64_packages
272 - *required_packages
273 - [gcc-aarch64-linux-gnu, libc6-dev-arm64-cross, pkg-config-aarch64-linux-gnu]
274
275+_libabigail_build_packages: &libabigail_build_packages
276+ - [autoconf, automake, libtool, pkg-config, libxml2-dev, libdw-dev]
277+
278 _build_32b_packages: &build_32b_packages
279 - *required_packages
280 - [gcc-multilib]
281@@ -28,16 +34,21 @@ _doc_packages: &doc_packages
282 before_install: ./.ci/${TRAVIS_OS_NAME}-setup.sh
283 script: ./.ci/${TRAVIS_OS_NAME}-build.sh
284
285+env:
286+ global:
287+ - LIBABIGAIL_VERSION=libabigail-1.8
288+ - REF_GIT_TAG=v20.11
289+
290 jobs:
291 include:
292 # x86_64 gcc jobs
293 - env: DEF_LIB="static"
294 arch: amd64
295 compiler: gcc
296- - env: DEF_LIB="shared" RUN_TESTS=1
297+ - env: DEF_LIB="shared" RUN_TESTS=true
298 arch: amd64
299 compiler: gcc
300- - env: DEF_LIB="shared" BUILD_DOCS=1
301+ - env: DEF_LIB="shared" BUILD_DOCS=true
302 arch: amd64
303 compiler: gcc
304 addons:
305@@ -45,14 +56,22 @@ jobs:
306 packages:
307 - *required_packages
308 - *doc_packages
309+ - env: DEF_LIB="shared" ABI_CHECKS=true
310+ arch: amd64
311+ compiler: gcc
312+ addons:
313+ apt:
314+ packages:
315+ - *required_packages
316+ - *libabigail_build_packages
317 # x86_64 clang jobs
318 - env: DEF_LIB="static"
319 arch: amd64
320 compiler: clang
321- - env: DEF_LIB="shared" RUN_TESTS=1
322+ - env: DEF_LIB="shared" RUN_TESTS=true
323 arch: amd64
324 compiler: clang
325- - env: DEF_LIB="shared" BUILD_DOCS=1
326+ - env: DEF_LIB="shared" BUILD_DOCS=true
327 arch: amd64
328 compiler: clang
329 addons:
330@@ -61,7 +80,7 @@ jobs:
331 - *required_packages
332 - *doc_packages
333 # x86_64 cross-compiling 32-bits jobs
334- - env: DEF_LIB="static" BUILD_32BIT=1
335+ - env: DEF_LIB="static" BUILD_32BIT=true
336 arch: amd64
337 compiler: gcc
338 addons:
339@@ -69,14 +88,14 @@ jobs:
340 packages:
341 - *build_32b_packages
342 # x86_64 cross-compiling aarch64 jobs
343- - env: DEF_LIB="static" AARCH64=1
344+ - env: DEF_LIB="static" AARCH64=true
345 arch: amd64
346 compiler: gcc
347 addons:
348 apt:
349 packages:
350 - *aarch64_packages
351- - env: DEF_LIB="shared" AARCH64=1
352+ - env: DEF_LIB="shared" AARCH64=true
353 arch: amd64
354 compiler: gcc
355 addons:
356@@ -87,16 +106,16 @@ jobs:
357 - env: DEF_LIB="static"
358 arch: arm64
359 compiler: gcc
360- - env: DEF_LIB="shared" RUN_TESTS=1
361+ - env: DEF_LIB="shared" RUN_TESTS=true
362 arch: arm64
363 compiler: gcc
364- - env: DEF_LIB="shared" RUN_TESTS=1
365+ - env: DEF_LIB="shared" RUN_TESTS=true
366 dist: focal
367 arch: arm64-graviton2
368 virt: vm
369 group: edge
370 compiler: gcc
371- - env: DEF_LIB="shared" BUILD_DOCS=1
372+ - env: DEF_LIB="shared" BUILD_DOCS=true
373 arch: arm64
374 compiler: gcc
375 addons:
376@@ -104,14 +123,22 @@ jobs:
377 packages:
378 - *required_packages
379 - *doc_packages
380+ - env: DEF_LIB="shared" ABI_CHECKS=true
381+ arch: arm64
382+ compiler: gcc
383+ addons:
384+ apt:
385+ packages:
386+ - *required_packages
387+ - *libabigail_build_packages
388 # aarch64 clang jobs
389 - env: DEF_LIB="static"
390 arch: arm64
391 compiler: clang
392- - env: DEF_LIB="shared" RUN_TESTS=1
393+ - env: DEF_LIB="shared" RUN_TESTS=true
394 arch: arm64
395 compiler: clang
396- - env: DEF_LIB="shared" RUN_TESTS=1
397+ - env: DEF_LIB="shared" RUN_TESTS=true
398 dist: focal
399 arch: arm64-graviton2
400 virt: vm
401diff --git a/MAINTAINERS b/MAINTAINERS
402index eafe9f8..dcde2ab 100644
403--- a/MAINTAINERS
404+++ b/MAINTAINERS
405@@ -103,12 +103,14 @@ F: buildtools/gen-pmdinfo-cfile.sh
406 F: buildtools/list-dir-globs.py
407 F: buildtools/pkg-config/
408 F: buildtools/symlink-drivers-solibs.sh
409+F: buildtools/symlink-drivers-solibs.py
410 F: devtools/test-meson-builds.sh
411
412 Public CI
413 M: Aaron Conole <aconole@redhat.com>
414 M: Michael Santana <maicolgabriel@hotmail.com>
415 F: .travis.yml
416+F: .github/workflows/build.yml
417 F: .ci/
418
419 ABI Policy & Versioning
420diff --git a/VERSION b/VERSION
421index 2dbbe00..bc6fac4 100644
422--- a/VERSION
423+++ b/VERSION
424@@ -1 +1 @@
425-20.11.1
426+20.11.3
427diff --git a/app/meson.build b/app/meson.build
428index 87fc195..50a53db 100644
429--- a/app/meson.build
430+++ b/app/meson.build
431@@ -21,9 +21,6 @@ apps = [
432 'test-regex',
433 'test-sad']
434
435-# for BSD only
436-lib_execinfo = cc.find_library('execinfo', required: false)
437-
438 default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API']
439 default_ldflags = []
440 if get_option('default_library') == 'static' and not is_windows
441@@ -53,7 +50,6 @@ foreach app:apps
442 dep_objs += get_variable(get_option('default_library')
443 + '_rte_' + d)
444 endforeach
445- dep_objs += lib_execinfo
446
447 link_libs = []
448 if get_option('default_library') == 'static'
449diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
450index 59b37ed..36589f3 100644
451--- a/app/test-bbdev/test_bbdev_perf.c
452+++ b/app/test-bbdev/test_bbdev_perf.c
453@@ -372,14 +372,14 @@ check_dev_cap(const struct rte_bbdev_info *dev_info)
454 if (nb_harq_inputs > cap->num_buffers_hard_out) {
455 printf(
456 "Too many HARQ inputs defined: %u, max: %u\n",
457- nb_hard_outputs,
458+ nb_harq_inputs,
459 cap->num_buffers_hard_out);
460 return TEST_FAILED;
461 }
462 if (nb_harq_outputs > cap->num_buffers_hard_out) {
463 printf(
464 "Too many HARQ outputs defined: %u, max: %u\n",
465- nb_hard_outputs,
466+ nb_harq_outputs,
467 cap->num_buffers_hard_out);
468 return TEST_FAILED;
469 }
470@@ -957,6 +957,9 @@ init_op_data_objs(struct rte_bbdev_op_data *bufs,
471 if ((op_type == DATA_INPUT) && large_input) {
472 /* Allocate a fake overused mbuf */
473 data = rte_malloc(NULL, seg->length, 0);
474+ TEST_ASSERT_NOT_NULL(data,
475+ "rte malloc failed with %u bytes",
476+ seg->length);
477 memcpy(data, seg->addr, seg->length);
478 m_head->buf_addr = data;
479 m_head->buf_iova = rte_malloc_virt2iova(data);
480diff --git a/app/test-compress-perf/comp_perf_options_parse.c b/app/test-compress-perf/comp_perf_options_parse.c
481index 04a8d2f..019eddb 100644
482--- a/app/test-compress-perf/comp_perf_options_parse.c
483+++ b/app/test-compress-perf/comp_perf_options_parse.c
484@@ -620,7 +620,7 @@ comp_perf_options_parse(struct comp_test_data *test_data, int argc, char **argv)
485 switch (opt) {
486 case 'h':
487 usage(argv[0]);
488- rte_exit(EXIT_SUCCESS, "Displayed help\n");
489+ exit(EXIT_SUCCESS);
490 break;
491 /* long options */
492 case 0:
493diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c
494index 0466f7b..e84f56c 100644
495--- a/app/test-crypto-perf/cperf_options_parsing.c
496+++ b/app/test-crypto-perf/cperf_options_parsing.c
497@@ -506,6 +506,12 @@ parse_test_name(struct cperf_options *opts,
498 {
499 char *test_name = (char *) rte_zmalloc(NULL,
500 sizeof(char) * (strlen(arg) + 3), 0);
501+ if (test_name == NULL) {
502+ RTE_LOG(ERR, USER1, "Failed to rte zmalloc with size: %zu\n",
503+ strlen(arg) + 3);
504+ return -1;
505+ }
506+
507 snprintf(test_name, strlen(arg) + 3, "[%s]", arg);
508 opts->test_name = test_name;
509
510@@ -983,7 +989,7 @@ cperf_options_parse(struct cperf_options *options, int argc, char **argv)
511 switch (opt) {
512 case 'h':
513 usage(argv[0]);
514- rte_exit(EXIT_SUCCESS, "Displayed help\n");
515+ exit(EXIT_SUCCESS);
516 break;
517 /* long options */
518 case 0:
519diff --git a/app/test-crypto-perf/cperf_test_common.c b/app/test-crypto-perf/cperf_test_common.c
520index 058e0ba..12925c7 100644
521--- a/app/test-crypto-perf/cperf_test_common.c
522+++ b/app/test-crypto-perf/cperf_test_common.c
523@@ -194,7 +194,7 @@ cperf_alloc_common_memory(const struct cperf_options *options,
524 (mbuf_size * segments_nb);
525 params.dst_buf_offset = *dst_buf_offset;
526 /* Destination buffer will be one segment only */
527- obj_size += max_size;
528+ obj_size += max_size + sizeof(struct rte_mbuf);
529 }
530
531 *pool = rte_mempool_create_empty(pool_name,
532diff --git a/app/test-eventdev/evt_options.c b/app/test-eventdev/evt_options.c
533index 0d04ea9..8c9d3fc 100644
534--- a/app/test-eventdev/evt_options.c
535+++ b/app/test-eventdev/evt_options.c
536@@ -218,7 +218,7 @@ evt_parse_plcores(struct evt_options *opt, const char *corelist)
537 {
538 int ret;
539
540- ret = parse_lcores_list(opt->plcores, corelist);
541+ ret = parse_lcores_list(opt->plcores, RTE_MAX_LCORE, corelist);
542 if (ret == -E2BIG)
543 evt_err("duplicate lcores in plcores");
544
545@@ -230,7 +230,7 @@ evt_parse_work_lcores(struct evt_options *opt, const char *corelist)
546 {
547 int ret;
548
549- ret = parse_lcores_list(opt->wlcores, corelist);
550+ ret = parse_lcores_list(opt->wlcores, RTE_MAX_LCORE, corelist);
551 if (ret == -E2BIG)
552 evt_err("duplicate lcores in wlcores");
553
554diff --git a/app/test-eventdev/parser.c b/app/test-eventdev/parser.c
555index 24f1855..8818c37 100644
556--- a/app/test-eventdev/parser.c
557+++ b/app/test-eventdev/parser.c
558@@ -310,7 +310,7 @@ parse_hex_string(char *src, uint8_t *dst, uint32_t *size)
559 }
560
561 int
562-parse_lcores_list(bool lcores[], const char *corelist)
563+parse_lcores_list(bool lcores[], int lcores_num, const char *corelist)
564 {
565 int i, idx = 0;
566 int min, max;
567@@ -332,6 +332,8 @@ parse_lcores_list(bool lcores[], const char *corelist)
568 if (*corelist == '\0')
569 return -1;
570 idx = strtoul(corelist, &end, 10);
571+ if (idx < 0 || idx > lcores_num)
572+ return -1;
573
574 if (end == NULL)
575 return -1;
576diff --git a/app/test-eventdev/parser.h b/app/test-eventdev/parser.h
577index 673ff22..696b40a 100644
578--- a/app/test-eventdev/parser.h
579+++ b/app/test-eventdev/parser.h
580@@ -46,5 +46,5 @@ int parse_hex_string(char *src, uint8_t *dst, uint32_t *size);
581
582 int parse_tokenize_string(char *string, char *tokens[], uint32_t *n_tokens);
583
584-int parse_lcores_list(bool lcores[], const char *corelist);
585+int parse_lcores_list(bool lcores[], int lcores_num, const char *corelist);
586 #endif
587diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c
588index 955edb7..2fe15ed 100644
589--- a/app/test-eventdev/test_perf_common.c
590+++ b/app/test-eventdev/test_perf_common.c
591@@ -2,6 +2,8 @@
592 * Copyright(c) 2017 Cavium, Inc
593 */
594
595+#include <math.h>
596+
597 #include "test_perf_common.h"
598
599 int
600@@ -95,11 +97,13 @@ perf_event_timer_producer(void *arg)
601 uint64_t timeout_ticks = opt->expiry_nsec / opt->timer_tick_nsec;
602
603 memset(&tim, 0, sizeof(struct rte_event_timer));
604- timeout_ticks = opt->optm_timer_tick_nsec ?
605- (timeout_ticks * opt->timer_tick_nsec)
606- / opt->optm_timer_tick_nsec : timeout_ticks;
607+ timeout_ticks =
608+ opt->optm_timer_tick_nsec
609+ ? ceil((double)(timeout_ticks * opt->timer_tick_nsec) /
610+ opt->optm_timer_tick_nsec)
611+ : timeout_ticks;
612 timeout_ticks += timeout_ticks ? 0 : 1;
613- tim.ev.event_type = RTE_EVENT_TYPE_TIMER;
614+ tim.ev.event_type = RTE_EVENT_TYPE_TIMER;
615 tim.ev.op = RTE_EVENT_OP_NEW;
616 tim.ev.sched_type = t->opt->sched_type_list[0];
617 tim.ev.queue_id = p->queue_id;
618@@ -159,11 +163,13 @@ perf_event_timer_producer_burst(void *arg)
619 uint64_t timeout_ticks = opt->expiry_nsec / opt->timer_tick_nsec;
620
621 memset(&tim, 0, sizeof(struct rte_event_timer));
622- timeout_ticks = opt->optm_timer_tick_nsec ?
623- (timeout_ticks * opt->timer_tick_nsec)
624- / opt->optm_timer_tick_nsec : timeout_ticks;
625+ timeout_ticks =
626+ opt->optm_timer_tick_nsec
627+ ? ceil((double)(timeout_ticks * opt->timer_tick_nsec) /
628+ opt->optm_timer_tick_nsec)
629+ : timeout_ticks;
630 timeout_ticks += timeout_ticks ? 0 : 1;
631- tim.ev.event_type = RTE_EVENT_TYPE_TIMER;
632+ tim.ev.event_type = RTE_EVENT_TYPE_TIMER;
633 tim.ev.op = RTE_EVENT_OP_NEW;
634 tim.ev.sched_type = t->opt->sched_type_list[0];
635 tim.ev.queue_id = p->queue_id;
636diff --git a/app/test-flow-perf/main.c b/app/test-flow-perf/main.c
637index e2fc5b7..f525bc9 100644
638--- a/app/test-flow-perf/main.c
639+++ b/app/test-flow-perf/main.c
640@@ -606,7 +606,7 @@ args_parse(int argc, char **argv)
641 case 0:
642 if (strcmp(lgopts[opt_idx].name, "help") == 0) {
643 usage(argv[0]);
644- rte_exit(EXIT_SUCCESS, "Displayed help\n");
645+ exit(EXIT_SUCCESS);
646 }
647
648 if (strcmp(lgopts[opt_idx].name, "group") == 0) {
649@@ -614,7 +614,7 @@ args_parse(int argc, char **argv)
650 if (n >= 0)
651 flow_group = n;
652 else
653- rte_exit(EXIT_SUCCESS,
654+ rte_exit(EXIT_FAILURE,
655 "flow group should be >= 0\n");
656 printf("group %d / ", flow_group);
657 }
658@@ -634,7 +634,7 @@ args_parse(int argc, char **argv)
659 if (n > 0)
660 hairpin_queues_num = n;
661 else
662- rte_exit(EXIT_SUCCESS,
663+ rte_exit(EXIT_FAILURE,
664 "Hairpin queues should be > 0\n");
665
666 flow_actions[actions_idx++] =
667@@ -647,7 +647,7 @@ args_parse(int argc, char **argv)
668 if (n > 0)
669 hairpin_queues_num = n;
670 else
671- rte_exit(EXIT_SUCCESS,
672+ rte_exit(EXIT_FAILURE,
673 "Hairpin queues should be > 0\n");
674
675 flow_actions[actions_idx++] =
676@@ -671,11 +671,9 @@ args_parse(int argc, char **argv)
677 break;
678 }
679 /* Reached last item with no match */
680- if (i == (RTE_DIM(flow_options) - 1)) {
681- fprintf(stderr, "Invalid encap item: %s\n", token);
682- usage(argv[0]);
683- rte_exit(EXIT_SUCCESS, "Invalid encap item\n");
684- }
685+ if (i == (RTE_DIM(flow_options) - 1))
686+ rte_exit(EXIT_FAILURE,
687+ "Invalid encap item: %s\n", token);
688 }
689 token = strtok(NULL, ",");
690 }
691@@ -693,15 +691,13 @@ args_parse(int argc, char **argv)
692 for (i = 0; i < RTE_DIM(flow_options); i++) {
693 if (strcmp(flow_options[i].str, token) == 0) {
694 printf("%s,", token);
695- encap_data |= flow_options[i].mask;
696+ decap_data |= flow_options[i].mask;
697 break;
698 }
699 /* Reached last item with no match */
700- if (i == (RTE_DIM(flow_options) - 1)) {
701- fprintf(stderr, "Invalid decap item: %s\n", token);
702- usage(argv[0]);
703- rte_exit(EXIT_SUCCESS, "Invalid decap item\n");
704- }
705+ if (i == (RTE_DIM(flow_options) - 1))
706+ rte_exit(EXIT_FAILURE,
707+ "Invalid decap item %s\n", token);
708 }
709 token = strtok(NULL, ",");
710 }
711@@ -714,9 +710,9 @@ args_parse(int argc, char **argv)
712 if (n >= DEFAULT_RULES_BATCH)
713 rules_batch = n;
714 else {
715- printf("\n\nrules_batch should be >= %d\n",
716+ rte_exit(EXIT_FAILURE,
717+ "rules_batch should be >= %d\n",
718 DEFAULT_RULES_BATCH);
719- rte_exit(EXIT_SUCCESS, " ");
720 }
721 }
722 if (strcmp(lgopts[opt_idx].name,
723@@ -725,7 +721,8 @@ args_parse(int argc, char **argv)
724 if (n >= (int) rules_batch)
725 rules_count = n;
726 else {
727- printf("\n\nrules_count should be >= %d\n",
728+ rte_exit(EXIT_FAILURE,
729+ "rules_count should be >= %d\n",
730 rules_batch);
731 }
732 }
733@@ -752,9 +749,9 @@ args_parse(int argc, char **argv)
734 }
735 break;
736 default:
737- fprintf(stderr, "Invalid option: %s\n", argv[optind]);
738 usage(argv[0]);
739- rte_exit(EXIT_SUCCESS, "Invalid option\n");
740+ rte_exit(EXIT_FAILURE, "Invalid option: %s\n",
741+ argv[optind]);
742 break;
743 }
744 }
745@@ -853,7 +850,7 @@ destroy_flows(int port_id, struct rte_flow **flow_list)
746 memset(&error, 0x33, sizeof(error));
747 if (rte_flow_destroy(port_id, flow_list[i], &error)) {
748 print_flow_error(error);
749- rte_exit(EXIT_FAILURE, "Error in deleting flow");
750+ rte_exit(EXIT_FAILURE, "Error in deleting flow\n");
751 }
752
753 if (i && !((i + 1) % rules_batch)) {
754@@ -924,7 +921,7 @@ flows_handler(void)
755 flow_list = rte_zmalloc("flow_list",
756 (sizeof(struct rte_flow *) * rules_count) + 1, 0);
757 if (flow_list == NULL)
758- rte_exit(EXIT_FAILURE, "No Memory available!");
759+ rte_exit(EXIT_FAILURE, "No Memory available!\n");
760
761 for (port_id = 0; port_id < nr_ports; port_id++) {
762 /* If port outside portmask */
763@@ -947,7 +944,7 @@ flows_handler(void)
764
765 if (flow == NULL) {
766 print_flow_error(error);
767- rte_exit(EXIT_FAILURE, "error in creating flow");
768+ rte_exit(EXIT_FAILURE, "Error in creating flow\n");
769 }
770 flow_list[flow_index++] = flow;
771 }
772@@ -968,7 +965,7 @@ flows_handler(void)
773
774 if (!flow) {
775 print_flow_error(error);
776- rte_exit(EXIT_FAILURE, "error in creating flow");
777+ rte_exit(EXIT_FAILURE, "Error in creating flow\n");
778 }
779
780 flow_list[flow_index++] = flow;
781@@ -1087,7 +1084,7 @@ packet_per_second_stats(void)
782 old = rte_zmalloc("old",
783 sizeof(struct lcore_info) * MAX_LCORES, 0);
784 if (old == NULL)
785- rte_exit(EXIT_FAILURE, "No Memory available!");
786+ rte_exit(EXIT_FAILURE, "No Memory available!\n");
787
788 memcpy(old, lcore_infos,
789 sizeof(struct lcore_info) * MAX_LCORES);
790diff --git a/app/test-pmd/bpf_cmd.c b/app/test-pmd/bpf_cmd.c
791index 066619e..6980291 100644
792--- a/app/test-pmd/bpf_cmd.c
793+++ b/app/test-pmd/bpf_cmd.c
794@@ -20,7 +20,7 @@ static const struct rte_bpf_xsym bpf_xsym[] = {
795 .name = RTE_STR(stdout),
796 .type = RTE_BPF_XTYPE_VAR,
797 .var = {
798- .val = &stdout,
799+ .val = (void *)(uintptr_t)&stdout,
800 .desc = {
801 .type = RTE_BPF_ARG_PTR,
802 .size = sizeof(stdout),
803diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
804index 2b9dd3e..58ebff5 100644
805--- a/app/test-pmd/cmdline.c
806+++ b/app/test-pmd/cmdline.c
807@@ -1225,7 +1225,7 @@ cmdline_parse_token_string_t cmd_operate_port_all_all =
808 cmdline_parse_inst_t cmd_operate_port = {
809 .f = cmd_operate_port_parsed,
810 .data = NULL,
811- .help_str = "port start|stop|close all: Start/Stop/Close/Reset all ports",
812+ .help_str = "port start|stop|close|reset all: Start/Stop/Close/Reset all ports",
813 .tokens = {
814 (void *)&cmd_operate_port_all_cmd,
815 (void *)&cmd_operate_port_all_port,
816@@ -1272,7 +1272,7 @@ cmdline_parse_token_num_t cmd_operate_specific_port_id =
817 cmdline_parse_inst_t cmd_operate_specific_port = {
818 .f = cmd_operate_specific_port_parsed,
819 .data = NULL,
820- .help_str = "port start|stop|close <port_id>: Start/Stop/Close/Reset port_id",
821+ .help_str = "port start|stop|close|reset <port_id>: Start/Stop/Close/Reset port_id",
822 .tokens = {
823 (void *)&cmd_operate_specific_port_cmd,
824 (void *)&cmd_operate_specific_port_port,
825@@ -1521,6 +1521,9 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
826 }
827 }
828
829+ if (*speed != ETH_LINK_SPEED_AUTONEG)
830+ *speed |= ETH_LINK_SPEED_FIXED;
831+
832 return 0;
833 }
834
835@@ -1604,13 +1607,13 @@ cmd_config_speed_specific_parsed(void *parsed_result,
836 struct cmd_config_speed_specific *res = parsed_result;
837 uint32_t link_speed;
838
839- if (!all_ports_stopped()) {
840- printf("Please stop all ports first\n");
841+ if (port_id_is_invalid(res->id, ENABLED_WARN))
842 return;
843- }
844
845- if (port_id_is_invalid(res->id, ENABLED_WARN))
846+ if (!port_is_stopped(res->id)) {
847+ printf("Please stop port %d first\n", res->id);
848 return;
849+ }
850
851 if (parse_and_check_speed_duplex(res->value1, res->value2,
852 &link_speed) < 0)
853@@ -2805,6 +2808,10 @@ cmd_setup_rxtx_queue_parsed(
854 if (!numa_support || socket_id == NUMA_NO_CONFIG)
855 socket_id = port->socket_id;
856
857+ if (port->nb_tx_desc[res->qid] < tx_pkt_nb_segs) {
858+ printf("Failed to setup TX queue: not enough descriptors\n");
859+ return;
860+ }
861 ret = rte_eth_tx_queue_setup(res->portid,
862 res->qid,
863 port->nb_tx_desc[res->qid],
864@@ -4561,7 +4568,7 @@ cmd_config_queue_tx_offloads(struct rte_port *port)
865 int k;
866
867 /* Apply queue tx offloads configuration */
868- for (k = 0; k < port->dev_info.max_rx_queues; k++)
869+ for (k = 0; k < port->dev_info.max_tx_queues; k++)
870 port->tx_conf[k].offloads =
871 port->dev_conf.txmode.offloads;
872 }
873@@ -9096,7 +9103,7 @@ cmdline_parse_inst_t cmd_vf_rate_limit = {
874
875 /* *** CONFIGURE TUNNEL UDP PORT *** */
876 struct cmd_tunnel_udp_config {
877- cmdline_fixed_string_t cmd;
878+ cmdline_fixed_string_t rx_vxlan_port;
879 cmdline_fixed_string_t what;
880 uint16_t udp_port;
881 portid_t port_id;
882@@ -9112,9 +9119,7 @@ cmd_tunnel_udp_config_parsed(void *parsed_result,
883 int ret;
884
885 tunnel_udp.udp_port = res->udp_port;
886-
887- if (!strcmp(res->cmd, "rx_vxlan_port"))
888- tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN;
889+ tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN;
890
891 if (!strcmp(res->what, "add"))
892 ret = rte_eth_dev_udp_tunnel_port_add(res->port_id,
893@@ -9127,9 +9132,9 @@ cmd_tunnel_udp_config_parsed(void *parsed_result,
894 printf("udp tunneling add error: (%s)\n", strerror(-ret));
895 }
896
897-cmdline_parse_token_string_t cmd_tunnel_udp_config_cmd =
898+cmdline_parse_token_string_t cmd_tunnel_udp_config_rx_vxlan_port =
899 TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
900- cmd, "rx_vxlan_port");
901+ rx_vxlan_port, "rx_vxlan_port");
902 cmdline_parse_token_string_t cmd_tunnel_udp_config_what =
903 TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
904 what, "add#rm");
905@@ -9146,7 +9151,7 @@ cmdline_parse_inst_t cmd_tunnel_udp_config = {
906 .help_str = "rx_vxlan_port add|rm <udp_port> <port_id>: "
907 "Add/Remove a tunneling UDP port filter",
908 .tokens = {
909- (void *)&cmd_tunnel_udp_config_cmd,
910+ (void *)&cmd_tunnel_udp_config_rx_vxlan_port,
911 (void *)&cmd_tunnel_udp_config_what,
912 (void *)&cmd_tunnel_udp_config_udp_port,
913 (void *)&cmd_tunnel_udp_config_port_id,
914@@ -9552,7 +9557,7 @@ dump_socket_mem(FILE *f)
915 fprintf(f,
916 "Total : size(M) total: %.6lf alloc: %.6lf(%.3lf%%) free: %.6lf \tcount alloc: %-4u free: %u\n",
917 (double)total / (1024 * 1024), (double)alloc / (1024 * 1024),
918- (double)alloc * 100 / (double)total,
919+ total ? ((double)alloc * 100 / (double)total) : 0,
920 (double)free / (1024 * 1024),
921 n_alloc, n_free);
922 if (last_allocs)
923@@ -16444,17 +16449,17 @@ cmd_set_port_fec_mode_parsed(
924 {
925 struct cmd_set_port_fec_mode *res = parsed_result;
926 uint16_t port_id = res->port_id;
927- uint32_t mode;
928+ uint32_t fec_capa;
929 int ret;
930
931- ret = parse_fec_mode(res->fec_value, &mode);
932+ ret = parse_fec_mode(res->fec_value, &fec_capa);
933 if (ret < 0) {
934 printf("Unknown fec mode: %s for Port %d\n", res->fec_value,
935 port_id);
936 return;
937 }
938
939- ret = rte_eth_fec_set(port_id, mode);
940+ ret = rte_eth_fec_set(port_id, fec_capa);
941 if (ret == -ENOTSUP) {
942 printf("Function not implemented\n");
943 return;
944@@ -16615,7 +16620,8 @@ cmd_show_rx_tx_desc_status_parsed(void *parsed_result,
945 rc = rte_eth_rx_descriptor_status(res->cmd_pid, res->cmd_qid,
946 res->cmd_did);
947 if (rc < 0) {
948- printf("Invalid queueid = %d\n", res->cmd_qid);
949+ printf("Invalid input: queue id = %d, desc id = %d\n",
950+ res->cmd_qid, res->cmd_did);
951 return;
952 }
953 if (rc == RTE_ETH_RX_DESC_AVAIL)
954@@ -16628,7 +16634,8 @@ cmd_show_rx_tx_desc_status_parsed(void *parsed_result,
955 rc = rte_eth_tx_descriptor_status(res->cmd_pid, res->cmd_qid,
956 res->cmd_did);
957 if (rc < 0) {
958- printf("Invalid queueid = %d\n", res->cmd_qid);
959+ printf("Invalid input: queue id = %d, desc id = %d\n",
960+ res->cmd_qid, res->cmd_did);
961 return;
962 }
963 if (rc == RTE_ETH_TX_DESC_FULL)
964diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
965index de80924..c67ac71 100644
966--- a/app/test-pmd/cmdline_flow.c
967+++ b/app/test-pmd/cmdline_flow.c
968@@ -5203,6 +5203,8 @@ parse_vc_action_nvgre_encap(struct context *ctx, const struct token *token,
969 .src_addr = nvgre_encap_conf.ipv4_src,
970 .dst_addr = nvgre_encap_conf.ipv4_dst,
971 },
972+ .item_nvgre.c_k_s_rsvd0_ver = RTE_BE16(0x2000),
973+ .item_nvgre.protocol = RTE_BE16(RTE_ETHER_TYPE_TEB),
974 .item_nvgre.flow_id = 0,
975 };
976 memcpy(action_nvgre_encap_data->item_eth.dst.addr_bytes,
977diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
978index dab8afe..4847c36 100644
979--- a/app/test-pmd/config.c
980+++ b/app/test-pmd/config.c
981@@ -2115,6 +2115,9 @@ port_flow_create(portid_t port_id,
982 memset(&error, 0x22, sizeof(error));
983 flow = rte_flow_create(port_id, attr, pattern, actions, &error);
984 if (!flow) {
985+ if (tunnel_ops->enabled)
986+ port_flow_tunnel_offload_cmd_release(port_id,
987+ tunnel_ops, pft);
988 free(pf);
989 return port_flow_complain(&error);
990 }
991@@ -2963,7 +2966,7 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
992
993 void
994 port_rss_hash_key_update(portid_t port_id, char rss_type[], uint8_t *hash_key,
995- uint hash_key_len)
996+ uint8_t hash_key_len)
997 {
998 struct rte_eth_rss_conf rss_conf;
999 int diag;
1000@@ -3153,6 +3156,21 @@ rss_fwd_config_setup(void)
1001 }
1002 }
1003
1004+static uint16_t
1005+get_fwd_port_total_tc_num(void)
1006+{
1007+ struct rte_eth_dcb_info dcb_info;
1008+ uint16_t total_tc_num = 0;
1009+ unsigned int i;
1010+
1011+ for (i = 0; i < nb_fwd_ports; i++) {
1012+ (void)rte_eth_dev_get_dcb_info(fwd_ports_ids[i], &dcb_info);
1013+ total_tc_num += dcb_info.nb_tcs;
1014+ }
1015+
1016+ return total_tc_num;
1017+}
1018+
1019 /**
1020 * For the DCB forwarding test, each core is assigned on each traffic class.
1021 *
1022@@ -3172,12 +3190,42 @@ dcb_fwd_config_setup(void)
1023 lcoreid_t lc_id;
1024 uint16_t nb_rx_queue, nb_tx_queue;
1025 uint16_t i, j, k, sm_id = 0;
1026+ uint16_t total_tc_num;
1027+ struct rte_port *port;
1028 uint8_t tc = 0;
1029+ portid_t pid;
1030+ int ret;
1031+
1032+ /*
1033+ * The fwd_config_setup() is called when the port is RTE_PORT_STARTED
1034+ * or RTE_PORT_STOPPED.
1035+ *
1036+ * Re-configure ports to get updated mapping between tc and queue in
1037+ * case the queue number of the port is changed. Skip for started ports
1038+ * since modifying queue number and calling dev_configure need to stop
1039+ * ports first.
1040+ */
1041+ for (pid = 0; pid < nb_fwd_ports; pid++) {
1042+ if (port_is_started(pid) == 1)
1043+ continue;
1044+
1045+ port = &ports[pid];
1046+ ret = rte_eth_dev_configure(pid, nb_rxq, nb_txq,
1047+ &port->dev_conf);
1048+ if (ret < 0) {
1049+ printf("Failed to re-configure port %d, ret = %d.\n",
1050+ pid, ret);
1051+ return;
1052+ }
1053+ }
1054
1055 cur_fwd_config.nb_fwd_lcores = (lcoreid_t) nb_fwd_lcores;
1056 cur_fwd_config.nb_fwd_ports = nb_fwd_ports;
1057 cur_fwd_config.nb_fwd_streams =
1058 (streamid_t) (nb_rxq * cur_fwd_config.nb_fwd_ports);
1059+ total_tc_num = get_fwd_port_total_tc_num();
1060+ if (cur_fwd_config.nb_fwd_lcores > total_tc_num)
1061+ cur_fwd_config.nb_fwd_lcores = total_tc_num;
1062
1063 /* reinitialize forwarding streams */
1064 init_fwd_streams();
1065@@ -3299,6 +3347,10 @@ icmp_echo_config_setup(void)
1066 void
1067 fwd_config_setup(void)
1068 {
1069+ struct rte_port *port;
1070+ portid_t pt_id;
1071+ unsigned int i;
1072+
1073 cur_fwd_config.fwd_eng = cur_fwd_eng;
1074 if (strcmp(cur_fwd_eng->fwd_mode_name, "icmpecho") == 0) {
1075 icmp_echo_config_setup();
1076@@ -3306,9 +3358,24 @@ fwd_config_setup(void)
1077 }
1078
1079 if ((nb_rxq > 1) && (nb_txq > 1)){
1080- if (dcb_config)
1081+ if (dcb_config) {
1082+ for (i = 0; i < nb_fwd_ports; i++) {
1083+ pt_id = fwd_ports_ids[i];
1084+ port = &ports[pt_id];
1085+ if (!port->dcb_flag) {
1086+ printf("In DCB mode, all forwarding ports must "
1087+ "be configured in this mode.\n");
1088+ return;
1089+ }
1090+ }
1091+ if (nb_fwd_lcores == 1) {
1092+ printf("In DCB mode,the nb forwarding cores "
1093+ "should be larger than 1.\n");
1094+ return;
1095+ }
1096+
1097 dcb_fwd_config_setup();
1098- else
1099+ } else
1100 rss_fwd_config_setup();
1101 }
1102 else
1103@@ -3693,13 +3760,14 @@ set_tx_pkt_split(const char *name)
1104 }
1105
1106 int
1107-parse_fec_mode(const char *name, uint32_t *mode)
1108+parse_fec_mode(const char *name, uint32_t *fec_capa)
1109 {
1110 uint8_t i;
1111
1112 for (i = 0; i < RTE_DIM(fec_mode_name); i++) {
1113 if (strcmp(fec_mode_name[i].name, name) == 0) {
1114- *mode = RTE_ETH_FEC_MODE_TO_CAPA(fec_mode_name[i].mode);
1115+ *fec_capa =
1116+ RTE_ETH_FEC_MODE_TO_CAPA(fec_mode_name[i].mode);
1117 return 0;
1118 }
1119 }
1120@@ -3842,13 +3910,15 @@ nb_segs_is_invalid(unsigned int nb_segs)
1121 RTE_ETH_FOREACH_DEV(port_id) {
1122 for (queue_id = 0; queue_id < nb_txq; queue_id++) {
1123 ret = get_tx_ring_size(port_id, queue_id, &ring_size);
1124-
1125- if (ret)
1126- return true;
1127-
1128+ if (ret) {
1129+ /* Port may not be initialized yet, can't say
1130+ * the port is invalid in this stage.
1131+ */
1132+ continue;
1133+ }
1134 if (ring_size < nb_segs) {
1135- printf("nb segments per TX packets=%u >= "
1136- "TX queue(%u) ring_size=%u - ignored\n",
1137+ printf("nb segments per TX packets=%u >= TX "
1138+ "queue(%u) ring_size=%u - txpkts ignored\n",
1139 nb_segs, queue_id, ring_size);
1140 return true;
1141 }
1142@@ -3864,12 +3934,26 @@ set_tx_pkt_segments(unsigned int *seg_lengths, unsigned int nb_segs)
1143 uint16_t tx_pkt_len;
1144 unsigned int i;
1145
1146- if (nb_segs_is_invalid(nb_segs))
1147+ /*
1148+ * For single segment settings failed check is ignored.
1149+ * It is a very basic capability to send the single segment
1150+ * packets, suppose it is always supported.
1151+ */
1152+ if (nb_segs > 1 && nb_segs_is_invalid(nb_segs)) {
1153+ printf("Tx segment size(%u) is not supported - txpkts ignored\n",
1154+ nb_segs);
1155+ return;
1156+ }
1157+
1158+ if (nb_segs > RTE_MAX_SEGS_PER_PKT) {
1159+ printf("Tx segment size(%u) is bigger than max number of segment(%u)\n",
1160+ nb_segs, RTE_MAX_SEGS_PER_PKT);
1161 return;
1162+ }
1163
1164 /*
1165 * Check that each segment length is greater or equal than
1166- * the mbuf data sise.
1167+ * the mbuf data size.
1168 * Check also that the total packet length is greater or equal than the
1169 * size of an empty UDP/IP packet (sizeof(struct rte_ether_hdr) +
1170 * 20 + 8).
1171@@ -5219,7 +5303,8 @@ show_macs(portid_t port_id)
1172
1173 dev = &rte_eth_devices[port_id];
1174
1175- rte_eth_dev_info_get(port_id, &dev_info);
1176+ if (eth_dev_info_get_print_err(port_id, &dev_info))
1177+ return;
1178
1179 for (i = 0; i < dev_info.max_mac_addrs; i++) {
1180 addr = &dev->data->mac_addrs[i];
1181diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
1182index d813d4f..b0a58e8 100644
1183--- a/app/test-pmd/csumonly.c
1184+++ b/app/test-pmd/csumonly.c
1185@@ -480,17 +480,18 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
1186
1187 if (info->ethertype == _htons(RTE_ETHER_TYPE_IPV4)) {
1188 ipv4_hdr = l3_hdr;
1189- ipv4_hdr->hdr_checksum = 0;
1190
1191 ol_flags |= PKT_TX_IPV4;
1192 if (info->l4_proto == IPPROTO_TCP && tso_segsz) {
1193 ol_flags |= PKT_TX_IP_CKSUM;
1194 } else {
1195- if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM)
1196+ if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM) {
1197 ol_flags |= PKT_TX_IP_CKSUM;
1198- else
1199+ } else {
1200+ ipv4_hdr->hdr_checksum = 0;
1201 ipv4_hdr->hdr_checksum =
1202 rte_ipv4_cksum(ipv4_hdr);
1203+ }
1204 }
1205 } else if (info->ethertype == _htons(RTE_ETHER_TYPE_IPV6))
1206 ol_flags |= PKT_TX_IPV6;
1207@@ -501,10 +502,10 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
1208 udp_hdr = (struct rte_udp_hdr *)((char *)l3_hdr + info->l3_len);
1209 /* do not recalculate udp cksum if it was 0 */
1210 if (udp_hdr->dgram_cksum != 0) {
1211- udp_hdr->dgram_cksum = 0;
1212- if (tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM)
1213+ if (tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM) {
1214 ol_flags |= PKT_TX_UDP_CKSUM;
1215- else {
1216+ } else {
1217+ udp_hdr->dgram_cksum = 0;
1218 udp_hdr->dgram_cksum =
1219 get_udptcp_checksum(l3_hdr, udp_hdr,
1220 info->ethertype);
1221@@ -514,12 +515,12 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
1222 ol_flags |= PKT_TX_UDP_SEG;
1223 } else if (info->l4_proto == IPPROTO_TCP) {
1224 tcp_hdr = (struct rte_tcp_hdr *)((char *)l3_hdr + info->l3_len);
1225- tcp_hdr->cksum = 0;
1226 if (tso_segsz)
1227 ol_flags |= PKT_TX_TCP_SEG;
1228- else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM)
1229+ else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM) {
1230 ol_flags |= PKT_TX_TCP_CKSUM;
1231- else {
1232+ } else {
1233+ tcp_hdr->cksum = 0;
1234 tcp_hdr->cksum =
1235 get_udptcp_checksum(l3_hdr, tcp_hdr,
1236 info->ethertype);
1237@@ -529,13 +530,13 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
1238 } else if (info->l4_proto == IPPROTO_SCTP) {
1239 sctp_hdr = (struct rte_sctp_hdr *)
1240 ((char *)l3_hdr + info->l3_len);
1241- sctp_hdr->cksum = 0;
1242 /* sctp payload must be a multiple of 4 to be
1243 * offloaded */
1244 if ((tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM) &&
1245 ((ipv4_hdr->total_length & 0x3) == 0)) {
1246 ol_flags |= PKT_TX_SCTP_CKSUM;
1247 } else {
1248+ sctp_hdr->cksum = 0;
1249 /* XXX implement CRC32c, example available in
1250 * RFC3309 */
1251 }
1252diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
1253index df5eb10..bf6df7e 100644
1254--- a/app/test-pmd/parameters.c
1255+++ b/app/test-pmd/parameters.c
1256@@ -49,29 +49,7 @@
1257 static void
1258 usage(char* progname)
1259 {
1260- printf("usage: %s [EAL options] -- "
1261-#ifdef RTE_LIB_CMDLINE
1262- "[--interactive|-i] "
1263- "[--cmdline-file=FILENAME] "
1264-#endif
1265- "[--help|-h] | [--auto-start|-a] | ["
1266- "--tx-first | --stats-period=PERIOD | "
1267- "--coremask=COREMASK --portmask=PORTMASK --numa "
1268- "--portlist=PORTLIST "
1269- "--mbuf-size= | --total-num-mbufs= | "
1270- "--nb-cores= | --nb-ports= | "
1271-#ifdef RTE_LIB_CMDLINE
1272- "--eth-peers-configfile= | "
1273- "--eth-peer=X,M:M:M:M:M:M | "
1274- "--tx-ip=SRC,DST | --tx-udp=PORT | "
1275-#endif
1276- "--pkt-filter-mode= |"
1277- "--rss-ip | --rss-udp | --rss-level-inner | --rss-level-outer |"
1278- "--rxpt= | --rxht= | --rxwt= |"
1279- " --rxfreet= | --txpt= | --txht= | --txwt= | --txfreet= | "
1280- "--txrst= | --tx-offloads= | | --rx-offloads= | "
1281- "--vxlan-gpe-port= | --geneve-parsed-port= | "
1282- "--record-core-cycles | --record-burst-stats]\n",
1283+ printf("\nUsage: %s [EAL options] -- [testpmd options]\n\n",
1284 progname);
1285 #ifdef RTE_LIB_CMDLINE
1286 printf(" --interactive: run in interactive mode.\n");
1287@@ -97,6 +75,7 @@ usage(char* progname)
1288 printf(" --portlist=PORTLIST: list of forwarding ports\n");
1289 printf(" --numa: enable NUMA-aware allocation of RX/TX rings and of "
1290 "RX memory buffers (mbufs).\n");
1291+ printf(" --no-numa: disable NUMA-aware allocation.\n");
1292 printf(" --port-numa-config=(port,socket)[,(port,socket)]: "
1293 "specify the socket on which the memory pool "
1294 "used by the port will be allocated.\n");
1295@@ -136,6 +115,7 @@ usage(char* progname)
1296 "monitoring on forwarding lcore id N.\n");
1297 #endif
1298 printf(" --disable-crc-strip: disable CRC stripping by hardware.\n");
1299+ printf(" --enable-scatter: enable scattered Rx.\n");
1300 printf(" --enable-lro: enable large receive offload.\n");
1301 printf(" --enable-rx-cksum: enable rx hardware checksum offload.\n");
1302 printf(" --enable-rx-timestamp: enable rx hardware timestamp offload.\n");
1303@@ -183,6 +163,8 @@ usage(char* progname)
1304 printf(" --txpkts=X[,Y]*: set TX segment sizes"
1305 " or total packet length.\n");
1306 printf(" --txonly-multi-flow: generate multiple flows in txonly mode\n");
1307+ printf(" --tx-ip=src,dst: IP addresses in Tx-only mode\n");
1308+ printf(" --tx-udp=src[,dst]: UDP ports in Tx-only mode\n");
1309 printf(" --disable-link-check: disable check on link status when "
1310 "starting/stopping ports.\n");
1311 printf(" --disable-device-start: do not automatically start port\n");
1312@@ -213,14 +195,14 @@ usage(char* progname)
1313 printf(" --noisy-lkup-memory=N: allocate N MB of VNF memory\n");
1314 printf(" --noisy-lkup-num-writes=N: do N random writes per packet\n");
1315 printf(" --noisy-lkup-num-reads=N: do N random reads per packet\n");
1316- printf(" --noisy-lkup-num-writes=N: do N random reads and writes per packet\n");
1317+ printf(" --noisy-lkup-num-reads-writes=N: do N random reads and writes per packet\n");
1318 printf(" --no-iova-contig: mempool memory can be IOVA non contiguous. "
1319 "valid only with --mp-alloc=anon\n");
1320 printf(" --rx-mq-mode=0xX: hexadecimal bitmask of RX mq mode can be "
1321 "enabled\n");
1322 printf(" --record-core-cycles: enable measurement of CPU cycles.\n");
1323 printf(" --record-burst-stats: enable display of RX and TX bursts.\n");
1324- printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n "
1325+ printf(" --hairpin-mode=0xXX: bitmask set the hairpin port mode.\n"
1326 " 0x10 - explicit Tx rule, 0x02 - hairpin ports paired\n"
1327 " 0x01 - hairpin ports loop, 0x00 - hairpin port self\n");
1328 }
1329@@ -510,7 +492,6 @@ launch_args_parse(int argc, char** argv)
1330 #endif
1331 { "tx-first", 0, 0, 0 },
1332 { "stats-period", 1, 0, 0 },
1333- { "ports", 1, 0, 0 },
1334 { "nb-cores", 1, 0, 0 },
1335 { "nb-ports", 1, 0, 0 },
1336 { "coremask", 1, 0, 0 },
1337@@ -518,7 +499,7 @@ launch_args_parse(int argc, char** argv)
1338 { "portlist", 1, 0, 0 },
1339 { "numa", 0, 0, 0 },
1340 { "no-numa", 0, 0, 0 },
1341- { "mp-anon", 0, 0, 0 },
1342+ { "mp-anon", 0, 0, 0 }, /* deprecated */
1343 { "port-numa-config", 1, 0, 0 },
1344 { "ring-numa-config", 1, 0, 0 },
1345 { "socket-num", 1, 0, 0 },
1346@@ -630,7 +611,7 @@ launch_args_parse(int argc, char** argv)
1347 case 0: /*long options */
1348 if (!strcmp(lgopts[opt_idx].name, "help")) {
1349 usage(argv[0]);
1350- rte_exit(EXIT_SUCCESS, "Displayed help\n");
1351+ exit(EXIT_SUCCESS);
1352 }
1353 #ifdef RTE_LIB_CMDLINE
1354 if (!strcmp(lgopts[opt_idx].name, "interactive")) {
1355@@ -1359,7 +1340,7 @@ launch_args_parse(int argc, char** argv)
1356 break;
1357 case 'h':
1358 usage(argv[0]);
1359- rte_exit(EXIT_SUCCESS, "Displayed help\n");
1360+ exit(EXIT_SUCCESS);
1361 break;
1362 default:
1363 usage(argv[0]);
1364diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
1365index 555852a..5288c04 100644
1366--- a/app/test-pmd/testpmd.c
1367+++ b/app/test-pmd/testpmd.c
1368@@ -245,9 +245,6 @@ uint16_t mb_mempool_cache = DEF_MBUF_CACHE; /**< Size of mbuf mempool cache. */
1369 /* current configuration is in DCB or not,0 means it is not in DCB mode */
1370 uint8_t dcb_config = 0;
1371
1372-/* Whether the dcb is in testing status */
1373-uint8_t dcb_test = 0;
1374-
1375 /*
1376 * Configurable number of RX/TX queues.
1377 */
1378@@ -1402,22 +1399,69 @@ check_nb_hairpinq(queueid_t hairpinq)
1379 }
1380
1381 static void
1382+init_config_port_offloads(portid_t pid, uint32_t socket_id)
1383+{
1384+ struct rte_port *port = &ports[pid];
1385+ uint16_t data_size;
1386+ int ret;
1387+ int i;
1388+
1389+ port->dev_conf.txmode = tx_mode;
1390+ port->dev_conf.rxmode = rx_mode;
1391+
1392+ ret = eth_dev_info_get_print_err(pid, &port->dev_info);
1393+ if (ret != 0)
1394+ rte_exit(EXIT_FAILURE, "rte_eth_dev_info_get() failed\n");
1395+
1396+ ret = update_jumbo_frame_offload(pid);
1397+ if (ret != 0)
1398+ printf("Updating jumbo frame offload failed for port %u\n",
1399+ pid);
1400+
1401+ if (!(port->dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE))
1402+ port->dev_conf.txmode.offloads &=
1403+ ~DEV_TX_OFFLOAD_MBUF_FAST_FREE;
1404+
1405+ /* Apply Rx offloads configuration */
1406+ for (i = 0; i < port->dev_info.max_rx_queues; i++)
1407+ port->rx_conf[i].offloads = port->dev_conf.rxmode.offloads;
1408+ /* Apply Tx offloads configuration */
1409+ for (i = 0; i < port->dev_info.max_tx_queues; i++)
1410+ port->tx_conf[i].offloads = port->dev_conf.txmode.offloads;
1411+
1412+ /* set flag to initialize port/queue */
1413+ port->need_reconfig = 1;
1414+ port->need_reconfig_queues = 1;
1415+ port->socket_id = socket_id;
1416+ port->tx_metadata = 0;
1417+
1418+ /*
1419+ * Check for maximum number of segments per MTU.
1420+ * Accordingly update the mbuf data size.
1421+ */
1422+ if (port->dev_info.rx_desc_lim.nb_mtu_seg_max != UINT16_MAX &&
1423+ port->dev_info.rx_desc_lim.nb_mtu_seg_max != 0) {
1424+ data_size = rx_mode.max_rx_pkt_len /
1425+ port->dev_info.rx_desc_lim.nb_mtu_seg_max;
1426+
1427+ if ((data_size + RTE_PKTMBUF_HEADROOM) > mbuf_data_size[0]) {
1428+ mbuf_data_size[0] = data_size + RTE_PKTMBUF_HEADROOM;
1429+ TESTPMD_LOG(WARNING,
1430+ "Configured mbuf size of the first segment %hu\n",
1431+ mbuf_data_size[0]);
1432+ }
1433+ }
1434+}
1435+
1436+static void
1437 init_config(void)
1438 {
1439 portid_t pid;
1440- struct rte_port *port;
1441 struct rte_mempool *mbp;
1442 unsigned int nb_mbuf_per_pool;
1443 lcoreid_t lc_id;
1444- uint8_t port_per_socket[RTE_MAX_NUMA_NODES];
1445 struct rte_gro_param gro_param;
1446 uint32_t gso_types;
1447- uint16_t data_size;
1448- bool warning = 0;
1449- int k;
1450- int ret;
1451-
1452- memset(port_per_socket,0,RTE_MAX_NUMA_NODES);
1453
1454 /* Configuration of logical cores. */
1455 fwd_lcores = rte_zmalloc("testpmd: fwd_lcores",
1456@@ -1439,30 +1483,12 @@ init_config(void)
1457 }
1458
1459 RTE_ETH_FOREACH_DEV(pid) {
1460- port = &ports[pid];
1461- /* Apply default TxRx configuration for all ports */
1462- port->dev_conf.txmode = tx_mode;
1463- port->dev_conf.rxmode = rx_mode;
1464-
1465- ret = eth_dev_info_get_print_err(pid, &port->dev_info);
1466- if (ret != 0)
1467- rte_exit(EXIT_FAILURE,
1468- "rte_eth_dev_info_get() failed\n");
1469-
1470- ret = update_jumbo_frame_offload(pid);
1471- if (ret != 0)
1472- printf("Updating jumbo frame offload failed for port %u\n",
1473- pid);
1474+ uint32_t socket_id;
1475
1476- if (!(port->dev_info.tx_offload_capa &
1477- DEV_TX_OFFLOAD_MBUF_FAST_FREE))
1478- port->dev_conf.txmode.offloads &=
1479- ~DEV_TX_OFFLOAD_MBUF_FAST_FREE;
1480 if (numa_support) {
1481- if (port_numa[pid] != NUMA_NO_CONFIG)
1482- port_per_socket[port_numa[pid]]++;
1483- else {
1484- uint32_t socket_id = rte_eth_dev_socket_id(pid);
1485+ socket_id = port_numa[pid];
1486+ if (port_numa[pid] == NUMA_NO_CONFIG) {
1487+ socket_id = rte_eth_dev_socket_id(pid);
1488
1489 /*
1490 * if socket_id is invalid,
1491@@ -1470,45 +1496,14 @@ init_config(void)
1492 */
1493 if (check_socket_id(socket_id) < 0)
1494 socket_id = socket_ids[0];
1495- port_per_socket[socket_id]++;
1496- }
1497- }
1498-
1499- /* Apply Rx offloads configuration */
1500- for (k = 0; k < port->dev_info.max_rx_queues; k++)
1501- port->rx_conf[k].offloads =
1502- port->dev_conf.rxmode.offloads;
1503- /* Apply Tx offloads configuration */
1504- for (k = 0; k < port->dev_info.max_tx_queues; k++)
1505- port->tx_conf[k].offloads =
1506- port->dev_conf.txmode.offloads;
1507-
1508- /* set flag to initialize port/queue */
1509- port->need_reconfig = 1;
1510- port->need_reconfig_queues = 1;
1511- port->tx_metadata = 0;
1512-
1513- /* Check for maximum number of segments per MTU. Accordingly
1514- * update the mbuf data size.
1515- */
1516- if (port->dev_info.rx_desc_lim.nb_mtu_seg_max != UINT16_MAX &&
1517- port->dev_info.rx_desc_lim.nb_mtu_seg_max != 0) {
1518- data_size = rx_mode.max_rx_pkt_len /
1519- port->dev_info.rx_desc_lim.nb_mtu_seg_max;
1520-
1521- if ((data_size + RTE_PKTMBUF_HEADROOM) >
1522- mbuf_data_size[0]) {
1523- mbuf_data_size[0] = data_size +
1524- RTE_PKTMBUF_HEADROOM;
1525- warning = 1;
1526 }
1527+ } else {
1528+ socket_id = (socket_num == UMA_NO_CONFIG) ?
1529+ 0 : socket_num;
1530 }
1531+ /* Apply default TxRx configuration for all ports */
1532+ init_config_port_offloads(pid, socket_id);
1533 }
1534-
1535- if (warning)
1536- TESTPMD_LOG(WARNING,
1537- "Configured mbuf size of the first segment %hu\n",
1538- mbuf_data_size[0]);
1539 /*
1540 * Create pools of mbuf.
1541 * If NUMA support is disabled, create a single pool of mbuf in
1542@@ -1595,21 +1590,8 @@ init_config(void)
1543 void
1544 reconfig(portid_t new_port_id, unsigned socket_id)
1545 {
1546- struct rte_port *port;
1547- int ret;
1548-
1549 /* Reconfiguration of Ethernet ports. */
1550- port = &ports[new_port_id];
1551-
1552- ret = eth_dev_info_get_print_err(new_port_id, &port->dev_info);
1553- if (ret != 0)
1554- return;
1555-
1556- /* set flag to initialize port/queue */
1557- port->need_reconfig = 1;
1558- port->need_reconfig_queues = 1;
1559- port->socket_id = socket_id;
1560-
1561+ init_config_port_offloads(new_port_id, socket_id);
1562 init_port_config();
1563 }
1564
1565@@ -2123,9 +2105,7 @@ start_packet_forwarding(int with_tx_first)
1566 {
1567 port_fwd_begin_t port_fwd_begin;
1568 port_fwd_end_t port_fwd_end;
1569- struct rte_port *port;
1570 unsigned int i;
1571- portid_t pt_id;
1572
1573 if (strcmp(cur_fwd_eng->fwd_mode_name, "rxonly") == 0 && !nb_rxq)
1574 rte_exit(EXIT_FAILURE, "rxq are 0, cannot use rxonly fwd mode\n");
1575@@ -2148,24 +2128,6 @@ start_packet_forwarding(int with_tx_first)
1576 printf("Packet forwarding already started\n");
1577 return;
1578 }
1579-
1580-
1581- if(dcb_test) {
1582- for (i = 0; i < nb_fwd_ports; i++) {
1583- pt_id = fwd_ports_ids[i];
1584- port = &ports[pt_id];
1585- if (!port->dcb_flag) {
1586- printf("In DCB mode, all forwarding ports must "
1587- "be configured in this mode.\n");
1588- return;
1589- }
1590- }
1591- if (nb_fwd_lcores == 1) {
1592- printf("In DCB mode,the nb forwarding cores "
1593- "should be larger than 1.\n");
1594- return;
1595- }
1596- }
1597 test_done = 0;
1598
1599 fwd_config_setup();
1600@@ -2452,14 +2414,11 @@ start_port(portid_t pid)
1601 int peer_pi;
1602 queueid_t qi;
1603 struct rte_port *port;
1604- struct rte_ether_addr mac_addr;
1605 struct rte_eth_hairpin_cap cap;
1606
1607 if (port_id_is_invalid(pid, ENABLED_WARN))
1608 return 0;
1609
1610- if(dcb_config)
1611- dcb_test = 1;
1612 RTE_ETH_FOREACH_DEV(pi) {
1613 if (pid != pi && pid != (portid_t)RTE_PORT_ALL)
1614 continue;
1615@@ -2623,11 +2582,14 @@ start_port(portid_t pid)
1616 RTE_PORT_HANDLING, RTE_PORT_STARTED) == 0)
1617 printf("Port %d can not be set into started\n", pi);
1618
1619- if (eth_macaddr_get_print_err(pi, &mac_addr) == 0)
1620+ if (eth_macaddr_get_print_err(pi, &port->eth_addr) == 0)
1621 printf("Port %d: %02X:%02X:%02X:%02X:%02X:%02X\n", pi,
1622- mac_addr.addr_bytes[0], mac_addr.addr_bytes[1],
1623- mac_addr.addr_bytes[2], mac_addr.addr_bytes[3],
1624- mac_addr.addr_bytes[4], mac_addr.addr_bytes[5]);
1625+ port->eth_addr.addr_bytes[0],
1626+ port->eth_addr.addr_bytes[1],
1627+ port->eth_addr.addr_bytes[2],
1628+ port->eth_addr.addr_bytes[3],
1629+ port->eth_addr.addr_bytes[4],
1630+ port->eth_addr.addr_bytes[5]);
1631
1632 /* at least one port started, need checking link status */
1633 need_check_link_status = 1;
1634@@ -2697,11 +2659,6 @@ stop_port(portid_t pid)
1635 portid_t peer_pl[RTE_MAX_ETHPORTS];
1636 int peer_pi;
1637
1638- if (dcb_test) {
1639- dcb_test = 0;
1640- dcb_config = 0;
1641- }
1642-
1643 if (port_id_is_invalid(pid, ENABLED_WARN))
1644 return;
1645
1646@@ -3604,8 +3561,6 @@ init_port_dcb_config(portid_t pid,
1647 rte_port = &ports[pid];
1648
1649 memset(&port_conf, 0, sizeof(struct rte_eth_conf));
1650- /* Enter DCB configuration status */
1651- dcb_config = 1;
1652
1653 port_conf.rxmode = rte_port->dev_conf.rxmode;
1654 port_conf.txmode = rte_port->dev_conf.txmode;
1655@@ -3673,6 +3628,9 @@ init_port_dcb_config(portid_t pid,
1656
1657 rte_port->dcb_flag = 1;
1658
1659+ /* Enter DCB configuration status */
1660+ dcb_config = 1;
1661+
1662 return 0;
1663 }
1664
1665diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
1666index 2f8f5a9..927ca58 100644
1667--- a/app/test-pmd/testpmd.h
1668+++ b/app/test-pmd/testpmd.h
1669@@ -423,7 +423,6 @@ extern uint64_t noisy_lkup_num_reads;
1670 extern uint64_t noisy_lkup_num_reads_writes;
1671
1672 extern uint8_t dcb_config;
1673-extern uint8_t dcb_test;
1674
1675 extern uint32_t mbuf_data_size_n;
1676 extern uint16_t mbuf_data_size[MAX_SEGS_BUFFER_SPLIT];
1677@@ -879,7 +878,7 @@ void show_tx_pkt_segments(void);
1678 void set_tx_pkt_times(unsigned int *tx_times);
1679 void show_tx_pkt_times(void);
1680 void set_tx_pkt_split(const char *name);
1681-int parse_fec_mode(const char *name, enum rte_eth_fec_mode *mode);
1682+int parse_fec_mode(const char *name, uint32_t *fec_capa);
1683 void show_fec_capability(uint32_t num, struct rte_eth_fec_capa *speed_fec_capa);
1684 void set_nb_pkt_per_burst(uint16_t pkt_burst);
1685 char *list_pkt_forwarding_modes(void);
1686@@ -934,7 +933,7 @@ int set_vf_rate_limit(portid_t port_id, uint16_t vf, uint16_t rate,
1687
1688 void port_rss_hash_conf_show(portid_t port_id, int show_rss_key);
1689 void port_rss_hash_key_update(portid_t port_id, char rss_type[],
1690- uint8_t *hash_key, uint hash_key_len);
1691+ uint8_t *hash_key, uint8_t hash_key_len);
1692 int rx_queue_id_is_invalid(queueid_t rxq_id);
1693 int tx_queue_id_is_invalid(queueid_t txq_id);
1694 void setup_gro(const char *onoff, portid_t port_id);
1695diff --git a/app/test-regex/main.c b/app/test-regex/main.c
1696index ac6152d..6a8eb07 100644
1697--- a/app/test-regex/main.c
1698+++ b/app/test-regex/main.c
1699@@ -105,12 +105,11 @@ args_parse(int argc, char **argv, char *rules_file, char *data_file,
1700 *nb_iterations = atoi(optarg);
1701 break;
1702 case ARG_HELP:
1703- usage("RegEx test app");
1704+ usage(argv[0]);
1705 break;
1706 default:
1707- fprintf(stderr, "Invalid option: %s\n", argv[optind]);
1708- usage("RegEx test app");
1709- rte_exit(EXIT_FAILURE, "Invalid option\n");
1710+ usage(argv[0]);
1711+ rte_exit(EXIT_FAILURE, "Invalid option: %s\n", argv[optind]);
1712 break;
1713 }
1714 }
1715diff --git a/app/test/autotest_test_funcs.py b/app/test/autotest_test_funcs.py
1716index 0811066..6c717bd 100644
1717--- a/app/test/autotest_test_funcs.py
1718+++ b/app/test/autotest_test_funcs.py
1719@@ -13,13 +13,16 @@ import pexpect
1720 def default_autotest(child, test_name):
1721 child.sendline(test_name)
1722 result = child.expect(["Test OK", "Test Failed",
1723- "Command not found", pexpect.TIMEOUT], timeout=900)
1724+ "Command not found", pexpect.TIMEOUT,
1725+ "Test Skipped"], timeout=900)
1726 if result == 1:
1727 return -1, "Fail"
1728 elif result == 2:
1729 return -1, "Fail [Not found]"
1730 elif result == 3:
1731 return -1, "Fail [Timeout]"
1732+ elif result == 4:
1733+ return 0, "Skipped [Not Run]"
1734 return 0, "Success"
1735
1736 # autotest used to run dump commands
1737diff --git a/app/test/meson.build b/app/test/meson.build
1738index bdbc619..49fbb5e 100644
1739--- a/app/test/meson.build
1740+++ b/app/test/meson.build
1741@@ -396,8 +396,6 @@ if cc.has_argument('-Wno-format-truncation')
1742 cflags += '-Wno-format-truncation'
1743 endif
1744
1745-# specify -D_GNU_SOURCE unconditionally
1746-cflags += '-D_GNU_SOURCE'
1747 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
1748 cflags += '-fno-strict-aliasing'
1749
1750@@ -424,7 +422,6 @@ foreach d:test_deps
1751 def_lib = get_option('default_library')
1752 test_dep_objs += get_variable(def_lib + '_rte_' + d)
1753 endforeach
1754-test_dep_objs += cc.find_library('execinfo', required: false)
1755
1756 link_libs = []
1757 if get_option('default_library') == 'static'
1758diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c
1759index f203f9d..0fd7290 100644
1760--- a/app/test/packet_burst_generator.c
1761+++ b/app/test/packet_burst_generator.c
1762@@ -117,6 +117,7 @@ initialize_tcp_header(struct rte_tcp_hdr *tcp_hdr, uint16_t src_port,
1763 memset(tcp_hdr, 0, sizeof(struct rte_tcp_hdr));
1764 tcp_hdr->src_port = rte_cpu_to_be_16(src_port);
1765 tcp_hdr->dst_port = rte_cpu_to_be_16(dst_port);
1766+ tcp_hdr->data_off = (sizeof(struct rte_tcp_hdr) << 2) & 0xF0;
1767
1768 return pkt_len;
1769 }
1770@@ -141,8 +142,8 @@ uint16_t
1771 initialize_ipv6_header(struct rte_ipv6_hdr *ip_hdr, uint8_t *src_addr,
1772 uint8_t *dst_addr, uint16_t pkt_data_len)
1773 {
1774- ip_hdr->vtc_flow = 0;
1775- ip_hdr->payload_len = pkt_data_len;
1776+ ip_hdr->vtc_flow = rte_cpu_to_be_32(0x60000000); /* Set version to 6. */
1777+ ip_hdr->payload_len = rte_cpu_to_be_16(pkt_data_len);
1778 ip_hdr->proto = IPPROTO_UDP;
1779 ip_hdr->hop_limits = IP_DEFTTL;
1780
1781diff --git a/app/test/process.h b/app/test/process.h
1782index 27f1b1c..a09a088 100644
1783--- a/app/test/process.h
1784+++ b/app/test/process.h
1785@@ -48,6 +48,7 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
1786 #ifdef RTE_LIB_PDUMP
1787 #ifdef RTE_NET_RING
1788 pthread_t thread;
1789+ int rc;
1790 #endif
1791 #endif
1792
1793@@ -126,8 +127,13 @@ process_dup(const char *const argv[], int numargs, const char *env_value)
1794 /* parent process does a wait */
1795 #ifdef RTE_LIB_PDUMP
1796 #ifdef RTE_NET_RING
1797- if ((strcmp(env_value, "run_pdump_server_tests") == 0))
1798- pthread_create(&thread, NULL, &send_pkts, NULL);
1799+ if ((strcmp(env_value, "run_pdump_server_tests") == 0)) {
1800+ rc = pthread_create(&thread, NULL, &send_pkts, NULL);
1801+ if (rc != 0) {
1802+ rte_panic("Cannot start send pkts thread: %s\n",
1803+ strerror(rc));
1804+ }
1805+ }
1806 #endif
1807 #endif
1808
1809diff --git a/app/test/test.c b/app/test/test.c
1810index 624dd48..864523e 100644
1811--- a/app/test/test.c
1812+++ b/app/test/test.c
1813@@ -134,8 +134,13 @@ main(int argc, char **argv)
1814 goto out;
1815 }
1816
1817+ argv += ret;
1818+
1819+ prgname = argv[0];
1820+
1821 #ifdef RTE_LIB_TIMER
1822- if (rte_timer_subsystem_init() < 0) {
1823+ ret = rte_timer_subsystem_init();
1824+ if (ret < 0 && ret != -EALREADY) {
1825 ret = -1;
1826 goto out;
1827 }
1828@@ -146,10 +151,6 @@ main(int argc, char **argv)
1829 goto out;
1830 }
1831
1832- argv += ret;
1833-
1834- prgname = argv[0];
1835-
1836 recursive_call = getenv(RECURSIVE_ENV_VAR);
1837 if (recursive_call != NULL) {
1838 ret = do_recursive_call();
1839diff --git a/app/test/test_bpf.c b/app/test/test_bpf.c
1840index 7c3de96..527c06b 100644
1841--- a/app/test/test_bpf.c
1842+++ b/app/test/test_bpf.c
1843@@ -3207,7 +3207,7 @@ run_test(const struct bpf_test *tst)
1844 printf("%s@%d: check_result(%s) failed, "
1845 "error: %d(%s);\n",
1846 __func__, __LINE__, tst->name,
1847- rv, strerror(ret));
1848+ rv, strerror(rv));
1849 }
1850 }
1851
1852diff --git a/app/test/test_cmdline_ipaddr.c b/app/test/test_cmdline_ipaddr.c
1853index b3f50d8..2a1ee12 100644
1854--- a/app/test/test_cmdline_ipaddr.c
1855+++ b/app/test/test_cmdline_ipaddr.c
1856@@ -255,7 +255,7 @@ const char * ipaddr_invalid_strs[] = {
1857 /** misc **/
1858
1859 /* too long */
1860- "1234:1234:1234:1234:1234:1234:1234:1234:1234:1234:1234"
1861+ "1234:1234:1234:1234:1234:1234:1234:1234:1234:1234:1234",
1862 "random invalid text",
1863 "",
1864 "\0",
1865diff --git a/app/test/test_cmdline_lib.c b/app/test/test_cmdline_lib.c
1866index bd72df0..d5a09b4 100644
1867--- a/app/test/test_cmdline_lib.c
1868+++ b/app/test/test_cmdline_lib.c
1869@@ -71,10 +71,12 @@ test_cmdline_parse_fns(void)
1870 if (cmdline_complete(cl, "buffer", &i, NULL, sizeof(dst)) >= 0)
1871 goto error;
1872
1873+ cmdline_free(cl);
1874 return 0;
1875
1876 error:
1877 printf("Error: function accepted null parameter!\n");
1878+ cmdline_free(cl);
1879 return -1;
1880 }
1881
1882@@ -140,22 +142,31 @@ static int
1883 test_cmdline_socket_fns(void)
1884 {
1885 cmdline_parse_ctx_t ctx;
1886+ struct cmdline *cl;
1887
1888- if (cmdline_stdin_new(NULL, "prompt") != NULL)
1889+ cl = cmdline_stdin_new(NULL, "prompt");
1890+ if (cl != NULL)
1891 goto error;
1892- if (cmdline_stdin_new(&ctx, NULL) != NULL)
1893+ cl = cmdline_stdin_new(&ctx, NULL);
1894+ if (cl != NULL)
1895 goto error;
1896- if (cmdline_file_new(NULL, "prompt", "/dev/null") != NULL)
1897+ cl = cmdline_file_new(NULL, "prompt", "/dev/null");
1898+ if (cl != NULL)
1899 goto error;
1900- if (cmdline_file_new(&ctx, NULL, "/dev/null") != NULL)
1901+ cl = cmdline_file_new(&ctx, NULL, "/dev/null");
1902+ if (cl != NULL)
1903 goto error;
1904- if (cmdline_file_new(&ctx, "prompt", NULL) != NULL)
1905+ cl = cmdline_file_new(&ctx, "prompt", NULL);
1906+ if (cl != NULL)
1907 goto error;
1908- if (cmdline_file_new(&ctx, "prompt", "-/invalid/~/path") != NULL) {
1909+ cl = cmdline_file_new(&ctx, "prompt", "-/invalid/~/path");
1910+ if (cl != NULL) {
1911 printf("Error: succeeded in opening invalid file for reading!");
1912+ cmdline_free(cl);
1913 return -1;
1914 }
1915- if (cmdline_file_new(&ctx, "prompt", "/dev/null") == NULL) {
1916+ cl = cmdline_file_new(&ctx, "prompt", "/dev/null");
1917+ if (cl == NULL) {
1918 printf("Error: failed to open /dev/null for reading!");
1919 return -1;
1920 }
1921@@ -163,9 +174,11 @@ test_cmdline_socket_fns(void)
1922 /* void functions */
1923 cmdline_stdin_exit(NULL);
1924
1925+ cmdline_free(cl);
1926 return 0;
1927 error:
1928 printf("Error: function accepted null parameter!\n");
1929+ cmdline_free(cl);
1930 return -1;
1931 }
1932
1933@@ -176,13 +189,14 @@ test_cmdline_fns(void)
1934 struct cmdline *cl;
1935
1936 memset(&ctx, 0, sizeof(ctx));
1937- cl = cmdline_new(&ctx, "test", -1, -1);
1938- if (cl == NULL)
1939+ cl = cmdline_new(NULL, "prompt", 0, 0);
1940+ if (cl != NULL)
1941 goto error;
1942-
1943- if (cmdline_new(NULL, "prompt", 0, 0) != NULL)
1944+ cl = cmdline_new(&ctx, NULL, 0, 0);
1945+ if (cl != NULL)
1946 goto error;
1947- if (cmdline_new(&ctx, NULL, 0, 0) != NULL)
1948+ cl = cmdline_new(&ctx, "test", -1, -1);
1949+ if (cl == NULL)
1950 goto error;
1951 if (cmdline_in(NULL, "buffer", CMDLINE_TEST_BUFSIZE) >= 0)
1952 goto error;
1953@@ -198,6 +212,7 @@ test_cmdline_fns(void)
1954 cmdline_interact(NULL);
1955 cmdline_quit(NULL);
1956
1957+ cmdline_free(cl);
1958 return 0;
1959
1960 error:
1961diff --git a/app/test/test_cmdline_num.c b/app/test/test_cmdline_num.c
1962index ec479cd..9276de5 100644
1963--- a/app/test/test_cmdline_num.c
1964+++ b/app/test/test_cmdline_num.c
1965@@ -200,8 +200,8 @@ const char * num_invalid_strs[] = {
1966 "-0x1234580A",
1967 "-0b0111010101",
1968 /* too long (128+ chars) */
1969- "0b1111000011110000111100001111000011110000111100001111000011110000"
1970- "1111000011110000111100001111000011110000111100001111000011110000",
1971+ ("0b1111000011110000111100001111000011110000111100001111000011110000"
1972+ "1111000011110000111100001111000011110000111100001111000011110000"),
1973 "1E3",
1974 "0A",
1975 "-B",
1976diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
1977index 8189053..dd2b035 100644
1978--- a/app/test/test_cryptodev.c
1979+++ b/app/test/test_cryptodev.c
1980@@ -135,10 +135,11 @@ setup_test_string(struct rte_mempool *mpool,
1981 struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
1982 size_t t_len = len - (blocksize ? (len % blocksize) : 0);
1983
1984- memset(m->buf_addr, 0, m->buf_len);
1985 if (m) {
1986- char *dst = rte_pktmbuf_append(m, t_len);
1987+ char *dst;
1988
1989+ memset(m->buf_addr, 0, m->buf_len);
1990+ dst = rte_pktmbuf_append(m, t_len);
1991 if (!dst) {
1992 rte_pktmbuf_free(m);
1993 return NULL;
1994@@ -2630,6 +2631,21 @@ create_wireless_algo_auth_cipher_operation(
1995 iv_ptr += cipher_iv_len;
1996 rte_memcpy(iv_ptr, auth_iv, auth_iv_len);
1997
1998+ /* Only copy over the offset data needed from src to dst in OOP,
1999+ * if the auth and cipher offsets are not aligned
2000+ */
2001+ if (op_mode == OUT_OF_PLACE) {
2002+ if (cipher_offset > auth_offset)
2003+ rte_memcpy(
2004+ rte_pktmbuf_mtod_offset(
2005+ sym_op->m_dst,
2006+ uint8_t *, auth_offset >> 3),
2007+ rte_pktmbuf_mtod_offset(
2008+ sym_op->m_src,
2009+ uint8_t *, auth_offset >> 3),
2010+ ((cipher_offset >> 3) - (auth_offset >> 3)));
2011+ }
2012+
2013 if (cipher_algo == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 ||
2014 cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8 ||
2015 cipher_algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) {
2016@@ -4672,16 +4688,20 @@ test_snow3g_auth_cipher(const struct snow3g_test_data *tdata,
2017
2018 /* Validate obuf */
2019 if (verify) {
2020- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2021+ TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2022 plaintext,
2023 tdata->plaintext.data,
2024- tdata->plaintext.len >> 3,
2025+ (tdata->plaintext.len - tdata->cipher.offset_bits -
2026+ (tdata->digest.len << 3)),
2027+ tdata->cipher.offset_bits,
2028 "SNOW 3G Plaintext data not as expected");
2029 } else {
2030- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2031+ TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2032 ciphertext,
2033 tdata->ciphertext.data,
2034- tdata->validDataLenInBits.len,
2035+ (tdata->validDataLenInBits.len -
2036+ tdata->cipher.offset_bits),
2037+ tdata->cipher.offset_bits,
2038 "SNOW 3G Ciphertext data not as expected");
2039
2040 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2041@@ -4883,16 +4903,20 @@ test_snow3g_auth_cipher_sgl(const struct snow3g_test_data *tdata,
2042
2043 /* Validate obuf */
2044 if (verify) {
2045- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2046+ TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2047 plaintext,
2048 tdata->plaintext.data,
2049- tdata->plaintext.len >> 3,
2050+ (tdata->plaintext.len - tdata->cipher.offset_bits -
2051+ (tdata->digest.len << 3)),
2052+ tdata->cipher.offset_bits,
2053 "SNOW 3G Plaintext data not as expected");
2054 } else {
2055- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
2056+ TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
2057 ciphertext,
2058 tdata->ciphertext.data,
2059- tdata->validDataLenInBits.len,
2060+ (tdata->validDataLenInBits.len -
2061+ tdata->cipher.offset_bits),
2062+ tdata->cipher.offset_bits,
2063 "SNOW 3G Ciphertext data not as expected");
2064
2065 TEST_ASSERT_BUFFERS_ARE_EQUAL(
2066@@ -10388,8 +10412,8 @@ test_multi_session(void)
2067 rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
2068
2069 sessions = rte_malloc(NULL,
2070- (sizeof(struct rte_cryptodev_sym_session *) *
2071- MAX_NB_SESSIONS) + 1, 0);
2072+ sizeof(struct rte_cryptodev_sym_session *) *
2073+ (MAX_NB_SESSIONS + 1), 0);
2074
2075 /* Create multiple crypto sessions*/
2076 for (i = 0; i < MAX_NB_SESSIONS; i++) {
2077@@ -10434,6 +10458,7 @@ test_multi_session(void)
2078 }
2079 }
2080
2081+ sessions[i] = NULL;
2082 /* Next session create should fail */
2083 rte_cryptodev_sym_session_init(ts_params->valid_devs[0],
2084 sessions[i], &ut_params->auth_xform,
2085@@ -12000,7 +12025,7 @@ test_authenticated_decryption_fail_when_corruption(
2086 }
2087
2088 static int
2089-test_authenticated_encryt_with_esn(
2090+test_authenticated_encrypt_with_esn(
2091 struct crypto_testsuite_params *ts_params,
2092 struct crypto_unittest_params *ut_params,
2093 const struct test_crypto_vector *reference)
2094@@ -12787,7 +12812,7 @@ auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
2095 static int
2096 auth_encrypt_AES128CBC_HMAC_SHA1_esn_check(void)
2097 {
2098- return test_authenticated_encryt_with_esn(
2099+ return test_authenticated_encrypt_with_esn(
2100 &testsuite_params,
2101 &unittest_params,
2102 &aes128cbc_hmac_sha1_aad_test_vector);
2103@@ -13762,7 +13787,7 @@ static struct unit_test_suite cryptodev_ccp_testsuite = {
2104 };
2105
2106 static int
2107-test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
2108+test_cryptodev_qat(void)
2109 {
2110 gbl_driver_id = rte_cryptodev_driver_id_get(
2111 RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD));
2112@@ -13776,7 +13801,7 @@ test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
2113 }
2114
2115 static int
2116-test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/)
2117+test_cryptodev_virtio(void)
2118 {
2119 gbl_driver_id = rte_cryptodev_driver_id_get(
2120 RTE_STR(CRYPTODEV_NAME_VIRTIO_PMD));
2121@@ -13790,7 +13815,7 @@ test_cryptodev_virtio(void /*argv __rte_unused, int argc __rte_unused*/)
2122 }
2123
2124 static int
2125-test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
2126+test_cryptodev_aesni_mb(void)
2127 {
2128 gbl_driver_id = rte_cryptodev_driver_id_get(
2129 RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
2130@@ -13888,7 +13913,7 @@ test_cryptodev_null(void)
2131 }
2132
2133 static int
2134-test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
2135+test_cryptodev_sw_snow3g(void)
2136 {
2137 gbl_driver_id = rte_cryptodev_driver_id_get(
2138 RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
2139@@ -13902,7 +13927,7 @@ test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
2140 }
2141
2142 static int
2143-test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
2144+test_cryptodev_sw_kasumi(void)
2145 {
2146 gbl_driver_id = rte_cryptodev_driver_id_get(
2147 RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
2148@@ -13916,7 +13941,7 @@ test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
2149 }
2150
2151 static int
2152-test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
2153+test_cryptodev_sw_zuc(void)
2154 {
2155 gbl_driver_id = rte_cryptodev_driver_id_get(
2156 RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
2157@@ -13960,7 +13985,7 @@ test_cryptodev_mrvl(void)
2158 #ifdef RTE_CRYPTO_SCHEDULER
2159
2160 static int
2161-test_cryptodev_scheduler(void /*argv __rte_unused, int argc __rte_unused*/)
2162+test_cryptodev_scheduler(void)
2163 {
2164 gbl_driver_id = rte_cryptodev_driver_id_get(
2165 RTE_STR(CRYPTODEV_NAME_SCHEDULER_PMD));
2166@@ -13983,7 +14008,7 @@ REGISTER_TEST_COMMAND(cryptodev_scheduler_autotest, test_cryptodev_scheduler);
2167 #endif
2168
2169 static int
2170-test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
2171+test_cryptodev_dpaa2_sec(void)
2172 {
2173 gbl_driver_id = rte_cryptodev_driver_id_get(
2174 RTE_STR(CRYPTODEV_NAME_DPAA2_SEC_PMD));
2175@@ -13997,7 +14022,7 @@ test_cryptodev_dpaa2_sec(void /*argv __rte_unused, int argc __rte_unused*/)
2176 }
2177
2178 static int
2179-test_cryptodev_dpaa_sec(void /*argv __rte_unused, int argc __rte_unused*/)
2180+test_cryptodev_dpaa_sec(void)
2181 {
2182 gbl_driver_id = rte_cryptodev_driver_id_get(
2183 RTE_STR(CRYPTODEV_NAME_DPAA_SEC_PMD));
2184@@ -14049,7 +14074,7 @@ test_cryptodev_octeontx2(void)
2185 }
2186
2187 static int
2188-test_cryptodev_caam_jr(void /*argv __rte_unused, int argc __rte_unused*/)
2189+test_cryptodev_caam_jr(void)
2190 {
2191 gbl_driver_id = rte_cryptodev_driver_id_get(
2192 RTE_STR(CRYPTODEV_NAME_CAAM_JR_PMD));
2193@@ -14091,7 +14116,7 @@ test_cryptodev_bcmfs(void)
2194 }
2195
2196 static int
2197-test_cryptodev_qat_raw_api(void /*argv __rte_unused, int argc __rte_unused*/)
2198+test_cryptodev_qat_raw_api(void)
2199 {
2200 int ret;
2201
2202diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h
2203index c192d75..bb5f09f 100644
2204--- a/app/test/test_cryptodev_aes_test_vectors.h
2205+++ b/app/test/test_cryptodev_aes_test_vectors.h
2206@@ -2650,7 +2650,7 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = {
2207 .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
2208 },
2209 {
2210- .test_descr = "AES-192-CBC Encryption Scater gather",
2211+ .test_descr = "AES-192-CBC Encryption Scatter gather",
2212 .test_data = &aes_test_data_10,
2213 .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
2214 .feature_mask = BLOCKCIPHER_TEST_FEATURE_SG |
2215diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c
2216index 135e57b..8e16872 100644
2217--- a/app/test/test_cryptodev_blockcipher.c
2218+++ b/app/test/test_cryptodev_blockcipher.c
2219@@ -160,7 +160,7 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t,
2220 printf("Raw Data Path APIs do not support OOP, "
2221 "Test Skipped.\n");
2222 snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "SKIPPED");
2223- status = TEST_SUCCESS;
2224+ status = TEST_SKIPPED;
2225 goto error_exit;
2226 }
2227 }
2228diff --git a/app/test/test_debug.c b/app/test/test_debug.c
2229index 834a738..23b24db 100644
2230--- a/app/test/test_debug.c
2231+++ b/app/test/test_debug.c
2232@@ -4,6 +4,8 @@
2233
2234 #include <stdio.h>
2235 #include <stdint.h>
2236+#include <sys/resource.h>
2237+#include <sys/time.h>
2238 #include <sys/wait.h>
2239 #include <unistd.h>
2240
2241@@ -28,9 +30,14 @@ test_panic(void)
2242
2243 pid = fork();
2244
2245- if (pid == 0)
2246+ if (pid == 0) {
2247+ struct rlimit rl;
2248+
2249+ /* No need to generate a coredump when panicking. */
2250+ rl.rlim_cur = rl.rlim_max = 0;
2251+ setrlimit(RLIMIT_CORE, &rl);
2252 rte_panic("Test Debug\n");
2253- else if (pid < 0){
2254+ } else if (pid < 0) {
2255 printf("Fork Failed\n");
2256 return -1;
2257 }
2258diff --git a/app/test/test_distributor_perf.c b/app/test/test_distributor_perf.c
2259index b25f79a..fdbeae6 100644
2260--- a/app/test/test_distributor_perf.c
2261+++ b/app/test/test_distributor_perf.c
2262@@ -188,13 +188,15 @@ quit_workers(struct rte_distributor *d, struct rte_mempool *p)
2263 rte_mempool_get_bulk(p, (void *)bufs, num_workers);
2264
2265 quit = 1;
2266- for (i = 0; i < num_workers; i++)
2267+ for (i = 0; i < num_workers; i++) {
2268 bufs[i]->hash.usr = i << 1;
2269- rte_distributor_process(d, bufs, num_workers);
2270+ rte_distributor_process(d, &bufs[i], 1);
2271+ }
2272
2273 rte_mempool_put_bulk(p, (void *)bufs, num_workers);
2274
2275 rte_distributor_process(d, NULL, 0);
2276+ rte_distributor_flush(d);
2277 rte_eal_mp_wait_lcore();
2278 quit = 0;
2279 worker_idx = 0;
2280diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
2281index 932fbe3..b4880ee 100644
2282--- a/app/test/test_eal_flags.c
2283+++ b/app/test/test_eal_flags.c
2284@@ -124,6 +124,7 @@ process_hugefiles(const char * prefix, enum hugepage_action action)
2285 case HUGEPAGE_CHECK_EXISTS:
2286 {
2287 /* file exists, return */
2288+ closedir(hugepage_dir);
2289 result = 1;
2290 goto end;
2291 }
2292diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c
2293index 335211c..71b58fc 100644
2294--- a/app/test/test_event_crypto_adapter.c
2295+++ b/app/test/test_event_crypto_adapter.c
2296@@ -224,8 +224,7 @@ test_op_forward_mode(uint8_t session_less)
2297 op->sess_type = RTE_CRYPTO_OP_SESSIONLESS;
2298 first_xform = &cipher_xform;
2299 sym_op->xform = first_xform;
2300- uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH +
2301- (sizeof(struct rte_crypto_sym_xform) * 2);
2302+ uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH;
2303 op->private_data_offset = len;
2304 /* Fill in private data information */
2305 rte_memcpy(&m_data.response_info, &response_info,
2306@@ -419,8 +418,7 @@ test_op_new_mode(uint8_t session_less)
2307 op->sess_type = RTE_CRYPTO_OP_SESSIONLESS;
2308 first_xform = &cipher_xform;
2309 sym_op->xform = first_xform;
2310- uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH +
2311- (sizeof(struct rte_crypto_sym_xform) * 2);
2312+ uint32_t len = IV_OFFSET + MAXIMUM_IV_LENGTH;
2313 op->private_data_offset = len;
2314 /* Fill in private data information */
2315 rte_memcpy(&m_data.response_info, &response_info,
2316@@ -516,7 +514,8 @@ configure_cryptodev(void)
2317 NUM_MBUFS, MBUF_CACHE_SIZE,
2318 DEFAULT_NUM_XFORMS *
2319 sizeof(struct rte_crypto_sym_xform) +
2320- MAXIMUM_IV_LENGTH,
2321+ MAXIMUM_IV_LENGTH +
2322+ sizeof(union rte_event_crypto_metadata),
2323 rte_socket_id());
2324 if (params.op_mpool == NULL) {
2325 RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
2326diff --git a/app/test/test_event_timer_adapter.c b/app/test/test_event_timer_adapter.c
2327index ad3f4dc..b536dde 100644
2328--- a/app/test/test_event_timer_adapter.c
2329+++ b/app/test/test_event_timer_adapter.c
2330@@ -3,6 +3,8 @@
2331 * Copyright(c) 2017-2018 Intel Corporation.
2332 */
2333
2334+#include <math.h>
2335+
2336 #include <rte_atomic.h>
2337 #include <rte_common.h>
2338 #include <rte_cycles.h>
2339@@ -46,7 +48,7 @@ static uint64_t global_info_bkt_tck_ns;
2340 static volatile uint8_t arm_done;
2341
2342 #define CALC_TICKS(tks) \
2343- ((tks * global_bkt_tck_ns) / global_info_bkt_tck_ns)
2344+ ceil((double)(tks * global_bkt_tck_ns) / global_info_bkt_tck_ns)
2345
2346
2347 static bool using_services;
2348diff --git a/app/test/test_external_mem.c b/app/test/test_external_mem.c
2349index 7eb81f6..5edf88b 100644
2350--- a/app/test/test_external_mem.c
2351+++ b/app/test/test_external_mem.c
2352@@ -13,6 +13,7 @@
2353 #include <rte_common.h>
2354 #include <rte_debug.h>
2355 #include <rte_eal.h>
2356+#include <rte_eal_paging.h>
2357 #include <rte_errno.h>
2358 #include <rte_malloc.h>
2359 #include <rte_ring.h>
2360@@ -532,8 +533,8 @@ fail:
2361 static int
2362 test_external_mem(void)
2363 {
2364+ size_t pgsz = rte_mem_page_size();
2365 size_t len = EXTERNAL_MEM_SZ;
2366- size_t pgsz = RTE_PGSIZE_4K;
2367 rte_iova_t iova[len / pgsz];
2368 void *addr;
2369 int ret, n_pages;
2370diff --git a/app/test/test_flow_classify.c b/app/test/test_flow_classify.c
2371index ef0b6fd..951606f 100644
2372--- a/app/test/test_flow_classify.c
2373+++ b/app/test/test_flow_classify.c
2374@@ -828,6 +828,12 @@ test_flow_classify(void)
2375 cls_params.name = "flow_classifier";
2376 cls_params.socket_id = 0;
2377 cls->cls = rte_flow_classifier_create(&cls_params);
2378+ if (cls->cls == NULL) {
2379+ printf("Line %i: flow classifier create has failed!\n",
2380+ __LINE__);
2381+ rte_free(cls);
2382+ return TEST_FAILED;
2383+ }
2384
2385 /* initialise ACL table params */
2386 table_acl_params.n_rule_fields = RTE_DIM(ipv4_defs);
2387diff --git a/app/test/test_kni.c b/app/test/test_kni.c
2388index f53a53e..9673355 100644
2389--- a/app/test/test_kni.c
2390+++ b/app/test/test_kni.c
2391@@ -562,8 +562,12 @@ test_kni(void)
2392 }
2393 closedir(dir);
2394
2395- /* Initialize KNI subsytem */
2396- rte_kni_init(KNI_TEST_MAX_PORTS);
2397+ /* Initialize KNI subsystem */
2398+ ret = rte_kni_init(KNI_TEST_MAX_PORTS);
2399+ if (ret < 0) {
2400+ printf("fail to initialize KNI subsystem\n");
2401+ return -1;
2402+ }
2403
2404 if (test_kni_allocate_lcores() < 0) {
2405 printf("No enough lcores for kni processing\n");
2406diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c
2407index a40f7d4..5bb4786 100644
2408--- a/app/test/test_mbuf.c
2409+++ b/app/test/test_mbuf.c
2410@@ -1174,6 +1174,8 @@ err:
2411 }
2412
2413 #include <unistd.h>
2414+#include <sys/resource.h>
2415+#include <sys/time.h>
2416 #include <sys/wait.h>
2417
2418 /* use fork() to test mbuf errors panic */
2419@@ -1186,9 +1188,14 @@ verify_mbuf_check_panics(struct rte_mbuf *buf)
2420 pid = fork();
2421
2422 if (pid == 0) {
2423+ struct rlimit rl;
2424+
2425+ /* No need to generate a coredump when panicking. */
2426+ rl.rlim_cur = rl.rlim_max = 0;
2427+ setrlimit(RLIMIT_CORE, &rl);
2428 rte_mbuf_sanity_check(buf, 1); /* should panic */
2429 exit(0); /* return normally if it doesn't panic */
2430- } else if (pid < 0){
2431+ } else if (pid < 0) {
2432 printf("Fork Failed\n");
2433 return -1;
2434 }
2435@@ -2356,7 +2363,7 @@ test_pktmbuf_ext_shinfo_init_helper(struct rte_mempool *pktmbuf_pool)
2436 if (rte_mbuf_refcnt_read(m) != 1)
2437 GOTO_FAIL("%s: Invalid refcnt in mbuf\n", __func__);
2438
2439- buf_iova = rte_mempool_virt2iova(ext_buf_addr);
2440+ buf_iova = rte_mem_virt2iova(ext_buf_addr);
2441 rte_pktmbuf_attach_extbuf(m, ext_buf_addr, buf_iova, buf_len,
2442 ret_shinfo);
2443 if (m->ol_flags != EXT_ATTACHED_MBUF)
2444diff --git a/app/test/test_mempool.c b/app/test/test_mempool.c
2445index 084842f..3adadd6 100644
2446--- a/app/test/test_mempool.c
2447+++ b/app/test/test_mempool.c
2448@@ -552,7 +552,7 @@ test_mempool(void)
2449 GOTO_ERR(ret, err);
2450
2451 /* test to initialize mempool objects and memory */
2452- nb_objs = rte_mempool_obj_iter(mp_stack_mempool_iter, rte_pktmbuf_init,
2453+ nb_objs = rte_mempool_obj_iter(mp_stack_mempool_iter, my_obj_init,
2454 NULL);
2455 if (nb_objs == 0)
2456 GOTO_ERR(ret, err);
2457diff --git a/app/test/test_power_cpufreq.c b/app/test/test_power_cpufreq.c
2458index 731c6b4..94a3801 100644
2459--- a/app/test/test_power_cpufreq.c
2460+++ b/app/test/test_power_cpufreq.c
2461@@ -8,6 +8,7 @@
2462 #include <limits.h>
2463 #include <string.h>
2464 #include <inttypes.h>
2465+#include <rte_cycles.h>
2466
2467 #include "test.h"
2468
2469@@ -34,37 +35,86 @@ test_power_caps(void)
2470 #define TEST_POWER_LCORE_INVALID ((unsigned)RTE_MAX_LCORE)
2471 #define TEST_POWER_FREQS_NUM_MAX ((unsigned)RTE_MAX_LCORE_FREQS)
2472
2473-#define TEST_POWER_SYSFILE_CUR_FREQ \
2474+/* macros used for rounding frequency to nearest 100000 */
2475+#define TEST_FREQ_ROUNDING_DELTA 50000
2476+#define TEST_ROUND_FREQ_TO_N_100000 100000
2477+
2478+#define TEST_POWER_SYSFILE_CPUINFO_FREQ \
2479 "/sys/devices/system/cpu/cpu%u/cpufreq/cpuinfo_cur_freq"
2480+#define TEST_POWER_SYSFILE_SCALING_FREQ \
2481+ "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_cur_freq"
2482
2483 static uint32_t total_freq_num;
2484 static uint32_t freqs[TEST_POWER_FREQS_NUM_MAX];
2485
2486 static int
2487-check_cur_freq(unsigned lcore_id, uint32_t idx)
2488+check_cur_freq(unsigned int lcore_id, uint32_t idx, bool turbo)
2489 {
2490 #define TEST_POWER_CONVERT_TO_DECIMAL 10
2491+#define MAX_LOOP 100
2492 FILE *f;
2493 char fullpath[PATH_MAX];
2494 char buf[BUFSIZ];
2495+ enum power_management_env env;
2496 uint32_t cur_freq;
2497+ uint32_t freq_conv;
2498 int ret = -1;
2499+ int i;
2500
2501 if (snprintf(fullpath, sizeof(fullpath),
2502- TEST_POWER_SYSFILE_CUR_FREQ, lcore_id) < 0) {
2503+ TEST_POWER_SYSFILE_CPUINFO_FREQ, lcore_id) < 0) {
2504 return 0;
2505 }
2506 f = fopen(fullpath, "r");
2507 if (f == NULL) {
2508- return 0;
2509+ if (snprintf(fullpath, sizeof(fullpath),
2510+ TEST_POWER_SYSFILE_SCALING_FREQ, lcore_id) < 0) {
2511+ return 0;
2512+ }
2513+ f = fopen(fullpath, "r");
2514+ if (f == NULL) {
2515+ return 0;
2516+ }
2517+ }
2518+ for (i = 0; i < MAX_LOOP; i++) {
2519+ fflush(f);
2520+ if (fgets(buf, sizeof(buf), f) == NULL)
2521+ goto fail_all;
2522+
2523+ cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL);
2524+ freq_conv = cur_freq;
2525+
2526+ env = rte_power_get_env();
2527+
2528+ if (env == PM_ENV_PSTATE_CPUFREQ) {
2529+ /* convert the frequency to nearest 100000 value
2530+ * Ex: if cur_freq=1396789 then freq_conv=1400000
2531+ * Ex: if cur_freq=800030 then freq_conv=800000
2532+ */
2533+ unsigned int freq_conv = 0;
2534+ freq_conv = (cur_freq + TEST_FREQ_ROUNDING_DELTA)
2535+ / TEST_ROUND_FREQ_TO_N_100000;
2536+ freq_conv = freq_conv * TEST_ROUND_FREQ_TO_N_100000;
2537+ }
2538+
2539+ if (turbo)
2540+ ret = (freqs[idx] <= freq_conv ? 0 : -1);
2541+ else
2542+ ret = (freqs[idx] == freq_conv ? 0 : -1);
2543+
2544+ if (ret == 0)
2545+ break;
2546+
2547+ if (fseek(f, 0, SEEK_SET) < 0) {
2548+ printf("Fail to set file position indicator to 0\n");
2549+ goto fail_all;
2550+ }
2551+
2552+ /* wait for the value to be updated */
2553+ rte_delay_ms(10);
2554 }
2555- if (fgets(buf, sizeof(buf), f) == NULL) {
2556- goto fail_get_cur_freq;
2557- }
2558- cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL);
2559- ret = (freqs[idx] == cur_freq ? 0 : -1);
2560
2561-fail_get_cur_freq:
2562+fail_all:
2563 fclose(f);
2564
2565 return ret;
2566@@ -143,7 +193,7 @@ check_power_get_freq(void)
2567 }
2568
2569 /* Check the current frequency */
2570- ret = check_cur_freq(TEST_POWER_LCORE_ID, count);
2571+ ret = check_cur_freq(TEST_POWER_LCORE_ID, count, false);
2572 if (ret < 0)
2573 return -1;
2574
2575@@ -193,7 +243,7 @@ check_power_set_freq(void)
2576 }
2577
2578 /* Check the current frequency */
2579- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
2580+ ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
2581 if (ret < 0)
2582 return -1;
2583
2584@@ -206,6 +256,8 @@ check_power_freq_down(void)
2585 {
2586 int ret;
2587
2588+ rte_power_freq_enable_turbo(TEST_POWER_LCORE_ID);
2589+
2590 /* test with an invalid lcore id */
2591 ret = rte_power_freq_down(TEST_POWER_LCORE_INVALID);
2592 if (ret >= 0) {
2593@@ -229,7 +281,7 @@ check_power_freq_down(void)
2594 }
2595
2596 /* Check the current frequency */
2597- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
2598+ ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
2599 if (ret < 0)
2600 return -1;
2601
2602@@ -248,7 +300,7 @@ check_power_freq_down(void)
2603 }
2604
2605 /* Check the current frequency */
2606- ret = check_cur_freq(TEST_POWER_LCORE_ID, 1);
2607+ ret = check_cur_freq(TEST_POWER_LCORE_ID, 1, false);
2608 if (ret < 0)
2609 return -1;
2610
2611@@ -284,7 +336,7 @@ check_power_freq_up(void)
2612 }
2613
2614 /* Check the current frequency */
2615- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 2);
2616+ ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 2, false);
2617 if (ret < 0)
2618 return -1;
2619
2620@@ -303,7 +355,7 @@ check_power_freq_up(void)
2621 }
2622
2623 /* Check the current frequency */
2624- ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
2625+ ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
2626 if (ret < 0)
2627 return -1;
2628
2629@@ -331,7 +383,7 @@ check_power_freq_max(void)
2630 }
2631
2632 /* Check the current frequency */
2633- ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
2634+ ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
2635 if (ret < 0)
2636 return -1;
2637
2638@@ -359,7 +411,7 @@ check_power_freq_min(void)
2639 }
2640
2641 /* Check the current frequency */
2642- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
2643+ ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
2644 if (ret < 0)
2645 return -1;
2646
2647@@ -391,9 +443,15 @@ check_power_turbo(void)
2648 TEST_POWER_LCORE_ID);
2649 return -1;
2650 }
2651+ ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
2652+ if (ret < 0) {
2653+ printf("Fail to scale up the freq to max on lcore %u\n",
2654+ TEST_POWER_LCORE_ID);
2655+ return -1;
2656+ }
2657
2658 /* Check the current frequency */
2659- ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
2660+ ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
2661 if (ret < 0)
2662 return -1;
2663
2664@@ -410,9 +468,15 @@ check_power_turbo(void)
2665 TEST_POWER_LCORE_ID);
2666 return -1;
2667 }
2668+ ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
2669+ if (ret < 0) {
2670+ printf("Fail to scale up the freq to max on lcore %u\n",
2671+ TEST_POWER_LCORE_ID);
2672+ return -1;
2673+ }
2674
2675 /* Check the current frequency */
2676- ret = check_cur_freq(TEST_POWER_LCORE_ID, 1);
2677+ ret = check_cur_freq(TEST_POWER_LCORE_ID, 1, false);
2678 if (ret < 0)
2679 return -1;
2680
2681diff --git a/app/test/test_prefetch.c b/app/test/test_prefetch.c
2682index 5489885..7b4a8e4 100644
2683--- a/app/test/test_prefetch.c
2684+++ b/app/test/test_prefetch.c
2685@@ -20,7 +20,7 @@
2686 static int
2687 test_prefetch(void)
2688 {
2689- int a;
2690+ int a = 0;
2691
2692 rte_prefetch0(&a);
2693 rte_prefetch1(&a);
2694diff --git a/app/test/test_reciprocal_division_perf.c b/app/test/test_reciprocal_division_perf.c
2695index a7be8aa..4f62587 100644
2696--- a/app/test/test_reciprocal_division_perf.c
2697+++ b/app/test/test_reciprocal_division_perf.c
2698@@ -71,10 +71,12 @@ test_reciprocal_division_perf(void)
2699 tot_cyc_n);
2700 printf("Total number of cycles reciprocal division : %"PRIu64"\n",
2701 tot_cyc_r);
2702- printf("Cycles per division(normal) : %3.2f\n",
2703- ((double)tot_cyc_n)/i);
2704- printf("Cycles per division(reciprocal) : %3.2f\n\n",
2705- ((double)tot_cyc_r)/i);
2706+ if (i != 0) {
2707+ printf("Cycles per division(normal) : %3.2f\n",
2708+ ((double)tot_cyc_n)/i);
2709+ printf("Cycles per division(reciprocal) : %3.2f\n\n",
2710+ ((double)tot_cyc_r)/i);
2711+ }
2712
2713 tot_cyc_n = 0;
2714 tot_cyc_r = 0;
2715@@ -111,11 +113,12 @@ test_reciprocal_division_perf(void)
2716 tot_cyc_n);
2717 printf("Total number of cycles reciprocal division : %"PRIu64"\n",
2718 tot_cyc_r);
2719- printf("Cycles per division(normal) : %3.2f\n",
2720- ((double)tot_cyc_n)/i);
2721- printf("Cycles per division(reciprocal) : %3.2f\n\n",
2722- ((double)tot_cyc_r)/i);
2723-
2724+ if (i != 0) {
2725+ printf("Cycles per division(normal) : %3.2f\n",
2726+ ((double)tot_cyc_n)/i);
2727+ printf("Cycles per division(reciprocal) : %3.2f\n\n",
2728+ ((double)tot_cyc_r)/i);
2729+ }
2730 tot_cyc_n = 0;
2731 tot_cyc_r = 0;
2732
2733@@ -152,10 +155,12 @@ test_reciprocal_division_perf(void)
2734 tot_cyc_n);
2735 printf("Total number of cycles reciprocal division : %"PRIu64"\n",
2736 tot_cyc_r);
2737- printf("Cycles per division(normal) : %3.2f\n",
2738- ((double)tot_cyc_n)/i);
2739- printf("Cycles per division(reciprocal) : %3.2f\n\n",
2740- ((double)tot_cyc_r)/i);
2741+ if (i != 0) {
2742+ printf("Cycles per division(normal) : %3.2f\n",
2743+ ((double)tot_cyc_n)/i);
2744+ printf("Cycles per division(reciprocal) : %3.2f\n\n",
2745+ ((double)tot_cyc_r)/i);
2746+ }
2747
2748 tot_cyc_n = 0;
2749 tot_cyc_r = 0;
2750@@ -190,10 +195,12 @@ test_reciprocal_division_perf(void)
2751 tot_cyc_n);
2752 printf("Total number of cycles reciprocal division : %"PRIu64"\n",
2753 tot_cyc_r);
2754- printf("Cycles per division(normal) : %3.2f\n",
2755- ((double)tot_cyc_n)/i);
2756- printf("Cycles per division(reciprocal) : %3.2f\n",
2757- ((double)tot_cyc_r)/i);
2758+ if (i != 0) {
2759+ printf("Cycles per division(normal) : %3.2f\n",
2760+ ((double)tot_cyc_n)/i);
2761+ printf("Cycles per division(reciprocal) : %3.2f\n",
2762+ ((double)tot_cyc_r)/i);
2763+ }
2764
2765 return result;
2766 }
2767diff --git a/app/test/test_stack.c b/app/test/test_stack.c
2768index 02422a3..00efb38 100644
2769--- a/app/test/test_stack.c
2770+++ b/app/test/test_stack.c
2771@@ -373,7 +373,11 @@ test_stack(void)
2772 static int
2773 test_lf_stack(void)
2774 {
2775+#if defined(RTE_STACK_LF_SUPPORTED)
2776 return __test_stack(RTE_STACK_F_LF);
2777+#else
2778+ return TEST_SKIPPED;
2779+#endif
2780 }
2781
2782 REGISTER_TEST_COMMAND(stack_autotest, test_stack);
2783diff --git a/app/test/test_stack_perf.c b/app/test/test_stack_perf.c
2784index 3590625..4ee40d5 100644
2785--- a/app/test/test_stack_perf.c
2786+++ b/app/test/test_stack_perf.c
2787@@ -349,7 +349,11 @@ test_stack_perf(void)
2788 static int
2789 test_lf_stack_perf(void)
2790 {
2791+#if defined(RTE_STACK_LF_SUPPORTED)
2792 return __test_stack_perf(RTE_STACK_F_LF);
2793+#else
2794+ return TEST_SKIPPED;
2795+#endif
2796 }
2797
2798 REGISTER_TEST_COMMAND(stack_perf_autotest, test_stack_perf);
2799diff --git a/app/test/test_table_tables.c b/app/test/test_table_tables.c
2800index 1aa269f..4ff6ab1 100644
2801--- a/app/test/test_table_tables.c
2802+++ b/app/test/test_table_tables.c
2803@@ -28,7 +28,8 @@ table_test table_tests[] = {
2804 APP_METADATA_OFFSET(0)); \
2805 key = RTE_MBUF_METADATA_UINT8_PTR(mbuf, \
2806 APP_METADATA_OFFSET(32)); \
2807- memset(key, 0, 32); \
2808+ if (mbuf->priv_size + mbuf->buf_len >= 64) \
2809+ memset(key, 0, 32); \
2810 k32 = (uint32_t *) key; \
2811 k32[0] = (value); \
2812 *signature = pipeline_test_hash(key, NULL, 0, 0); \
2813diff --git a/app/test/test_timer_secondary.c b/app/test/test_timer_secondary.c
2814index 1e8f1d4..16a9f18 100644
2815--- a/app/test/test_timer_secondary.c
2816+++ b/app/test/test_timer_secondary.c
2817@@ -125,9 +125,9 @@ test_timer_secondary(void)
2818
2819 mz = rte_memzone_reserve(TEST_INFO_MZ_NAME, sizeof(*test_info),
2820 SOCKET_ID_ANY, 0);
2821- test_info = mz->addr;
2822- TEST_ASSERT_NOT_NULL(test_info, "Couldn't allocate memory for "
2823+ TEST_ASSERT_NOT_NULL(mz, "Couldn't allocate memory for "
2824 "test data");
2825+ test_info = mz->addr;
2826
2827 test_info->tim_mempool = rte_mempool_create("test_timer_mp",
2828 NUM_TIMERS, sizeof(struct rte_timer), 0, 0,
2829@@ -171,9 +171,9 @@ test_timer_secondary(void)
2830 int i;
2831
2832 mz = rte_memzone_lookup(TEST_INFO_MZ_NAME);
2833- test_info = mz->addr;
2834- TEST_ASSERT_NOT_NULL(test_info, "Couldn't lookup memzone for "
2835+ TEST_ASSERT_NOT_NULL(mz, "Couldn't lookup memzone for "
2836 "test info");
2837+ test_info = mz->addr;
2838
2839 for (i = 0; i < NUM_TIMERS; i++) {
2840 rte_mempool_get(test_info->tim_mempool, (void **)&tim);
2841diff --git a/app/test/test_trace_perf.c b/app/test/test_trace_perf.c
2842index e1ad8e6..46ae7d8 100644
2843--- a/app/test/test_trace_perf.c
2844+++ b/app/test/test_trace_perf.c
2845@@ -79,7 +79,6 @@ signal_workers_to_finish(struct test_data *data)
2846
2847 for (workers = 0; workers < data->nb_workers; workers++) {
2848 data->ldata[workers].done = 1;
2849- rte_smp_wmb();
2850 }
2851 }
2852
2853@@ -102,7 +101,6 @@ worker_fn_##func(void *arg) \
2854 { \
2855 struct lcore_data *ldata = arg; \
2856 ldata->started = 1; \
2857- rte_smp_wmb(); \
2858 __worker_##func(ldata); \
2859 return 0; \
2860 }
2861@@ -137,11 +135,12 @@ run_test(const char *str, lcore_function_t f, struct test_data *data, size_t sz)
2862
2863 wait_till_workers_are_ready(data);
2864 rte_delay_ms(100); /* Wait for some time to accumulate the stats */
2865- measure_perf(str, data);
2866 signal_workers_to_finish(data);
2867
2868 RTE_LCORE_FOREACH_WORKER(id)
2869 rte_eal_wait_lcore(id);
2870+
2871+ measure_perf(str, data);
2872 }
2873
2874 static int
2875diff --git a/buildtools/binutils-avx512-check.sh b/buildtools/binutils-avx512-check.sh
2876index a7e0681..2a833b6 100755
2877--- a/buildtools/binutils-avx512-check.sh
2878+++ b/buildtools/binutils-avx512-check.sh
2879@@ -3,7 +3,7 @@
2880 # Copyright(c) 2020 Intel Corporation
2881
2882 AS=${AS:-as}
2883-OBJFILE=$(mktemp -t dpdk.binutils-check.XXXXXX.o)
2884+OBJFILE=$(mktemp -t dpdk.binutils-check.XXXXXX)
2885 trap 'rm -f "$OBJFILE"' EXIT
2886 # from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028
2887 GATHER_PARAMS='0x8(,%ymm1,1),%ymm0{%k2}'
2888diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
2889index e407553..83b3a01 100755
2890--- a/buildtools/check-symbols.sh
2891+++ b/buildtools/check-symbols.sh
2892@@ -18,7 +18,7 @@ then
2893 exit 0
2894 fi
2895
2896-DUMPFILE=$(mktemp -t dpdk.${0##*/}.XXX.objdump)
2897+DUMPFILE=$(mktemp -t dpdk.${0##*/}.objdump.XXXXXX)
2898 trap 'rm -f "$DUMPFILE"' EXIT
2899 objdump -t $OBJFILE >$DUMPFILE
2900
2901diff --git a/buildtools/list-dir-globs.py b/buildtools/list-dir-globs.py
2902index 80b5e80..f5f7d73 100755
2903--- a/buildtools/list-dir-globs.py
2904+++ b/buildtools/list-dir-globs.py
2905@@ -16,4 +16,4 @@ root = os.path.join(os.getenv('MESON_SOURCE_ROOT', '.'),
2906 for path in sys.argv[1].split(','):
2907 for p in iglob(os.path.join(root, path)):
2908 if os.path.isdir(p):
2909- print(os.path.relpath(p))
2910+ print(os.path.relpath(p).replace('\\', '/'))
2911diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
2912index 5509b4a..3bf9bd6 100755
2913--- a/buildtools/map-list-symbol.sh
2914+++ b/buildtools/map-list-symbol.sh
2915@@ -44,7 +44,7 @@ for file in $@; do
2916 ret = 1;
2917 }
2918 }
2919- /^.*{/ {
2920+ /^.*\{/ {
2921 if ("'$section'" == "all" || $1 == "'$section'") {
2922 current_section = $1;
2923 }
2924diff --git a/buildtools/meson.build b/buildtools/meson.build
2925index 04808da..cfad51f 100644
2926--- a/buildtools/meson.build
2927+++ b/buildtools/meson.build
2928@@ -3,17 +3,17 @@
2929
2930 pkgconf = find_program('pkg-config', 'pkgconf', required: false)
2931 pmdinfo = find_program('gen-pmdinfo-cfile.sh')
2932-list_dir_globs = find_program('list-dir-globs.py')
2933 check_symbols = find_program('check-symbols.sh')
2934 ldflags_ibverbs_static = find_program('options-ibverbs-static.sh')
2935 binutils_avx512_check = find_program('binutils-avx512-check.sh')
2936
2937-# set up map-to-win script using python, either built-in or external
2938 python3 = import('python').find_installation(required: false)
2939 if python3.found()
2940 py3 = [python3]
2941 else
2942 py3 = ['meson', 'runpython']
2943 endif
2944+echo = py3 + ['-c', 'import sys; print(*sys.argv[1:])']
2945+list_dir_globs = py3 + files('list-dir-globs.py')
2946 map_to_win_cmd = py3 + files('map_to_win.py')
2947 sphinx_wrapper = py3 + files('call-sphinx-build.py')
2948diff --git a/buildtools/symlink-drivers-solibs.py b/buildtools/symlink-drivers-solibs.py
2949new file mode 100644
2950index 0000000..9c99950
2951--- /dev/null
2952+++ b/buildtools/symlink-drivers-solibs.py
2953@@ -0,0 +1,49 @@
2954+#!/usr/bin/env python3
2955+# SPDX-License-Identifier: BSD-3-Clause
2956+# Copyright(c) 2021 Intel Corporation
2957+
2958+import os
2959+import sys
2960+import glob
2961+import shutil
2962+
2963+# post-install script for meson/ninja builds to symlink the PMDs stored in
2964+# $libdir/dpdk/pmds-*/ to $libdir. This is needed as some PMDs depend on
2965+# others, e.g. PCI device PMDs depending on the PCI bus driver.
2966+
2967+# parameters to script are paths relative to install prefix:
2968+# 1. directory for installed regular libs e.g. lib64
2969+# 2. subdirectory of libdir where the PMDs are
2970+# 3. directory for installed regular binaries e.g. bin
2971+
2972+os.chdir(os.environ['MESON_INSTALL_DESTDIR_PREFIX'])
2973+
2974+lib_dir = sys.argv[1]
2975+pmd_subdir = sys.argv[2]
2976+bin_dir = sys.argv[3]
2977+pmd_dir = os.path.join(lib_dir, pmd_subdir)
2978+
2979+# copy Windows PMDs to avoid any issues with symlinks since the
2980+# build could be a cross-compilation under WSL, Msys or Cygnus.
2981+# the filenames are dependent upon the specific toolchain in use.
2982+
2983+def copy_pmd_files(pattern, to_dir):
2984+ for file in glob.glob(os.path.join(pmd_dir, pattern)):
2985+ to = os.path.join(to_dir, os.path.basename(file))
2986+ shutil.copy2(file, to)
2987+ print(to + ' -> ' + file)
2988+
2989+copy_pmd_files('*rte_*.dll', bin_dir)
2990+copy_pmd_files('*rte_*.pdb', bin_dir)
2991+copy_pmd_files('*rte_*.lib', lib_dir)
2992+copy_pmd_files('*rte_*.dll.a', lib_dir)
2993+
2994+# symlink shared objects
2995+
2996+os.chdir(lib_dir)
2997+for file in glob.glob(os.path.join(pmd_subdir, 'librte_*.so*')):
2998+ to = os.path.basename(file)
2999+ if os.path.exists(to):
3000+ os.remove(to)
3001+ os.symlink(file, to)
3002+ print(to + ' -> ' + file)
3003diff --git a/config/meson.build b/config/meson.build
3004index 2f150de..b2734fc 100644
3005--- a/config/meson.build
3006+++ b/config/meson.build
3007@@ -61,6 +61,10 @@ if not is_windows
3008 meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',
3009 get_option('libdir'),
3010 pmd_subdir_opt)
3011+elif meson.version().version_compare('>=0.55.0')
3012+ # 0.55.0 is required to use external program with add_install_script
3013+ meson.add_install_script(py3, '../buildtools/symlink-drivers-solibs.py',
3014+ get_option('libdir'), pmd_subdir_opt, get_option('bindir'))
3015 endif
3016
3017 # set the machine type and cflags for it
3018@@ -125,11 +129,8 @@ if cc.find_library('m', required : false).found()
3019 dpdk_extra_ldflags += '-lm'
3020 endif
3021
3022-# for linux link against dl, for bsd execinfo
3023 if is_linux
3024 link_lib = 'dl'
3025-elif is_freebsd
3026- link_lib = 'execinfo'
3027 else
3028 link_lib = ''
3029 endif
3030@@ -159,6 +160,12 @@ if fdt_dep.found() and cc.has_header('fdt.h')
3031 dpdk_extra_ldflags += '-lfdt'
3032 endif
3033
3034+libexecinfo = cc.find_library('libexecinfo', required: false)
3035+if libexecinfo.found() and cc.has_header('execinfo.h')
3036+ add_project_link_arguments('-lexecinfo', language: 'c')
3037+ dpdk_extra_ldflags += '-lexecinfo'
3038+endif
3039+
3040 # check for libbsd
3041 libbsd = dependency('libbsd', required: false, method: 'pkg-config')
3042 if libbsd.found()
3043diff --git a/config/ppc/meson.build b/config/ppc/meson.build
3044index 0d8da87..ed6ea07 100644
3045--- a/config/ppc/meson.build
3046+++ b/config/ppc/meson.build
3047@@ -17,7 +17,18 @@ if not power9_supported
3048 dpdk_conf.set('RTE_MACHINE','power8')
3049 endif
3050
3051-# overrides specific to ppc64
3052-dpdk_conf.set('RTE_MAX_LCORE', 1536)
3053-dpdk_conf.set('RTE_MAX_NUMA_NODES', 32)
3054+# Certain POWER9 systems can scale as high as 1536 LCORES, but setting such a
3055+# high value can waste memory, cause timeouts in time limited autotests, and is
3056+# unlikely to be used in many production situations. Similarly, keeping the
3057+# default 64 LCORES seems too small as most POWER9 dual socket systems will have
3058+# at least 128 LCORES available. Set RTE_MAX_LCORE to 128 for POWER systems as
3059+# a compromise.
3060+dpdk_conf.set('RTE_MAX_LCORE', 128)
3061+
3062+# POWER systems do not allocate NUMA nodes sequentially. A dual socket system
3063+# will have CPUs associated with NUMA nodes 0 & 8, so ensure that the second
3064+# NUMA node will be supported by setting RTE_MAX_NUMA_NODES to 16. High end
3065+# systems can scale even higher with as many as 32 NUMA nodes.
3066+dpdk_conf.set('RTE_MAX_NUMA_NODES', 16)
3067+
3068 dpdk_conf.set('RTE_CACHE_LINE_SIZE', 128)
3069diff --git a/debian/changelog b/debian/changelog
3070index 39161b3..54eb660 100644
3071--- a/debian/changelog
3072+++ b/debian/changelog
3073@@ -1,3 +1,26 @@
3074+dpdk (20.11.3-0ubuntu0.21.04.2) hirsute; urgency=medium
3075+
3076+ * Skip flaky self-tests to make the tests more reliable (LP: #1939861)
3077+ - d/p/disable_ppc64_autopkgtest_fails.patch: skip known false-positives
3078+ - d/p/disable_armhf_autopkgtest_fails.patch: disable arm failures that do
3079+ not represent regressions
3080+ - d/p/disable_autopkgtest_fails.patch: disable failures that do not
3081+ represent regressions
3082+ - Add disable_lcores_autotest_ppc.patch to fix ppc64el autopkgtest
3083+
3084+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 08 Sep 2021 09:00:48 +0200
3085+
3086+dpdk (20.11.3-0ubuntu0.21.04.1) hirsute; urgency=medium
3087+
3088+ * Merge LTS stable release 20.11.3 (LP: #1940913)
3089+ Release notes are available at:
3090+ https://doc.dpdk.org/guides-20.11/rel_notes/release_20_11.html#id1
3091+ - Remove test-catch-coredumps.patch [now part of upstream]
3092+ * d/p/u/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch: fix issues
3093+ with 25G AOC cables (LP: #1940957)
3094+
3095+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Tue, 24 Aug 2021 12:08:16 +0200
3096+
3097 dpdk (20.11.1-1) experimental; urgency=medium
3098
3099 * Merge LTS stable release 20.11.1
3100diff --git a/debian/control b/debian/control
3101index 191043e..9e57812 100644
3102--- a/debian/control
3103+++ b/debian/control
3104@@ -1,6 +1,7 @@
3105 Source: dpdk
3106 Priority: optional
3107-Maintainer: Debian DPDK Maintainers <pkg-dpdk-devel@lists.alioth.debian.org>
3108+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
3109+XSBC-Original-Maintainer: Debian DPDK Maintainers <pkg-dpdk-devel@lists.alioth.debian.org>
3110 Uploaders: Luca Boccassi <bluca@debian.org>,
3111 Christian Ehrhardt <christian.ehrhardt@canonical.com>,
3112 Santiago Ruano Rincón <santiagorr@riseup.net>,
3113diff --git a/debian/patches/disable_armhf_autopkgtest_fails.patch b/debian/patches/disable_armhf_autopkgtest_fails.patch
3114new file mode 100644
3115index 0000000..3a714c1
3116--- /dev/null
3117+++ b/debian/patches/disable_armhf_autopkgtest_fails.patch
3118@@ -0,0 +1,32 @@
3119+Description: Skip tests failing in arm test environment
3120+ These tests generally work but fail in a Ubuntu arm autopkgtest environment.
3121+ Skip those as they do not represent real regressions.
3122+Forwarded: no
3123+X-Not-Forwarded-Reason: This only applies to autopkgtest environments
3124+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
3125+Last-Update: 2021-07-13
3126+--- a/app/test/meson.build
3127++++ b/app/test/meson.build
3128+@@ -228,10 +228,8 @@ fast_tests = [
3129+ ['per_lcore_autotest', false],
3130+ ['prefetch_autotest', true],
3131+ ['rcu_qsbr_autotest', false],
3132+- ['red_autotest', true],
3133+ ['rib_autotest', true],
3134+ ['rib6_autotest', true],
3135+- ['ring_autotest', true],
3136+ ['rwlock_test1_autotest', true],
3137+ ['rwlock_rda_autotest', true],
3138+ ['rwlock_rds_wrm_autotest', true],
3139+@@ -422,6 +420,11 @@ if arch_subdir != 'ppc'
3140+ fast_tests += [['lcores_autotest', true]]
3141+ endif
3142+
3143++# These tests consistently fail on arm (containerized) test environments
3144++if arch_subdir != 'arm'
3145++ fast_tests += [['red_autotest', true], ['ring_autotest', true]]
3146++endif
3147++
3148+ foreach d:test_deps
3149+ def_lib = get_option('default_library')
3150+ test_dep_objs += get_variable(def_lib + '_rte_' + d)
3151diff --git a/debian/patches/disable_autopkgtest_fails.patch b/debian/patches/disable_autopkgtest_fails.patch
3152new file mode 100644
3153index 0000000..24d15a6
3154--- /dev/null
3155+++ b/debian/patches/disable_autopkgtest_fails.patch
3156@@ -0,0 +1,49 @@
3157+Description: Skip tests failing in test environment
3158+ These tests generally work but fail in a Ubuntu autopkgtest environment.
3159+ This is consistent across all architectures.
3160+ Skip those as they do not represent real regressions.
3161+Forwarded: no
3162+X-Not-Forwarded-Reason: This only applies to autopkgtest environments
3163+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
3164+Last-Update: 2021-07-13
3165+--- a/app/test/meson.build
3166++++ b/app/test/meson.build
3167+@@ -210,7 +210,7 @@ fast_tests = [
3168+ ['fib6_autotest', true],
3169+ ['func_reentrancy_autotest', false],
3170+ ['flow_classify_autotest', false],
3171+- ['hash_autotest', true],
3172++ ['hash_autotest', false],
3173+ ['interrupt_autotest', true],
3174+ ['ipfrag_autotest', false],
3175+ ['logs_autotest', true],
3176+@@ -225,9 +225,9 @@ fast_tests = [
3177+ ['memzone_autotest', false],
3178+ ['meter_autotest', true],
3179+ ['multiprocess_autotest', false],
3180+- ['per_lcore_autotest', true],
3181++ ['per_lcore_autotest', false],
3182+ ['prefetch_autotest', true],
3183+- ['rcu_qsbr_autotest', true],
3184++ ['rcu_qsbr_autotest', false],
3185+ ['red_autotest', true],
3186+ ['rib_autotest', true],
3187+ ['rib6_autotest', true],
3188+@@ -242,7 +242,7 @@ fast_tests = [
3189+ ['stack_autotest', false],
3190+ ['stack_lf_autotest', false],
3191+ ['string_autotest', true],
3192+- ['table_autotest', true],
3193++ ['table_autotest', false],
3194+ ['tailq_autotest', true],
3195+ ['timer_autotest', false],
3196+ ['user_delay_us', true],
3197+@@ -262,7 +262,7 @@ fast_tests = [
3198+ ['power_autotest', true],
3199+ ['power_kvm_vm_autotest', false],
3200+ ['reorder_autotest', true],
3201+- ['service_autotest', true],
3202++ ['service_autotest', false],
3203+ ['thash_autotest', true],
3204+ ['trace_autotest', true],
3205+ ]
3206diff --git a/debian/patches/disable_lcores_autotest_ppc.patch b/debian/patches/disable_lcores_autotest_ppc.patch
3207new file mode 100644
3208index 0000000..f4b34bc
3209--- /dev/null
3210+++ b/debian/patches/disable_lcores_autotest_ppc.patch
3211@@ -0,0 +1,26 @@
3212+Description: autotest: disable lcores_autotest on ppc
3213+ This test consistently times out on ppc64 builds. Disable it.
3214+Author: Luca Boccassi <bluca@debian.org>
3215+Forwarded: yes, https://patchwork.dpdk.org/project/dpdk/patch/20210420114508.397249-1-luca.boccassi@gmail.com/
3216+--- a/app/test/meson.build
3217++++ b/app/test/meson.build
3218+@@ -213,7 +213,6 @@
3219+ ['hash_autotest', true],
3220+ ['interrupt_autotest', true],
3221+ ['ipfrag_autotest', false],
3222+- ['lcores_autotest', true],
3223+ ['logs_autotest', true],
3224+ ['lpm_autotest', true],
3225+ ['lpm6_autotest', true],
3226+@@ -420,6 +419,11 @@
3227+ test_deps += 'crypto_scheduler'
3228+ endif
3229+
3230++# This test consistently times out on ppc64
3231++if arch_subdir != 'ppc'
3232++ fast_tests += [['lcores_autotest', true]]
3233++endif
3234++
3235+ foreach d:test_deps
3236+ def_lib = get_option('default_library')
3237+ test_dep_objs += get_variable(def_lib + '_rte_' + d)
3238diff --git a/debian/patches/disable_ppc64_autopkgtest_fails.patch b/debian/patches/disable_ppc64_autopkgtest_fails.patch
3239new file mode 100644
3240index 0000000..cfa3632
3241--- /dev/null
3242+++ b/debian/patches/disable_ppc64_autopkgtest_fails.patch
3243@@ -0,0 +1,27 @@
3244+Description: Skip tests failing in ppc64 test environment
3245+ It turned out that this regressed in release and acl_autotest is
3246+ unrelable on ppc64.
3247+ Skip it as they do not represent real regressions in or against DPDK.
3248+Forwarded: no
3249+X-Not-Forwarded-Reason: This only applies to autopkgtest environments
3250+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
3251+Last-Update: 2021-08-13
3252+--- a/app/test/meson.build
3253++++ b/app/test/meson.build
3254+@@ -180,7 +180,6 @@ test_deps = ['acl',
3255+ # Each test is marked with flag true/false
3256+ # to indicate whether it can run in no-huge mode.
3257+ fast_tests = [
3258+- ['acl_autotest', true],
3259+ ['alarm_autotest', false],
3260+ ['atomic_autotest', false],
3261+ ['bitops_autotest', true],
3262+@@ -417,7 +416,7 @@ endif
3263+
3264+ # This test consistently times out on ppc64
3265+ if arch_subdir != 'ppc'
3266+- fast_tests += [['lcores_autotest', true]]
3267++ fast_tests += [['lcores_autotest', true], ['acl_autotest', true]]
3268+ endif
3269+
3270+ # These tests consistently fail on arm (containerized) test environments
3271diff --git a/debian/patches/series b/debian/patches/series
3272index 607724b..8438c98 100644
3273--- a/debian/patches/series
3274+++ b/debian/patches/series
3275@@ -1 +1,5 @@
3276-test-catch-coredumps.patch
3277+ubuntu/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch
3278+disable_lcores_autotest_ppc.patch
3279+disable_autopkgtest_fails.patch
3280+disable_armhf_autopkgtest_fails.patch
3281+disable_ppc64_autopkgtest_fails.patch
3282diff --git a/debian/patches/test-catch-coredumps.patch b/debian/patches/test-catch-coredumps.patch
3283deleted file mode 100644
3284index a686f3e..0000000
3285--- a/debian/patches/test-catch-coredumps.patch
3286+++ /dev/null
3287@@ -1,66 +0,0 @@
3288-Author: David Marchand <david.marchand@redhat.com>
3289-Description: Parts of the unit tests code rely on forked/secondary processes
3290- (expectedly) failing.
3291- A crash in those situations could be missed so add a check on coredumps
3292- presence after unit tests have run.
3293- When unit tests fail, it can also help checking for coredumps as it
3294- could give more insights on what happened.
3295-
3296- In some situations (like explicit call to rte_panic), coredump generation
3297- must be disabled to avoid false positives.
3298-Origin: https://patchwork.dpdk.org/project/dpdk/patch/20210125150539.27537-1-david.marchand@redhat.com/
3299---- a/app/test/test_debug.c
3300-+++ b/app/test/test_debug.c
3301-@@ -4,6 +4,8 @@
3302-
3303- #include <stdio.h>
3304- #include <stdint.h>
3305-+#include <sys/resource.h>
3306-+#include <sys/time.h>
3307- #include <sys/wait.h>
3308- #include <unistd.h>
3309-
3310-@@ -28,9 +30,14 @@
3311-
3312- pid = fork();
3313-
3314-- if (pid == 0)
3315-+ if (pid == 0) {
3316-+ struct rlimit rl;
3317-+
3318-+ /* No need to generate a coredump when panicking. */
3319-+ rl.rlim_cur = rl.rlim_max = 0;
3320-+ setrlimit(RLIMIT_CORE, &rl);
3321- rte_panic("Test Debug\n");
3322-- else if (pid < 0){
3323-+ } else if (pid < 0) {
3324- printf("Fork Failed\n");
3325- return -1;
3326- }
3327---- a/app/test/test_mbuf.c
3328-+++ b/app/test/test_mbuf.c
3329-@@ -1174,6 +1174,8 @@
3330- }
3331-
3332- #include <unistd.h>
3333-+#include <sys/resource.h>
3334-+#include <sys/time.h>
3335- #include <sys/wait.h>
3336-
3337- /* use fork() to test mbuf errors panic */
3338-@@ -1186,9 +1188,14 @@
3339- pid = fork();
3340-
3341- if (pid == 0) {
3342-+ struct rlimit rl;
3343-+
3344-+ /* No need to generate a coredump when panicking. */
3345-+ rl.rlim_cur = rl.rlim_max = 0;
3346-+ setrlimit(RLIMIT_CORE, &rl);
3347- rte_mbuf_sanity_check(buf, 1); /* should panic */
3348- exit(0); /* return normally if it doesn't panic */
3349-- } else if (pid < 0){
3350-+ } else if (pid < 0) {
3351- printf("Fork Failed\n");
3352- return -1;
3353- }
3354diff --git a/debian/patches/ubuntu/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch b/debian/patches/ubuntu/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch
3355new file mode 100644
3356index 0000000..8606792
3357--- /dev/null
3358+++ b/debian/patches/ubuntu/lp-1940957-net-i40e-support-25G-AOC-ACC-cables.patch
3359@@ -0,0 +1,42 @@
3360+From f81d60e607bb8c13fcb13450e85d74721f1d9c8f Mon Sep 17 00:00:00 2001
3361+From: Yury Kylulin <yury.kylulin@intel.com>
3362+Date: Tue, 13 Apr 2021 18:29:50 +0300
3363+Subject: [PATCH] net/i40e: support 25G AOC/ACC cables
3364+
3365+[ upstream commit b1daa3461429e7674206a714c17adca65e9b44b4 ]
3366+
3367+Enable additional PHY types (25G-AOC and 25G-ACC) for set PHY config
3368+command.
3369+
3370+Ubuntu bug: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1940957
3371+Cc: stable@dpdk.org
3372+
3373+Signed-off-by: Yury Kylulin <yury.kylulin@intel.com>
3374+Tested-by: Ashish Paul <apaul@juniper.net>
3375+Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
3376+
3377+Origin: upstream, https://github.com/cpaelzer/dpdk-stable-queue/commit/f81d60e607bb8c13fcb13450e85d74721f1d9c8f
3378+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1940957
3379+Last-Update: 2021-09-06
3380+
3381+---
3382+ drivers/net/i40e/i40e_ethdev.c | 3 ++-
3383+ 1 file changed, 2 insertions(+), 1 deletion(-)
3384+
3385+diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
3386+index 508f90595f..0c896ea915 100644
3387+--- a/drivers/net/i40e/i40e_ethdev.c
3388++++ b/drivers/net/i40e/i40e_ethdev.c
3389+@@ -2264,7 +2264,8 @@ i40e_phy_conf_link(struct i40e_hw *hw,
3390+ phy_conf.phy_type = is_up ? cpu_to_le32(phy_type_mask) : 0;
3391+ phy_conf.phy_type_ext = is_up ? (I40E_AQ_PHY_TYPE_EXT_25G_KR |
3392+ I40E_AQ_PHY_TYPE_EXT_25G_CR | I40E_AQ_PHY_TYPE_EXT_25G_SR |
3393+- I40E_AQ_PHY_TYPE_EXT_25G_LR) : 0;
3394++ I40E_AQ_PHY_TYPE_EXT_25G_LR | I40E_AQ_PHY_TYPE_EXT_25G_AOC |
3395++ I40E_AQ_PHY_TYPE_EXT_25G_ACC) : 0;
3396+ phy_conf.fec_config = phy_ab.fec_cfg_curr_mod_ext_info;
3397+ phy_conf.eee_capability = phy_ab.eee_capability;
3398+ phy_conf.eeer = phy_ab.eeer_val;
3399+--
3400+2.32.0
3401+
3402diff --git a/devtools/check-maintainers.sh b/devtools/check-maintainers.sh
3403index df3f740..71697bb 100755
3404--- a/devtools/check-maintainers.sh
3405+++ b/devtools/check-maintainers.sh
3406@@ -15,10 +15,10 @@ files () # <path> [<path> ...]
3407 if [ -z "$1" ] ; then
3408 return
3409 fi
3410- if [ -d .git ] ; then
3411+ if [ -r .git ] ; then
3412 git ls-files "$1"
3413 else
3414- find "$1" -type f |
3415+ find $1 -type f |
3416 sed 's,^\./,,'
3417 fi |
3418 # if not ended by /
3419diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
3420index 0e097ee..e07682a 100755
3421--- a/devtools/check-symbol-maps.sh
3422+++ b/devtools/check-symbol-maps.sh
3423@@ -20,8 +20,7 @@ find_orphan_symbols ()
3424 else
3425 symsrc=$sym
3426 fi
3427- if ! grep -q -r --exclude=$(basename $map) \
3428- -w $symsrc $(dirname $map) ; then
3429+ if [ -z "$(grep -rlw $symsrc $(dirname $map) | grep -v $map)" ] ; then
3430 echo "$map: $sym"
3431 fi
3432 done
3433diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
3434index 78a408e..db4c7d8 100755
3435--- a/devtools/checkpatches.sh
3436+++ b/devtools/checkpatches.sh
3437@@ -118,8 +118,7 @@ check_forbidden_additions() { # <patch>
3438 -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
3439 "$1" || res=1
3440
3441- # svg figures must be included with wildcard extension
3442- # because of png conversion for pdf docs
3443+ # SVG must be included with wildcard extension to allow conversion
3444 awk -v FOLDERS='doc' \
3445 -v EXPRESSIONS='::[[:space:]]*[^[:space:]]*\\.svg' \
3446 -v RET_ON_FAIL=1 \
3447diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
3448index 5c883b6..a536bcb 100644
3449--- a/doc/api/doxy-api.conf.in
3450+++ b/doc/api/doxy-api.conf.in
3451@@ -80,7 +80,8 @@ INPUT += @API_EXAMPLES@
3452 FILE_PATTERNS = rte_*.h \
3453 cmdline.h
3454 PREDEFINED = __DOXYGEN__ \
3455- VFIO_PRESENT \
3456+ RTE_HAS_CPUSET \
3457+ VFIO_PRESENT \
3458 __attribute__(x)=
3459
3460 OPTIMIZE_OUTPUT_FOR_C = YES
3461diff --git a/doc/guides/conf.py b/doc/guides/conf.py
3462index aceeb62..894d81c 100644
3463--- a/doc/guides/conf.py
3464+++ b/doc/guides/conf.py
3465@@ -5,8 +5,6 @@
3466 from docutils import nodes
3467 from distutils.version import LooseVersion
3468 from sphinx import __version__ as sphinx_version
3469-from sphinx.highlighting import PygmentsBridge
3470-from pygments.formatters.latex import LatexFormatter
3471 from os import listdir
3472 from os import environ
3473 from os.path import basename
3474@@ -20,7 +18,6 @@ try:
3475 import sphinx_rtd_theme
3476
3477 html_theme = "sphinx_rtd_theme"
3478- html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
3479 except:
3480 print('Install the sphinx ReadTheDocs theme for improved html documentation '
3481 'layout: https://sphinx-rtd-theme.readthedocs.io/',
3482@@ -31,8 +28,10 @@ stop_on_error = ('-W' in argv)
3483
3484 project = 'Data Plane Development Kit'
3485 html_logo = '../logo/DPDK_logo_vertical_rev_small.png'
3486-latex_logo = '../logo/DPDK_logo_horizontal_tag.png'
3487-html_add_permalinks = ""
3488+if LooseVersion(sphinx_version) >= LooseVersion('3.5'):
3489+ html_permalinks = False
3490+else:
3491+ html_add_permalinks = ""
3492 html_show_copyright = False
3493 highlight_language = 'none'
3494
3495@@ -47,46 +46,6 @@ feature_str_len = 30
3496 # Figures, tables and code-blocks automatically numbered if they have caption
3497 numfig = True
3498
3499-latex_documents = [
3500- ('index',
3501- 'doc.tex',
3502- '',
3503- '',
3504- 'manual')
3505-]
3506-
3507-# Latex directives to be included directly in the latex/pdf docs.
3508-custom_latex_preamble = r"""
3509-\usepackage{textalpha}
3510-\RecustomVerbatimEnvironment{Verbatim}{Verbatim}{xleftmargin=5mm}
3511-\usepackage{etoolbox}
3512-\robustify\(
3513-\robustify\)
3514-"""
3515-
3516-# Configuration for the latex/pdf docs.
3517-latex_elements = {
3518- 'papersize': 'a4paper',
3519- 'pointsize': '11pt',
3520- # remove blank pages
3521- 'classoptions': ',openany,oneside',
3522- 'babel': '\\usepackage[english]{babel}',
3523- # customize Latex formatting
3524- 'preamble': custom_latex_preamble
3525-}
3526-
3527-
3528-# Override the default Latex formatter in order to modify the
3529-# code/verbatim blocks.
3530-class CustomLatexFormatter(LatexFormatter):
3531- def __init__(self, **options):
3532- super(CustomLatexFormatter, self).__init__(**options)
3533- # Use the second smallest font size for code/verbatim blocks.
3534- self.verboptions = r'formatcom=\footnotesize'
3535-
3536-# Replace the default latex formatter.
3537-PygmentsBridge.latex_formatter = CustomLatexFormatter
3538-
3539 # Configuration for man pages
3540 man_pages = [("testpmd_app_ug/run_app", "testpmd",
3541 "tests for dpdk pmds", "", 1),
3542diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
3543index bb3f3ef..a2a8130 100644
3544--- a/doc/guides/contributing/coding_style.rst
3545+++ b/doc/guides/contributing/coding_style.rst
3546@@ -55,7 +55,7 @@ License Header
3547 ~~~~~~~~~~~~~~
3548
3549 Each file must begin with a special comment containing the
3550-`Software Package Data Exchange (SPDX) License Identfier <https://spdx.org/using-spdx-license-identifier>`_.
3551+`Software Package Data Exchange (SPDX) License Identifier <https://spdx.org/using-spdx-license-identifier>`_.
3552
3553 Generally this is the BSD License, except for code granted special exceptions.
3554 The SPDX licences identifier is sufficient, a file should not contain
3555diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
3556index a4e6be6..1e998fd 100644
3557--- a/doc/guides/contributing/documentation.rst
3558+++ b/doc/guides/contributing/documentation.rst
3559@@ -8,7 +8,7 @@ DPDK Documentation Guidelines
3560
3561 This document outlines the guidelines for writing the DPDK Guides and API documentation in RST and Doxygen format.
3562
3563-It also explains the structure of the DPDK documentation and shows how to build the Html and PDF versions of the documents.
3564+It also explains the structure of the DPDK documentation and how to build it.
3565
3566
3567 Structure of the Documentation
3568@@ -136,17 +136,11 @@ Building the Documentation
3569 Dependencies
3570 ~~~~~~~~~~~~
3571
3572-
3573 The following dependencies must be installed to build the documentation:
3574
3575 * Doxygen.
3576-
3577 * Sphinx (also called python-sphinx).
3578
3579-* TexLive (at least TexLive-core and the extra Latex support).
3580-
3581-* Inkscape.
3582-
3583 `Doxygen`_ generates documentation from commented source code.
3584 It can be installed as follows:
3585
3586@@ -158,7 +152,7 @@ It can be installed as follows:
3587 # Red Hat/Fedora.
3588 sudo dnf -y install doxygen
3589
3590-`Sphinx`_ is a Python documentation tool for converting RST files to Html or to PDF (via LaTeX).
3591+`Sphinx`_ is a Python documentation tool for converting RST files to HTML.
3592 For full support with figure and table captioning the latest version of Sphinx can be installed as follows:
3593
3594 .. code-block:: console
3595@@ -177,43 +171,6 @@ For further information on getting started with Sphinx see the
3596 To get full support for Figure and Table numbering it is best to install Sphinx 1.3.1 or later.
3597
3598
3599-`Inkscape`_ is a vector based graphics program which is used to create SVG images and also to convert SVG images to PDF images.
3600-It can be installed as follows:
3601-
3602-.. code-block:: console
3603-
3604- # Ubuntu/Debian.
3605- sudo apt-get -y install inkscape
3606-
3607- # Red Hat/Fedora.
3608- sudo dnf -y install inkscape
3609-
3610-`TexLive <http://www.tug.org/texlive/>`_ is an installation package for Tex/LaTeX.
3611-It is used to generate the PDF versions of the documentation.
3612-The main required packages can be installed as follows:
3613-
3614-.. code-block:: console
3615-
3616- # Ubuntu/Debian.
3617- sudo apt-get -y install texlive-latex-extra texlive-lang-greek
3618-
3619- # Red Hat/Fedora, selective install.
3620- sudo dnf -y install texlive-collection-latexextra texlive-greek-fontenc
3621-
3622-`Latexmk <http://personal.psu.edu/jcc8/software/latexmk-jcc/>`_ is a perl script
3623-for running LaTeX for resolving cross references,
3624-and it also runs auxiliary programs like bibtex, makeindex if necessary, and dvips.
3625-It has also a number of other useful capabilities (see man 1 latexmk).
3626-
3627-.. code-block:: console
3628-
3629- # Ubuntu/Debian.
3630- sudo apt-get -y install latexmk
3631-
3632- # Red Hat/Fedora.
3633- sudo dnf -y install latexmk
3634-
3635-
3636 Build commands
3637 ~~~~~~~~~~~~~~
3638
3639@@ -225,16 +182,7 @@ To build the documentation::
3640
3641 See :doc:`../linux_gsg/build_dpdk` for more detail on compiling DPDK with meson.
3642
3643-The output is generated in the ``build`` directory::
3644-
3645- build/doc
3646- |-- html
3647- | |-- api
3648- | +-- guides
3649- |
3650- +-- pdf
3651- +-- guides
3652-
3653+The output is generated in the directories ``build/doc/html/{api,guides}``.
3654
3655 .. Note::
3656
3657@@ -259,7 +207,8 @@ Here are some guidelines in relation to the style of the documentation:
3658 RST Guidelines
3659 --------------
3660
3661-The RST (reStructuredText) format is a plain text markup format that can be converted to Html, PDF or other formats.
3662+The RST (reStructuredText) format is a plain text markup format
3663+that can be converted to HTML or other formats.
3664 It is most closely associated with Python but it can be used to document any language.
3665 It is used in DPDK to document everything apart from the API.
3666
3667@@ -282,9 +231,8 @@ Line Length
3668 words. Multiple sentences which are not separated by a blank line are joined
3669 automatically into paragraphs.
3670
3671-* Lines in literal blocks **must** be less than 80 characters since
3672- they are not wrapped by the document formatters and can exceed the page width
3673- in PDF documents.
3674+* Lines in literal blocks should be less than 80 characters
3675+ since they are not wrapped by the document formatters.
3676
3677 Long literal command lines can be shown wrapped with backslashes. For
3678 example::
3679@@ -437,8 +385,8 @@ Code and Literal block sections
3680 * The default encoding for a literal block using the simplified ``::``
3681 directive is ``none``.
3682
3683-* Lines in literal blocks must be less than 80 characters since they can exceed the page width when converted to PDF documentation.
3684- For long literal lines that exceed that limit try to wrap the text at sensible locations.
3685+* Lines in literal blocks should be less than 80 characters.
3686+ For long literal lines, try to wrap the text at sensible locations.
3687 For example a long command line could be documented like this and still work if copied directly from the docs::
3688
3689 ./<build_dir>/app/dpdk-testpmd -l 0-2 -n3 --vdev=net_pcap0,iface=eth0 \
3690@@ -503,7 +451,7 @@ Tables
3691 ~~~~~~
3692
3693 * RST tables should be used sparingly.
3694- They are hard to format and to edit, they are often rendered incorrectly in PDF format, and the same information
3695+ They are hard to format and to edit, and the same information
3696 can usually be shown just as clearly with a definition or bullet list.
3697
3698 * Tables in the documentation should be formatted as follows:
3699@@ -533,8 +481,6 @@ Tables
3700
3701 The QOS configuration is shown in :numref:`table_qos_pipes`.
3702
3703-* Tables should not include merged cells since they are not supported by the PDF renderer.
3704-
3705
3706 .. _links:
3707
3708diff --git a/doc/guides/cryptodevs/caam_jr.rst b/doc/guides/cryptodevs/caam_jr.rst
3709index 5ef33ae..d7b0f14 100644
3710--- a/doc/guides/cryptodevs/caam_jr.rst
3711+++ b/doc/guides/cryptodevs/caam_jr.rst
3712@@ -24,7 +24,7 @@ accelerators. This provides significant improvement to system level performance.
3713
3714 SEC HW accelerator above 4.x+ version are also known as CAAM.
3715
3716-caam_jr PMD is one of DPAA drivers which uses uio interface to interact with
3717+caam_jr PMD is one of DPAA drivers which uses UIO interface to interact with
3718 Linux kernel for configure and destroy the device instance (ring).
3719
3720
3721diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
3722index cf16f03..ea5c03b 100644
3723--- a/doc/guides/cryptodevs/qat.rst
3724+++ b/doc/guides/cryptodevs/qat.rst
3725@@ -562,7 +562,7 @@ Binding the available VFs to the vfio-pci driver
3726
3727 Note:
3728
3729-* Please note that due to security issues, the usage of older DPDK igb-uio
3730+* Please note that due to security issues, the usage of older DPDK igb_uio
3731 driver is not recommended. This document shows how to use the more secure
3732 vfio-pci driver.
3733 * If QAT fails to bind to vfio-pci on Linux kernel 5.9+, please see the
3734diff --git a/doc/guides/cryptodevs/scheduler.rst b/doc/guides/cryptodevs/scheduler.rst
3735index 835d999..d08207f 100644
3736--- a/doc/guides/cryptodevs/scheduler.rst
3737+++ b/doc/guides/cryptodevs/scheduler.rst
3738@@ -118,7 +118,7 @@ operation:
3739 than the designated threshold, otherwise it will be handled by the secondary
3740 worker.
3741
3742- A typical usecase in this mode is with the QAT cryptodev as the primary and
3743+ A typical use case in this mode is with the QAT cryptodev as the primary and
3744 a software cryptodev as the secondary worker. This may help applications to
3745 process additional crypto workload than what the QAT cryptodev can handle on
3746 its own, by making use of the available CPU cycles to deal with smaller
3747diff --git a/doc/guides/cryptodevs/virtio.rst b/doc/guides/cryptodevs/virtio.rst
3748index 83d8e32..8b96446 100644
3749--- a/doc/guides/cryptodevs/virtio.rst
3750+++ b/doc/guides/cryptodevs/virtio.rst
3751@@ -63,7 +63,7 @@ QEMU can then be started using the following parameters:
3752 -device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0
3753 [...]
3754
3755-Secondly bind the uio_generic driver for the virtio-crypto device.
3756+Secondly bind the uio_pci_generic driver for the virtio-crypto device.
3757 For example, 0000:00:04.0 is the domain, bus, device and function
3758 number of the virtio-crypto device:
3759
3760diff --git a/doc/guides/eventdevs/dlb2.rst b/doc/guides/eventdevs/dlb2.rst
3761index 94d2c77..1223219 100644
3762--- a/doc/guides/eventdevs/dlb2.rst
3763+++ b/doc/guides/eventdevs/dlb2.rst
3764@@ -179,19 +179,19 @@ pools' sizes are controlled by the nb_events_limit field in struct
3765 rte_event_dev_config. The load-balanced pool is sized to contain
3766 nb_events_limit credits, and the directed pool is sized to contain
3767 nb_events_limit/4 credits. The directed pool size can be overridden with the
3768-num_dir_credits vdev argument, like so:
3769+num_dir_credits devargs argument, like so:
3770
3771 .. code-block:: console
3772
3773- --vdev=dlb1_event,num_dir_credits=<value>
3774+ --allow ea:00.0,num_dir_credits=<value>
3775
3776 This can be used if the default allocation is too low or too high for the
3777-specific application needs. The PMD also supports a vdev arg that limits the
3778+specific application needs. The PMD also supports a devarg that limits the
3779 max_num_events reported by rte_event_dev_info_get():
3780
3781 .. code-block:: console
3782
3783- --vdev=dlb1_event,max_num_events=<value>
3784+ --allow ea:00.0,max_num_events=<value>
3785
3786 By default, max_num_events is reported as the total available load-balanced
3787 credits. If multiple DLB2-based applications are being used, it may be desirable
3788@@ -314,27 +314,6 @@ The PMD does not support the following configuration sequences:
3789 This sequence is not supported because the event device must be reconfigured
3790 before its ports or queues can be.
3791
3792-Deferred Scheduling
3793-~~~~~~~~~~~~~~~~~~~
3794-
3795-The DLB2 PMD's default behavior for managing a CQ is to "pop" the CQ once per
3796-dequeued event before returning from rte_event_dequeue_burst(). This frees the
3797-corresponding entries in the CQ, which enables the DLB2 to schedule more events
3798-to it.
3799-
3800-To support applications seeking finer-grained scheduling control -- for example
3801-deferring scheduling to get the best possible priority scheduling and
3802-load-balancing -- the PMD supports a deferred scheduling mode. In this mode,
3803-the CQ entry is not popped until the *subsequent* rte_event_dequeue_burst()
3804-call. This mode only applies to load-balanced event ports with dequeue depth of
3805-1.
3806-
3807-To enable deferred scheduling, use the defer_sched vdev argument like so:
3808-
3809- .. code-block:: console
3810-
3811- --vdev=dlb1_event,defer_sched=on
3812-
3813 Atomic Inflights Allocation
3814 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
3815
3816@@ -357,11 +336,11 @@ buffer space (e.g. if not all queues are used, or aren't used for atomic
3817 scheduling).
3818
3819 The PMD provides a dev arg to override the default per-queue allocation. To
3820-increase a vdev's per-queue atomic-inflight allocation to (for example) 64:
3821+increase per-queue atomic-inflight allocation to (for example) 64:
3822
3823 .. code-block:: console
3824
3825- --vdev=dlb1_event,atm_inflights=64
3826+ --allow ea:00.0,atm_inflights=64
3827
3828 QID Depth Threshold
3829 ~~~~~~~~~~~~~~~~~~~
3830@@ -384,9 +363,9 @@ shown below.
3831
3832 .. code-block:: console
3833
3834- --vdev=dlb2_event,qid_depth_thresh=all:<threshold_value>
3835- --vdev=dlb2_event,qid_depth_thresh=qidA-qidB:<threshold_value>
3836- --vdev=dlb2_event,qid_depth_thresh=qid:<threshold_value>
3837+ --allow ea:00.0,qid_depth_thresh=all:<threshold_value>
3838+ --allow ea:00.0,qid_depth_thresh=qidA-qidB:<threshold_value>
3839+ --allow ea:00.0,qid_depth_thresh=qid:<threshold_value>
3840
3841 Class of service
3842 ~~~~~~~~~~~~~~~~
3843@@ -408,4 +387,4 @@ Class of service can be specified in the devargs, as follows
3844
3845 .. code-block:: console
3846
3847- --vdev=dlb2_event,cos=<0..4>
3848+ --allow ea:00.0,cos=<0..4>
3849diff --git a/doc/guides/howto/pvp_reference_benchmark.rst b/doc/guides/howto/pvp_reference_benchmark.rst
3850index 553458d..484de3b 100644
3851--- a/doc/guides/howto/pvp_reference_benchmark.rst
3852+++ b/doc/guides/howto/pvp_reference_benchmark.rst
3853@@ -26,7 +26,7 @@ Setup overview
3854
3855 PVP setup using 2 NICs
3856
3857-In this diagram, each red arrow represents one logical core. This use-case
3858+In this diagram, each red arrow represents one logical core. This use case
3859 requires 6 dedicated logical cores. A forwarding configuration with a single
3860 NIC is also possible, requiring 3 logical cores.
3861
3862diff --git a/doc/guides/linux_gsg/linux_drivers.rst b/doc/guides/linux_gsg/linux_drivers.rst
3863index 90635a4..c6b6881 100644
3864--- a/doc/guides/linux_gsg/linux_drivers.rst
3865+++ b/doc/guides/linux_gsg/linux_drivers.rst
3866@@ -25,6 +25,16 @@ To make use of VFIO, the ``vfio-pci`` module must be loaded:
3867 VFIO kernel is usually present by default in all distributions,
3868 however please consult your distributions documentation to make sure that is the case.
3869
3870+For DMA mapping of either external memory or hugepages, VFIO interface is used.
3871+VFIO does not support partial unmap of once mapped memory. Hence DPDK's memory is
3872+mapped in hugepage granularity or system page granularity. Number of DMA
3873+mappings is limited by kernel with user locked memory limit of a process (rlimit)
3874+for system/hugepage memory. Another per-container overall limit applicable both
3875+for external memory and system memory was added in kernel 5.1 defined by
3876+VFIO module parameter ``dma_entry_limit`` with a default value of 64K.
3877+When application is out of DMA entries, these limits need to be adjusted to
3878+increase the allowed limit.
3879+
3880 Since Linux version 5.7,
3881 the ``vfio-pci`` module supports the creation of virtual functions.
3882 After the PF is bound to ``vfio-pci`` module,
3883diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst
3884index 9ad4f9f..788a6da 100644
3885--- a/doc/guides/nics/bnx2x.rst
3886+++ b/doc/guides/nics/bnx2x.rst
3887@@ -105,7 +105,7 @@ Jumbo: Limitation
3888 -----------------
3889
3890 Rx descriptor limit for number of segments per MTU is set to 1.
3891-PMD doesn't support Jumbo Rx scatter gather. Some applciations can
3892+PMD doesn't support Jumbo Rx scatter gather. Some applications can
3893 adjust mbuf_size based on this param and max_pkt_len.
3894
3895 For others, PMD detects the condition where Rx packet length cannot
3896diff --git a/doc/guides/nics/dpaa.rst b/doc/guides/nics/dpaa.rst
3897index 917482d..7355ec3 100644
3898--- a/doc/guides/nics/dpaa.rst
3899+++ b/doc/guides/nics/dpaa.rst
3900@@ -297,7 +297,7 @@ FMC - FMAN Configuration Tool
3901
3902
3903 The details can be found in FMC Doc at:
3904- `Frame Mnager Configuration Tool <https://www.nxp.com/docs/en/application-note/AN4760.pdf>`_.
3905+ `Frame Manager Configuration Tool <https://www.nxp.com/docs/en/application-note/AN4760.pdf>`_.
3906
3907 FMLIB
3908 ~~~~~
3909@@ -307,7 +307,7 @@ FMLIB
3910
3911 This is an alternate to the FMC based configuration. This library provides
3912 direct ioctl based interfaces for FMAN configuration as used by the FMC tool
3913- as well. This helps in overcoming the main limitaiton of FMC - i.e. lack
3914+ as well. This helps in overcoming the main limitation of FMC - i.e. lack
3915 of dynamic configuration.
3916
3917 The location for the fmd driver as used by FMLIB and FMC is as follows:
3918@@ -319,7 +319,7 @@ VSP (Virtual Storage Profile)
3919 The storage profiled are means to provide virtualized interface. A ranges of
3920 storage profiles cab be associated to Ethernet ports.
3921 They are selected during classification. Specify how the frame should be
3922- written to memory and which buffer pool to select for packet storange in
3923+ written to memory and which buffer pool to select for packet storage in
3924 queues. Start and End margin of buffer can also be configured.
3925
3926 Limitations
3927diff --git a/doc/guides/nics/ena.rst b/doc/guides/nics/ena.rst
3928index 0f1f63f..df72020 100644
3929--- a/doc/guides/nics/ena.rst
3930+++ b/doc/guides/nics/ena.rst
3931@@ -234,7 +234,7 @@ Example output:
3932
3933 [...]
3934 EAL: PCI device 0000:00:06.0 on NUMA socket -1
3935- EAL: Invalid NUMA socket, default to 0
3936+ EAL: Device 0000:00:06.0 is not NUMA-aware, defaulting socket to 0
3937 EAL: probe driver: 1d0f:ec20 net_ena
3938
3939 Interactive-mode selected
3940diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
3941index 5d1cc9f..1025224 100644
3942--- a/doc/guides/nics/enic.rst
3943+++ b/doc/guides/nics/enic.rst
3944@@ -294,35 +294,31 @@ inner and outer packets can be IPv4 or IPv6.
3945
3946 RSS hash calculation, therefore queue selection, is done on inner packets.
3947
3948-In order to enable overlay offload, the 'Enable VXLAN' box should be checked
3949+In order to enable overlay offload, enable VXLAN and/or Geneve on vNIC
3950 via CIMC or UCSM followed by a reboot of the server. When PMD successfully
3951-enables overlay offload, it prints the following message on the console.
3952+enables overlay offload, it prints one of the following messages on the console.
3953
3954 .. code-block:: console
3955
3956- Overlay offload is enabled
3957+ Overlay offload is enabled (VxLAN)
3958+ Overlay offload is enabled (Geneve)
3959+ Overlay offload is enabled (VxLAN, Geneve)
3960
3961 By default, PMD enables overlay offload if hardware supports it. To disable
3962 it, set ``devargs`` parameter ``disable-overlay=1``. For example::
3963
3964 -a 12:00.0,disable-overlay=1
3965
3966-By default, the NIC uses 4789 as the VXLAN port. The user may change
3967-it through ``rte_eth_dev_udp_tunnel_port_{add,delete}``. However, as
3968-the current NIC has a single VXLAN port number, the user cannot
3969-configure multiple port numbers.
3970-
3971-Geneve headers with non-zero options are not supported by default. To
3972-use Geneve with options, update the VIC firmware to the latest version
3973-and then set ``devargs`` parameter ``geneve-opt=1``. When Geneve with
3974-options is enabled, flow API cannot be used as the features are
3975-currently mutually exclusive. When this feature is successfully
3976-enabled, PMD prints the following message.
3977-
3978-.. code-block:: console
3979-
3980- Geneve with options is enabled
3981+By default, the NIC uses 4789 and 6081 as the VXLAN and Geneve ports,
3982+respectively. The user may change them through
3983+``rte_eth_dev_udp_tunnel_port_{add,delete}``. However, as the current
3984+NIC has a single VXLAN port number and a single Geneve port number,
3985+the user cannot configure multiple port numbers for each tunnel type.
3986
3987+Geneve offload support has evolved over VIC models. On older models,
3988+Geneve offload and advanced filters are mutually exclusive. This is
3989+enforced by UCSM and CIMC, which only allow one of the two features
3990+to be selected at one time. Newer VIC models do not have this restriction.
3991
3992 Ingress VLAN Rewrite
3993 --------------------
3994diff --git a/doc/guides/nics/hns3.rst b/doc/guides/nics/hns3.rst
3995index 84bd7a3..9a0196b 100644
3996--- a/doc/guides/nics/hns3.rst
3997+++ b/doc/guides/nics/hns3.rst
3998@@ -1,12 +1,12 @@
3999 .. SPDX-License-Identifier: BSD-3-Clause
4000- Copyright(c) 2018-2019 Hisilicon Limited.
4001+ Copyright(c) 2018-2019 HiSilicon Limited.
4002
4003 HNS3 Poll Mode Driver
4004 ===============================
4005
4006 The hns3 PMD (**librte_net_hns3**) provides poll mode driver support
4007-for the inbuilt Hisilicon Network Subsystem(HNS) network engine
4008-found in the Hisilicon Kunpeng 920 SoC.
4009+for the inbuilt HiSilicon Network Subsystem(HNS) network engine
4010+found in the HiSilicon Kunpeng 920 SoC.
4011
4012 Features
4013 --------
4014diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst
4015index 64f20e7..15febba 100644
4016--- a/doc/guides/nics/i40e.rst
4017+++ b/doc/guides/nics/i40e.rst
4018@@ -88,7 +88,7 @@ For X710/XL710/XXV710,
4019 +--------------+-----------------------+------------------+
4020 | DPDK version | Kernel driver version | Firmware version |
4021 +==============+=======================+==================+
4022- | 20.11 | 2.13.10 | 8.00 |
4023+ | 20.11 | 2.14.13 | 8.00 |
4024 +--------------+-----------------------+------------------+
4025 | 20.08 | 2.12.6 | 7.30 |
4026 +--------------+-----------------------+------------------+
4027diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
4028index ccda26f..7b5a1bf 100644
4029--- a/doc/guides/nics/ice.rst
4030+++ b/doc/guides/nics/ice.rst
4031@@ -37,7 +37,7 @@ The detailed information can refer to chapter Tested Platforms/Tested NICs in re
4032 +-----------+---------------+-----------------+-----------+-----------+
4033 | DPDK | Kernel Driver | OS Default DDP | COMMS DDP | Firmware |
4034 +===========+===============+=================+===========+===========+
4035- | 20.11 | 1.3.0 | 1.3.20 | 1.3.24 | 2.3 |
4036+ | 20.11 | 1.3.2 | 1.3.20 | 1.3.24 | 2.3 |
4037 +-----------+---------------+-----------------+-----------+-----------+
4038
4039 Pre-Installation Configuration
4040diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
4041index 24d5a69..84e58fc 100644
4042--- a/doc/guides/nics/mlx5.rst
4043+++ b/doc/guides/nics/mlx5.rst
4044@@ -591,6 +591,13 @@ Driver options
4045 it is not recommended and may prevent NIC from sending packets over
4046 some configurations.
4047
4048+ For ConnectX-4 and ConnectX-4 Lx NICs, automatically configured value
4049+ is insufficient for some traffic, because they require at least all L2 headers
4050+ to be inlined. For example, Q-in-Q adds 4 bytes to default 18 bytes
4051+ of Ethernet and VLAN, thus ``txq_inline_min`` must be set to 22.
4052+ MPLS would add 4 bytes per label. Final value must account for all possible
4053+ L2 encapsulation headers used in particular environment.
4054+
4055 Please, note, this minimal data inlining disengages eMPW feature (Enhanced
4056 Multi-Packet Write), because last one does not support partial packet inlining.
4057 This is not very critical due to minimal data inlining is mostly required
4058@@ -1281,7 +1288,7 @@ the DPDK application.
4059
4060 echo -n "<device pci address" > /sys/bus/pci/drivers/mlx5_core/unbind
4061
4062-5. Enbale switchdev mode::
4063+5. Enable switchdev mode::
4064
4065 echo switchdev > /sys/class/net/<net device>/compat/devlink/mode
4066
4067diff --git a/doc/guides/nics/netvsc.rst b/doc/guides/nics/netvsc.rst
4068index 19f9940..c0e218c 100644
4069--- a/doc/guides/nics/netvsc.rst
4070+++ b/doc/guides/nics/netvsc.rst
4071@@ -62,7 +62,7 @@ store it in a shell variable:
4072
4073 .. _`UUID`: https://en.wikipedia.org/wiki/Universally_unique_identifier
4074
4075-There are several possible ways to assign the uio device driver for a device.
4076+There are several possible ways to assign the UIO device driver for a device.
4077 The easiest way (but only on 4.18 or later)
4078 is to use the `driverctl Device Driver control utility`_ to override
4079 the normal kernel device.
4080diff --git a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst
4081index fef9997..bf8be72 100644
4082--- a/doc/guides/nics/nfp.rst
4083+++ b/doc/guides/nics/nfp.rst
4084@@ -117,15 +117,15 @@ although once they are created, DPDK apps should be able to use them as normal
4085 PCI ports.
4086
4087 NFP ports belonging to same PF can be seen inside PMD initialization with a
4088-suffix added to the PCI ID: wwww:xx:yy.z_port_n. For example, a PF with PCI ID
4089+suffix added to the PCI ID: wwww:xx:yy.z_portn. For example, a PF with PCI ID
4090 0000:03:00.0 and four ports is seen by the PMD code as:
4091
4092 .. code-block:: console
4093
4094- 0000:03:00.0_port_0
4095- 0000:03:00.0_port_1
4096- 0000:03:00.0_port_2
4097- 0000:03:00.0_port_3
4098+ 0000:03:00.0_port0
4099+ 0000:03:00.0_port1
4100+ 0000:03:00.0_port2
4101+ 0000:03:00.0_port3
4102
4103 .. Note::
4104
4105diff --git a/doc/guides/nics/octeontx2.rst b/doc/guides/nics/octeontx2.rst
4106index a4f2244..7b86cf5 100644
4107--- a/doc/guides/nics/octeontx2.rst
4108+++ b/doc/guides/nics/octeontx2.rst
4109@@ -153,7 +153,7 @@ Runtime Config Options
4110
4111 -a 0002:02:00.0,max_sqb_count=64
4112
4113- With the above configuration, each send queue's decscriptor buffer count is
4114+ With the above configuration, each send queue's descriptor buffer count is
4115 limited to a maximum of 64 buffers.
4116
4117 - ``Switch header enable`` (default ``none``)
4118@@ -242,7 +242,7 @@ configure the following features:
4119 #. Hierarchical scheduling
4120 #. Single rate - Two color, Two rate - Three color shaping
4121
4122-Both DWRR and Static Priority(SP) hierarchial scheduling is supported.
4123+Both DWRR and Static Priority(SP) hierarchical scheduling is supported.
4124
4125 Every parent can have atmost 10 SP Children and unlimited DWRR children.
4126
4127diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst
4128index c03c2d0..1f0aba3 100644
4129--- a/doc/guides/nics/virtio.rst
4130+++ b/doc/guides/nics/virtio.rst
4131@@ -71,7 +71,7 @@ In this release, the virtio PMD driver provides the basic functionality of packe
4132
4133 * Virtio supports software vlan stripping and inserting.
4134
4135-* Virtio supports using port IO to get PCI resource when uio/igb_uio module is not available.
4136+* Virtio supports using port IO to get PCI resource when UIO module is not available.
4137
4138 Prerequisites
4139 -------------
4140@@ -103,7 +103,8 @@ Host2VM communication example
4141
4142 insmod rte_kni.ko
4143
4144- Other basic DPDK preparations like hugepage enabling, uio port binding are not listed here.
4145+ Other basic DPDK preparations like hugepage enabling,
4146+ UIO port binding are not listed here.
4147 Please refer to the *DPDK Getting Started Guide* for detailed instructions.
4148
4149 #. Launch the kni user application:
4150@@ -508,7 +509,7 @@ are shown in below table:
4151 Split virtqueue in-order non-mergeable path virtio_recv_pkts_inorder virtio_xmit_pkts_inorder
4152 Split virtqueue vectorized Rx path virtio_recv_pkts_vec virtio_xmit_pkts
4153 Packed virtqueue mergeable path virtio_recv_mergeable_pkts_packed virtio_xmit_pkts_packed
4154- Packed virtqueue non-meregable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
4155+ Packed virtqueue non-mergeable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
4156 Packed virtqueue in-order mergeable path virtio_recv_mergeable_pkts_packed virtio_xmit_pkts_packed
4157 Packed virtqueue in-order non-mergeable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
4158 Packed virtqueue vectorized Rx path virtio_recv_pkts_packed_vec virtio_xmit_pkts_packed
4159diff --git a/doc/guides/nics/vmxnet3.rst b/doc/guides/nics/vmxnet3.rst
4160index ae146f0..190cf91 100644
4161--- a/doc/guides/nics/vmxnet3.rst
4162+++ b/doc/guides/nics/vmxnet3.rst
4163@@ -119,7 +119,8 @@ This section describes an example setup for Phy-vSwitch-VM-Phy communication.
4164
4165 .. note::
4166
4167- Other instructions on preparing to use DPDK such as, hugepage enabling, uio port binding are not listed here.
4168+ Other instructions on preparing to use DPDK such as,
4169+ hugepage enabling, UIO port binding are not listed here.
4170 Please refer to *DPDK Getting Started Guide and DPDK Sample Application's User Guide* for detailed instructions.
4171
4172 The packet reception and transmission flow path is::
4173diff --git a/doc/guides/platform/dpaa.rst b/doc/guides/platform/dpaa.rst
4174index 20a0e39..3896929 100644
4175--- a/doc/guides/platform/dpaa.rst
4176+++ b/doc/guides/platform/dpaa.rst
4177@@ -78,7 +78,7 @@ compatible board:
4178 based config (if /tmp/fmc.bin is present). DPAA FMD will be used only if no
4179 previous fmc config is existing.
4180
4181- Note that fmlib based integratin rely on underlying fmd driver in kernel,
4182+ Note that fmlib based integration rely on underlying fmd driver in kernel,
4183 which is available as part of NXP kernel or NXP SDK.
4184
4185 The following dependencies are not part of DPDK and must be installed
4186diff --git a/doc/guides/prog_guide/bbdev.rst b/doc/guides/prog_guide/bbdev.rst
4187index 6b2bd54..9619280 100644
4188--- a/doc/guides/prog_guide/bbdev.rst
4189+++ b/doc/guides/prog_guide/bbdev.rst
4190@@ -639,7 +639,7 @@ optionally the ``soft_output`` mbuf data pointers.
4191 "soft output","soft LLR output buffer (optional)"
4192 "op_flags","bitmask of all active operation capabilities"
4193 "rv_index","redundancy version index [0..3]"
4194- "iter_max","maximum number of iterations to perofrm in decode all CBs"
4195+ "iter_max","maximum number of iterations to perform in decode all CBs"
4196 "iter_min","minimum number of iterations to perform in decoding all CBs"
4197 "iter_count","number of iterations to performed in decoding all CBs"
4198 "ext_scale","scale factor on extrinsic info (5 bits)"
4199diff --git a/doc/guides/prog_guide/env_abstraction_layer.rst b/doc/guides/prog_guide/env_abstraction_layer.rst
4200index 1f30e13..d124eb0 100644
4201--- a/doc/guides/prog_guide/env_abstraction_layer.rst
4202+++ b/doc/guides/prog_guide/env_abstraction_layer.rst
4203@@ -465,7 +465,7 @@ devices would fail anyway.
4204 - By default, the mempool, first asks for IOVA-contiguous memory using
4205 ``RTE_MEMZONE_IOVA_CONTIG``. This is slow in RTE_IOVA_PA mode and it may
4206 affect the application boot time.
4207- - It is easy to enable large amount of IOVA-contiguous memory use-cases
4208+ - It is easy to enable large amount of IOVA-contiguous memory use cases
4209 with IOVA in VA mode.
4210
4211 It is expected that all PCI drivers work in both RTE_IOVA_PA and
4212diff --git a/doc/guides/prog_guide/eventdev.rst b/doc/guides/prog_guide/eventdev.rst
4213index ccde086..347203f 100644
4214--- a/doc/guides/prog_guide/eventdev.rst
4215+++ b/doc/guides/prog_guide/eventdev.rst
4216@@ -120,7 +120,7 @@ Ports
4217 ~~~~~
4218
4219 Ports are the points of contact between worker cores and the eventdev. The
4220-general use-case will see one CPU core using one port to enqueue and dequeue
4221+general use case will see one CPU core using one port to enqueue and dequeue
4222 events from an eventdev. Ports are linked to queues in order to retrieve events
4223 from those queues (more details in `Linking Queues and Ports`_ below).
4224
4225diff --git a/doc/guides/prog_guide/multi_proc_support.rst b/doc/guides/prog_guide/multi_proc_support.rst
4226index 6b0ac30..815e8bd 100644
4227--- a/doc/guides/prog_guide/multi_proc_support.rst
4228+++ b/doc/guides/prog_guide/multi_proc_support.rst
4229@@ -325,7 +325,7 @@ supported. However, since sending messages (not requests) does not involve an
4230 IPC thread, sending messages while processing another message or request is
4231 supported.
4232
4233-Since the memory sybsystem uses IPC internally, memory allocations and IPC must
4234+Since the memory subsystem uses IPC internally, memory allocations and IPC must
4235 not be mixed: it is not safe to use IPC inside a memory-related callback, nor is
4236 it safe to allocate/free memory inside IPC callbacks. Attempting to do so may
4237 lead to a deadlock.
4238diff --git a/doc/guides/prog_guide/qos_framework.rst b/doc/guides/prog_guide/qos_framework.rst
4239index 4e4ea33..e403b90 100644
4240--- a/doc/guides/prog_guide/qos_framework.rst
4241+++ b/doc/guides/prog_guide/qos_framework.rst
4242@@ -737,7 +737,7 @@ Strict priority scheduling of traffic classes within the same pipe is implemente
4243 which selects the queues in ascending order.
4244 Therefore, queue 0 (associated with TC 0, highest priority TC) is handled before
4245 queue 1 (TC 1, lower priority than TC 0),
4246-which is handled before queue 2 (TC 2, lower priority than TC 1) and it conitnues until queues of all TCs except the
4247+which is handled before queue 2 (TC 2, lower priority than TC 1) and it continues until queues of all TCs except the
4248 lowest priority TC are handled. At last, queues 12..15 (best effort TC, lowest priority TC) are handled.
4249
4250 Upper Limit Enforcement
4251diff --git a/doc/guides/prog_guide/regexdev.rst b/doc/guides/prog_guide/regexdev.rst
4252index 3d8b591..5ca7e0c 100644
4253--- a/doc/guides/prog_guide/regexdev.rst
4254+++ b/doc/guides/prog_guide/regexdev.rst
4255@@ -124,7 +124,7 @@ The configuration mode is depended on the PMD capabilities.
4256
4257 Online rule configuration is done using the following API functions:
4258 ``rte_regexdev_rule_db_update`` which add / remove rules from the rules
4259-precomplied list, and ``rte_regexdev_rule_db_compile_activate``
4260+precompiled list, and ``rte_regexdev_rule_db_compile_activate``
4261 which compile the rules and loads them to the RegEx HW.
4262
4263 Offline rule configuration can be done by adding a pointer to the compiled
4264diff --git a/doc/guides/prog_guide/vhost_lib.rst b/doc/guides/prog_guide/vhost_lib.rst
4265index ba4c62a..493818b 100644
4266--- a/doc/guides/prog_guide/vhost_lib.rst
4267+++ b/doc/guides/prog_guide/vhost_lib.rst
4268@@ -118,6 +118,18 @@ The following is an overview of some key Vhost API functions:
4269
4270 It is disabled by default.
4271
4272+ - ``RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS``
4273+
4274+ Since v16.04, the vhost library forwards checksum and gso requests for
4275+ packets received from a virtio driver by filling Tx offload metadata in
4276+ the mbuf. This behavior is inconsistent with other drivers but it is left
4277+ untouched for existing applications that might rely on it.
4278+
4279+ This flag disables the legacy behavior and instead ask vhost to simply
4280+ populate Rx offload metadata in the mbuf.
4281+
4282+ It is disabled by default.
4283+
4284 * ``rte_vhost_driver_set_features(path, features)``
4285
4286 This function sets the feature bits the vhost-user driver supports. The
4287diff --git a/doc/guides/prog_guide/writing_efficient_code.rst b/doc/guides/prog_guide/writing_efficient_code.rst
4288index 7baeaae..a61e832 100644
4289--- a/doc/guides/prog_guide/writing_efficient_code.rst
4290+++ b/doc/guides/prog_guide/writing_efficient_code.rst
4291@@ -143,20 +143,21 @@ In order to achieve higher throughput,
4292 the DPDK attempts to aggregate the cost of processing each packet individually by processing packets in bursts.
4293
4294 Using the testpmd application as an example,
4295-the burst size can be set on the command line to a value of 16 (also the default value).
4296-This allows the application to request 16 packets at a time from the PMD.
4297+the burst size can be set on the command line to a value of 32 (also the default value).
4298+This allows the application to request 32 packets at a time from the PMD.
4299 The testpmd application then immediately attempts to transmit all the packets that were received,
4300-in this case, all 16 packets.
4301+in this case, all 32 packets.
4302
4303 The packets are not transmitted until the tail pointer is updated on the corresponding TX queue of the network port.
4304 This behavior is desirable when tuning for high throughput because
4305-the cost of tail pointer updates to both the RX and TX queues can be spread across 16 packets,
4306+the cost of tail pointer updates to both the RX and TX queues can be spread
4307+across 32 packets,
4308 effectively hiding the relatively slow MMIO cost of writing to the PCIe* device.
4309 However, this is not very desirable when tuning for low latency because
4310-the first packet that was received must also wait for another 15 packets to be received.
4311-It cannot be transmitted until the other 15 packets have also been processed because
4312+the first packet that was received must also wait for another 31 packets to be received.
4313+It cannot be transmitted until the other 31 packets have also been processed because
4314 the NIC will not know to transmit the packets until the TX tail pointer has been updated,
4315-which is not done until all 16 packets have been processed for transmission.
4316+which is not done until all 32 packets have been processed for transmission.
4317
4318 To consistently achieve low latency, even under heavy system load,
4319 the application developer should avoid processing packets in bunches.
4320diff --git a/doc/guides/rawdevs/ioat.rst b/doc/guides/rawdevs/ioat.rst
4321index 250cfc4..59ba207 100644
4322--- a/doc/guides/rawdevs/ioat.rst
4323+++ b/doc/guides/rawdevs/ioat.rst
4324@@ -65,7 +65,7 @@ To assign an engine to a group::
4325 $ accel-config config-engine dsa0/engine0.1 --group-id=1
4326
4327 To assign work queues to groups for passing descriptors to the engines a similar accel-config command can be used.
4328-However, the work queues also need to be configured depending on the use-case.
4329+However, the work queues also need to be configured depending on the use case.
4330 Some configuration options include:
4331
4332 * mode (Dedicated/Shared): Indicates whether a WQ may accept jobs from multiple queues simultaneously.
4333diff --git a/doc/guides/rawdevs/ntb.rst b/doc/guides/rawdevs/ntb.rst
4334index 2c5fa76..2bb115d 100644
4335--- a/doc/guides/rawdevs/ntb.rst
4336+++ b/doc/guides/rawdevs/ntb.rst
4337@@ -17,7 +17,7 @@ some information by using scratchpad registers.
4338 BIOS setting on Intel Xeon
4339 --------------------------
4340
4341-Intel Non-transparent Bridge needs special BIOS setting. The referencce for
4342+Intel Non-transparent Bridge needs special BIOS setting. The reference for
4343 Skylake is https://www.intel.com/content/dam/support/us/en/documents/server-products/Intel_Xeon_Processor_Scalable_Family_BIOS_User_Guide.pdf
4344
4345 - Set the needed PCIe port as NTB to NTB mode on both hosts.
4346diff --git a/doc/guides/regexdevs/features_overview.rst b/doc/guides/regexdevs/features_overview.rst
4347index f90b394..c512bde 100644
4348--- a/doc/guides/regexdevs/features_overview.rst
4349+++ b/doc/guides/regexdevs/features_overview.rst
4350@@ -16,7 +16,7 @@ PCRE atomic grouping
4351 Support PCRE atomic grouping.
4352
4353 PCRE back reference
4354- Support PCRE back regerence.
4355+ Support PCRE back reference.
4356
4357 PCRE back tracking ctrl
4358 Support PCRE back tracking ctrl.
4359diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
4360index 2f498a0..c0d7efa 100644
4361--- a/doc/guides/rel_notes/deprecation.rst
4362+++ b/doc/guides/rel_notes/deprecation.rst
4363@@ -27,16 +27,18 @@ Deprecation Notices
4364
4365 * rte_atomicNN_xxx: These APIs do not take memory order parameter. This does
4366 not allow for writing optimized code for all the CPU architectures supported
4367- in DPDK. DPDK will adopt C11 atomic operations semantics and provide wrappers
4368- using C11 atomic built-ins. These wrappers must be used for patches that
4369- need to be merged in 20.08 onwards. This change will not introduce any
4370- performance degradation.
4371+ in DPDK. DPDK has adopted the atomic operations from
4372+ https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html. These
4373+ operations must be used for patches that need to be merged in 20.08 onwards.
4374+ This change will not introduce any performance degradation.
4375
4376 * rte_smp_*mb: These APIs provide full barrier functionality. However, many
4377- use cases do not require full barriers. To support such use cases, DPDK will
4378- adopt C11 barrier semantics and provide wrappers using C11 atomic built-ins.
4379- These wrappers must be used for patches that need to be merged in 20.08
4380- onwards. This change will not introduce any performance degradation.
4381+ use cases do not require full barriers. To support such use cases, DPDK has
4382+ adopted atomic operations from
4383+ https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html. These
4384+ operations and a new wrapper ``rte_atomic_thread_fence`` instead of
4385+ ``__atomic_thread_fence`` must be used for patches that need to be merged in
4386+ 20.08 onwards. This change will not introduce any performance degradation.
4387
4388 * lib: will fix extending some enum/define breaking the ABI. There are multiple
4389 samples in DPDK that enum/define terminated with a ``.*MAX.*`` value which is
4390@@ -127,12 +129,6 @@ Deprecation Notices
4391 from the release: ``0x16c8, 0x16c9, 0x16ca, 0x16ce, 0x16cf, 0x16df,``
4392 ``0x16d0, 0x16d1, 0x16d2, 0x16d4, 0x16d5, 0x16e7, 0x16e8, 0x16e9``.
4393
4394-* sched: To allow more traffic classes, flexible mapping of pipe queues to
4395- traffic classes, and subport level configuration of pipes and queues
4396- changes will be made to macros, data structures and API functions defined
4397- in "rte_sched.h". These changes are aligned to improvements suggested in the
4398- RFC https://mails.dpdk.org/archives/dev/2018-November/120035.html.
4399-
4400 * metrics: The function ``rte_metrics_init`` will have a non-void return
4401 in order to notify errors instead of calling ``rte_exit``.
4402
4403diff --git a/doc/guides/rel_notes/known_issues.rst b/doc/guides/rel_notes/known_issues.rst
4404index ee3ed1e..e8f9fe6 100644
4405--- a/doc/guides/rel_notes/known_issues.rst
4406+++ b/doc/guides/rel_notes/known_issues.rst
4407@@ -419,7 +419,7 @@ Binding PCI devices to igb_uio fails on Linux kernel 3.9 when more than one devi
4408 ------------------------------------------------------------------------------------------
4409
4410 **Description**:
4411- A known bug in the uio driver included in Linux kernel version 3.9 prevents more than one PCI device to be
4412+ A known bug in the UIO driver included in Linux kernel version 3.9 prevents more than one PCI device to be
4413 bound to the igb_uio driver.
4414
4415 **Implication**:
4416@@ -614,7 +614,7 @@ I40e VF may not receive packets in the promiscuous mode
4417 Poll Mode Driver (PMD).
4418
4419
4420-uio pci generic module bind failed in X710/XL710/XXV710
4421+uio_pci_generic module bind failed in X710/XL710/XXV710
4422 -------------------------------------------------------
4423
4424 **Description**:
4425@@ -671,7 +671,7 @@ virtio tx_burst() function cannot do TSO on shared packets
4426 Poll Mode Driver (PMD).
4427
4428
4429-igb uio legacy mode can not be used in X710/XL710/XXV710
4430+igb_uio legacy mode can not be used in X710/XL710/XXV710
4431 --------------------------------------------------------
4432
4433 **Description**:
4434@@ -752,7 +752,7 @@ Netvsc driver and application restart
4435 handshake sequence with the host.
4436
4437 **Resolution/Workaround**:
4438- Either reboot the guest or remove and reinsert the hv_uio_generic module.
4439+ Either reboot the guest or remove and reinsert the uio_hv_generic module.
4440
4441 **Affected Environment/Platform**:
4442 Linux Hyper-V.
4443@@ -816,7 +816,7 @@ Kernel crash when hot-unplug igb_uio device while DPDK application is running
4444
4445 **Reason**:
4446 When device is hot-unplugged, igb_uio driver will be removed which will destroy UIO resources.
4447- Later trying to access any uio resource will cause kernel crash.
4448+ Later trying to access any UIO resource will cause kernel crash.
4449
4450 **Resolution/Workaround**:
4451 If using DPDK for PCI HW hot-unplug, prefer to bind device with VFIO instead of IGB_UIO.
4452diff --git a/doc/guides/rel_notes/release_16_11.rst b/doc/guides/rel_notes/release_16_11.rst
4453index 92e0ec6..3cec914 100644
4454--- a/doc/guides/rel_notes/release_16_11.rst
4455+++ b/doc/guides/rel_notes/release_16_11.rst
4456@@ -77,7 +77,7 @@ New Features
4457 the current version, even 64 bytes packets take two slots with Virtio PMD on guest
4458 side.
4459
4460- The main impact is better performance for 0% packet loss use-cases, as it
4461+ The main impact is better performance for 0% packet loss use cases, as it
4462 behaves as if the virtqueue size was enlarged, so more packets can be buffered
4463 in the case of system perturbations. On the downside, small performance degradations
4464 were measured when running micro-benchmarks.
4465diff --git a/doc/guides/rel_notes/release_19_08.rst b/doc/guides/rel_notes/release_19_08.rst
4466index cbb27e8..d2baa82 100644
4467--- a/doc/guides/rel_notes/release_19_08.rst
4468+++ b/doc/guides/rel_notes/release_19_08.rst
4469@@ -151,7 +151,7 @@ New Features
4470 * Added multi-queue support to allow one af_xdp vdev with multiple netdev
4471 queues.
4472 * Enabled "need_wakeup" feature which can provide efficient support for the
4473- usecase where the application and driver executing on the same core.
4474+ use case where the application and driver executing on the same core.
4475
4476 * **Enabled infinite Rx in the PCAP PMD.**
4477
4478diff --git a/doc/guides/rel_notes/release_20_05.rst b/doc/guides/rel_notes/release_20_05.rst
4479index 985c845..b59576a 100644
4480--- a/doc/guides/rel_notes/release_20_05.rst
4481+++ b/doc/guides/rel_notes/release_20_05.rst
4482@@ -121,6 +121,13 @@ New Features
4483 * Added flow counters to extended stats.
4484 * Added PCI function stats to extended stats.
4485
4486+* **Updated Cisco enic driver.**
4487+
4488+ Updated Cisco enic driver GENEVE tunneling support:
4489+
4490+ * Added support to control GENEVE tunneling via UCSM/CIMC and removed devarg.
4491+ * Added GENEVE port number configuration.
4492+
4493 * **Updated Hisilicon hns3 driver.**
4494
4495 Updated Hisilicon hns3 driver with new features and improvements, including:
4496diff --git a/doc/guides/rel_notes/release_20_11.rst b/doc/guides/rel_notes/release_20_11.rst
4497index e6a7f12..b2f76bc 100644
4498--- a/doc/guides/rel_notes/release_20_11.rst
4499+++ b/doc/guides/rel_notes/release_20_11.rst
4500@@ -1553,3 +1553,899 @@ Tested Platforms
4501 https://bugzilla.kernel.org/show_bug.cgi?id=207075
4502 * vm2vm virtio-net connectivity between two vms randomly fails due
4503 to lost connection after vhost reconnect.
4504+
4505+20.11.2 Release Notes
4506+---------------------
4507+
4508+20.11.2 Fixes
4509+~~~~~~~~~~~~~
4510+
4511+* acl: fix build with GCC 11
4512+* app/bbdev: check memory allocation
4513+* app/bbdev: fix HARQ error messages
4514+* app/crypto-perf: check memory allocation
4515+* app/eventdev: fix lcore parsing skipping last core
4516+* app/eventdev: fix overflow in lcore list parsing
4517+* app/eventdev: fix timeout accuracy
4518+* app: fix exit messages
4519+* app/flow-perf: fix encap/decap actions
4520+* app/regex: fix usage text
4521+* app/testpmd: check MAC address query
4522+* app/testpmd: fix bitmap of link speeds when force speed
4523+* app/testpmd: fix build with musl
4524+* app/testpmd: fix DCB forwarding configuration
4525+* app/testpmd: fix DCB re-configuration
4526+* app/testpmd: fix division by zero on socket memory dump
4527+* app/testpmd: fix forward lcores number for DCB
4528+* app/testpmd: fix max queue number for Tx offloads
4529+* app/testpmd: fix NVGRE encap configuration
4530+* app/testpmd: fix segment number check
4531+* app/testpmd: fix tunnel offload flows cleanup
4532+* app/testpmd: fix Tx/Rx descriptor query error log
4533+* app/testpmd: fix usage text
4534+* app/testpmd: remove unnecessary UDP tunnel check
4535+* app/testpmd: verify DCB config during forward config
4536+* bpf: fix JSLT validation
4537+* build: detect execinfo library on Linux
4538+* build: exclude meson files from examples installation
4539+* build: fix drivers selection without Python
4540+* build: remove redundant _GNU_SOURCE definitions
4541+* buildtools: fix all drivers disabled on Windows
4542+* buildtools: fix build with busybox
4543+* bus/dpaa: fix 64-bit arch detection
4544+* bus/dpaa: fix build with musl
4545+* bus/dpaa: fix statistics reading
4546+* bus/fslmc: fix random portal hangs with qbman 5.0
4547+* bus/fslmc: remove unused debug macro
4548+* bus/pci: fix Windows kernel driver categories
4549+* bus/pci: skip probing some Windows NDIS devices
4550+* bus/pci: support I/O port operations with musl
4551+* ci: catch coredumps
4552+* ci: enable v21 ABI checks
4553+* ci: fix package installation in GitHub Actions
4554+* ci: hook to GitHub Actions
4555+* ci: ignore APT update failure in GitHub Actions
4556+* common/dpaax/caamflib: fix build with musl
4557+* common/dpaax: fix possible null pointer access
4558+* common/iavf: fix duplicated offload bit
4559+* common/mlx5: add DevX commands for queue counters
4560+* common/mlx5: add DevX command to query WQ
4561+* common/mlx5: add timestamp format support to DevX
4562+* common/mlx5: fix DevX read output buffer size
4563+* common/mlx5/linux: add glue function to query WQ
4564+* common/qat: increase IM buffer size for GEN3
4565+* common/sfc_efx/base: add missing MCDI response length checks
4566+* common/sfc_efx/base: fix dereferencing null pointer
4567+* common/sfc_efx/base: fix indication of MAE encap support
4568+* common/sfc_efx/base: limit reported MCDI response length
4569+* common/sfc_efx: remove GENEVE from supported tunnels
4570+* compress/qat: enable compression on GEN3
4571+* config/ppc: reduce number of cores and NUMA nodes
4572+* crypto/dpaa2_sec: fix close and uninit functions
4573+* crypto/dpaa_sec: affine the thread portal affinity
4574+* crypto/octeontx: fix session-less mode
4575+* crypto/qat: fix null authentication request
4576+* crypto/qat: fix offset for out-of-place scatter-gather
4577+* crypto/zuc: fix build with GCC 11
4578+* devtools: fix orphan symbols check with busybox
4579+* doc: fix build with Sphinx 4
4580+* doc: fix formatting in testpmd guide
4581+* doc: fix HiSilicon copyright syntax
4582+* doc: fix matching versions in ice guide
4583+* doc: fix multiport syntax in nfp guide
4584+* doc: fix names of UIO drivers
4585+* doc: fix runtime options in DLB2 guide
4586+* doc: fix sphinx rtd theme import in GHA
4587+* doc: remove PDF requirements
4588+* doc: update recommended versions for i40e
4589+* drivers: fix log level after loading
4590+* drivers/net: fix FW version query
4591+* eal: add C++ include guard for reciprocal header
4592+* eal/arm64: fix platform register bit
4593+* eal: fix build with musl
4594+* eal: fix comment of OS-specific header files
4595+* eal: fix evaluation of log level option
4596+* eal: fix hang in control thread creation
4597+* eal: fix leak in shared lib mode detection
4598+* eal: fix memory mapping on 32-bit target
4599+* eal: fix race in control thread creation
4600+* eal: fix service core list parsing
4601+* eal/windows: add missing SPDX license tag
4602+* eal/windows: fix default thread priority
4603+* eal/windows: fix return codes of pthread shim layer
4604+* ethdev: add missing buses in device iterator
4605+* ethdev: update flow item GTP QFI definition
4606+* ethdev: validate input in EEPROM info
4607+* ethdev: validate input in module EEPROM dump
4608+* ethdev: validate input in register info
4609+* eventdev: fix case to initiate crypto adapter service
4610+* eventdev: fix memory leakage on thread creation failure
4611+* eventdev: remove redundant thread name setting
4612+* event/dlb2: remove references to deferred scheduling
4613+* event/dlb: fix header includes for musl
4614+* event/dpaa2: remove unused macros
4615+* event/octeontx2: configure crypto adapter xaq pool
4616+* event/octeontx2: fix crypto adapter queue pair operations
4617+* event/octeontx2: fix device reconfigure for single slot
4618+* event/octeontx2: fix XAQ pool reconfigure
4619+* examples: add eal cleanup to examples
4620+* examples/bbdev: fix header include for musl
4621+* examples/ethtool: remove unused parsing
4622+* examples: fix pkg-config override
4623+* examples/flow_classify: fix NUMA check of port and core
4624+* examples/l2fwd-cat: fix NUMA check of port and core
4625+* examples/l2fwd-crypto: fix packet length while decryption
4626+* examples/l2fwd-crypto: skip masked devices
4627+* examples/l3fwd: fix LPM IPv6 subnets
4628+* examples/l3fwd-power: fix empty poll thresholds
4629+* examples/packet_ordering: fix port configuration
4630+* examples/ptpclient: remove wrong comment
4631+* examples/rxtx_callbacks: fix port ID format specifier
4632+* examples/skeleton: fix NUMA check of port and core
4633+* examples/timer: fix time interval
4634+* examples/vhost: check memory table query
4635+* examples/vhost_crypto: remove unused short option
4636+* fbarray: fix log message on truncation error
4637+* ipc: check malloc sync reply result
4638+* ipc: use monotonic clock
4639+* ip_frag: fix fragmenting IPv4 packet with header option
4640+* kni: fix kernel deadlock with bifurcated device
4641+* kni: refactor user request processing
4642+* kni: support async user request
4643+* license: fix typos
4644+* log/linux: make default output stderr
4645+* mbuf: check shared memory before dumping dynamic space
4646+* mem: fix freeing segments in --huge-unlink mode
4647+* net/af_xdp: fix error handling during Rx queue setup
4648+* net/ark: fix leak on thread termination
4649+* net/ark: refactor Rx buffer recovery
4650+* net/ark: update packet director initial state
4651+* net/bnx2x: fix build with GCC 11
4652+* net/bnx2x: fix build with GCC 11
4653+* net/bnxt: check kvargs parsing
4654+* net/bnxt: check PCI config read
4655+* net/bnxt: drop unused attribute
4656+* net/bnxt: fix configuring LRO
4657+* net/bnxt: fix device readiness check
4658+* net/bnxt: fix double free in port start failure
4659+* net/bnxt: fix dynamic VNIC count
4660+* net/bnxt: fix firmware fatal error handling
4661+* net/bnxt: fix FW readiness check during recovery
4662+* net/bnxt: fix handling of null flow mask
4663+* net/bnxt: fix health check alarm cancellation
4664+* net/bnxt: fix HWRM and FW incompatibility handling
4665+* net/bnxt: fix link state operations
4666+* net/bnxt: fix memory allocation for command response
4667+* net/bnxt: fix mismatched type comparison in MAC restore
4668+* net/bnxt: fix mismatched type comparison in Rx
4669+* net/bnxt: fix PCI write check
4670+* net/bnxt: fix PTP support for Thor
4671+* net/bnxt: fix queues per VNIC
4672+* net/bnxt: fix resource cleanup
4673+* net/bnxt: fix ring count calculation for Thor
4674+* net/bnxt: fix RSS context cleanup
4675+* net/bnxt: fix Rx and Tx timestamps
4676+* net/bnxt: fix Rx buffer posting
4677+* net/bnxt: fix Rx descriptor status
4678+* net/bnxt: fix Rx queue count
4679+* net/bnxt: fix Rx timestamp when FIFO pending bit is set
4680+* net/bnxt: fix single PF per port check
4681+* net/bnxt: fix timesync when PTP is not supported
4682+* net/bnxt: fix Tx length hint threshold
4683+* net/bnxt: fix Tx timestamp init
4684+* net/bnxt: fix VF info allocation
4685+* net/bnxt: fix VNIC configuration
4686+* net/bnxt: fix xstats get
4687+* net/bnxt: mute some failure logs
4688+* net/bnxt: prevent device access in error state
4689+* net/bnxt: refactor multi-queue Rx configuration
4690+* net/bnxt: remove unnecessary forward declarations
4691+* net/bnxt: remove unused function parameters
4692+* net/bnxt: remove unused macro
4693+* net/bnxt: use prefix on global function
4694+* net/bonding: fix adding itself as its slave
4695+* net/bonding: fix LACP system address check
4696+* net/bonding: fix leak on remove
4697+* net/bonding: fix socket ID check
4698+* net/cxgbe: remove use of uint type
4699+* net/dpaa2: fix getting link status
4700+* net/dpaa: fix getting link status
4701+* net/e1000/base: fix timeout for shadow RAM write
4702+* net/e1000: fix flow error message object
4703+* net/e1000: fix max Rx packet size
4704+* net/e1000: fix Rx error counter for bad length
4705+* net/e1000: remove MTU setting limitation
4706+* net/ena/base: destroy multiple wait events
4707+* net/ena/base: fix type conversions by explicit casting
4708+* net/ena/base: improve style and comments
4709+* net/ena: fix crash with unsupported device argument
4710+* net/ena: fix parsing of large LLQ header device argument
4711+* net/ena: fix releasing Tx ring mbufs
4712+* net/ena: indicate Rx RSS hash presence
4713+* net/ena: remove endian swap functions
4714+* net/ena: report default ring size
4715+* net/ena: switch memcpy to optimized version
4716+* net/enic: enable GENEVE offload via VNIC configuration
4717+* net/enic: fix flow initialization error handling
4718+* net/failsafe: fix RSS hash offload reporting
4719+* net/failsafe: report minimum and maximum MTU
4720+* net: fix comment in IPv6 header
4721+* net/hinic: fix crash in secondary process
4722+* net/hns3: clear hash map on flow director clear
4723+* net/hns3: delete redundant blank line
4724+* net/hns3: fail setting FEC if one bit mode is not supported
4725+* net/hns3: fix concurrent interrupt handling
4726+* net/hns3: fix configure FEC when concurrent with reset
4727+* net/hns3: fix copyright date
4728+* net/hns3: fix DCB configuration
4729+* net/hns3: fix DCB mode check
4730+* net/hns3: fix DCB reconfiguration
4731+* net/hns3: fix device capabilities for copper media type
4732+* net/hns3: fix flow control exception
4733+* net/hns3: fix flow control mode
4734+* net/hns3: fix flow counter value
4735+* net/hns3: fix flow director lock
4736+* net/hns3: fix FLR miss detection
4737+* net/hns3: fix handling link update
4738+* net/hns3: fix HW buffer size on MTU update
4739+* net/hns3: fix link speed when port is down
4740+* net/hns3: fix link speed when VF device is down
4741+* net/hns3: fix link status when port is stopped
4742+* net/hns3: fix link update when failed to get link info
4743+* net/hns3: fix log on flow director clear
4744+* net/hns3: fix long task queue pairs reset time
4745+* net/hns3: fix mailbox error message
4746+* net/hns3: fix mailbox message ID in log
4747+* net/hns3: fix mbuf leakage
4748+* net/hns3: fix missing outer L4 UDP flag for VXLAN
4749+* net/hns3: fix MTU config complexity
4750+* net/hns3: fix ordering in secondary process initialization
4751+* net/hns3: fix possible mismatched response of mailbox
4752+* net/hns3: fix processing link status message on PF
4753+* net/hns3: fix processing Tx offload flags
4754+* net/hns3: fix querying flow director counter for out param
4755+* net/hns3: fix queue state when concurrent with reset
4756+* net/hns3: fix reporting undefined speed
4757+* net/hns3: fix requested FC mode rollback
4758+* net/hns3: fix rollback after setting PVID failure
4759+* net/hns3: fix Rx/Tx queue numbers check
4760+* net/hns3: fix secondary process request start/stop Rx/Tx
4761+* net/hns3: fix setting default MAC address in bonding of VF
4762+* net/hns3: fix some packet types
4763+* net/hns3: fix time delta calculation
4764+* net/hns3: fix timing in mailbox
4765+* net/hns3: fix timing in resetting queues
4766+* net/hns3: fix TM QCN error event report by MSI-X
4767+* net/hns3: fix Tx checksum for UDP packets with special port
4768+* net/hns3: fix typos on comments
4769+* net/hns3: fix use of command status enumeration
4770+* net/hns3: fix vector Rx burst limitation
4771+* net/hns3: fix verification of NEON support
4772+* net/hns3: fix VF alive notification after config restore
4773+* net/hns3: fix VF handling LSC event in secondary process
4774+* net/hns3: fix VF mailbox head field
4775+* net/hns3: fix VMDq mode check
4776+* net/hns3: increase readability in logs
4777+* net/hns3: log time delta in decimal format
4778+* net/hns3: remove meaningless packet buffer rollback
4779+* net/hns3: remove read when enabling TM QCN error event
4780+* net/hns3: remove redundant mailbox response
4781+* net/hns3: remove unused macro
4782+* net/hns3: remove unused macros
4783+* net/hns3: remove unused macros
4784+* net/hns3: remove unused mailbox macro and struct
4785+* net/hns3: remove unused parameter markers
4786+* net/hns3: remove unused VMDq code
4787+* net/hns3: remove VLAN/QinQ ptypes from support list
4788+* net/hns3: return error on PCI config write failure
4789+* net/hns3: support get device version when dump register
4790+* net/hns3: update HiSilicon copyright syntax
4791+* net/i40e: announce request queue capability in PF
4792+* net/i40e: fix flow director config after flow validate
4793+* net/i40e: fix flow director for common pctypes
4794+* net/i40e: fix input set field mask
4795+* net/i40e: fix IPv4 fragment offload
4796+* net/i40e: fix lack of MAC type when set MAC address
4797+* net/i40e: fix negative VEB index
4798+* net/i40e: fix parsing packet type for NEON
4799+* net/i40e: fix primary MAC type when starting port
4800+* net/i40e: fix VF RSS configuration
4801+* net/i40e: remove redundant VSI check in Tx queue setup
4802+* net/i40evf: fix packet loss for X722
4803+* net/iavf: fix crash in AVX512
4804+* net/iavf: fix lack of MAC type when set MAC address
4805+* net/iavf: fix packet length parsing in AVX512
4806+* net/iavf: fix primary MAC type when starting port
4807+* net/iavf: fix TSO max segment size
4808+* net/iavf: fix VF to PF command failure handling
4809+* net/iavf: fix wrong Tx context descriptor
4810+* net/ice/base: cleanup filter list on error
4811+* net/ice/base: fix build with GCC 11
4812+* net/ice/base: fix memory allocation for MAC addresses
4813+* net/ice/base: fix memory allocation wrapper
4814+* net/ice/base: fix payload indicator on ptype
4815+* net/ice/base: fix uninitialized struct
4816+* net/ice: check some functions return
4817+* net/ice: fix crash in AVX512
4818+* net/ice: fix disabling promiscuous mode
4819+* net/ice: fix fast mbuf freeing
4820+* net/ice: fix illegal access when removing MAC filter
4821+* net/ice: fix leak on thread termination
4822+* net/ice: fix RSS for L2 packet
4823+* net/ice: fix RSS hash update
4824+* net/ice: fix VLAN filter with PF
4825+* net/ice: fix VSI array out of bounds access
4826+* net/igc: fix Rx error counter for bad length
4827+* net/igc: fix Rx packet size
4828+* net/igc: fix Rx RSS hash offload capability
4829+* net/igc: fix speed configuration
4830+* net/igc: remove MTU setting limitation
4831+* net/igc: remove use of uint type
4832+* net/ionic: fix completion type in lif init
4833+* net/ixgbe: fix RSS RETA being reset after port start
4834+* net/ixgbe: fix Rx errors statistics for UDP checksum
4835+* net/kni: check init result
4836+* net/kni: warn on stop failure
4837+* net/memif: fix Tx bps statistics for zero-copy
4838+* net/mlx4: fix buffer leakage on device close
4839+* net/mlx4: fix leak when configured repeatedly
4840+* net/mlx4: fix RSS action with null hash key
4841+* net/mlx4: fix secondary process initialization ordering
4842+* net/mlx5: fix counter offset detection
4843+* net/mlx5: fix drop action for Direct Rules/Verbs
4844+* net/mlx5: fix external buffer pool registration for Rx queue
4845+* net/mlx5: fix flow actions index in cache
4846+* net/mlx5: fix flow age event triggering
4847+* net/mlx5: fix hashed list size for tunnel flow groups
4848+* net/mlx5: fix leak when configured repeatedly
4849+* net/mlx5: fix loopback for Direct Verbs queue
4850+* net/mlx5: fix metadata item validation for ingress flows
4851+* net/mlx5: fix missing shared RSS hash types
4852+* net/mlx5: fix probing device in legacy bonding mode
4853+* net/mlx5: fix receiving queue timestamp format
4854+* net/mlx5: fix redundant flow after RSS expansion
4855+* net/mlx5: fix resource release for mirror flow
4856+* net/mlx5: fix RSS flow item expansion for GRE key
4857+* net/mlx5: fix RSS flow item expansion for NVGRE
4858+* net/mlx5: fix Rx metadata leftovers
4859+* net/mlx5: fix Rx segmented packets on mbuf starvation
4860+* net/mlx5: fix secondary process initialization ordering
4861+* net/mlx5: fix shared inner RSS
4862+* net/mlx5: fix tunnel offload private items location
4863+* net/mlx5: fix UAR allocation diagnostics messages
4864+* net/mlx5: fix using flow tunnel before null check
4865+* net/mlx5/linux: fix firmware version
4866+* net/mlx5: remove drop queue function prototypes
4867+* net/mlx5: support RSS expansion for IPv6 GRE
4868+* net/mlx5: support timestamp format
4869+* net/nfp: fix reporting of RSS capabilities
4870+* net/octeontx2: fix VLAN filter
4871+* net/pcap: fix file descriptor leak on close
4872+* net/pcap: fix format string
4873+* net/qede: accept bigger RSS table
4874+* net/qede: reduce log verbosity
4875+* net/sfc: fix buffer size for flow parse
4876+* net/sfc: fix error path inconsistency
4877+* net/sfc: fix mark support in EF100 native Rx datapath
4878+* net/sfc: fix outer rule rollback on error
4879+* net/tap: check ioctl on restore
4880+* net/tap: fix build with GCC 11
4881+* net/tap: fix interrupt vector array size
4882+* net/txgbe: fix QinQ strip
4883+* net/txgbe: fix Rx missed packet counter
4884+* net/txgbe: remove unused functions
4885+* net/txgbe: update packet type
4886+* net/vhost: restore pseudo TSO support
4887+* net/virtio: fix getline memory leakage
4888+* net/virtio: fix interrupt unregistering for listening socket
4889+* net/virtio: fix vectorized Rx queue rearm
4890+* pipeline: fix endianness conversions
4891+* pipeline: fix instruction translation
4892+* power: do not skip saving original P-state governor
4893+* power: fix sanity checks for guest channel read
4894+* power: remove duplicated symbols from map file
4895+* power: save original ACPI governor always
4896+* raw/ifpga: fix device name format
4897+* raw/ioat: fix script for configuring small number of queues
4898+* raw/ntb: check memory allocations
4899+* raw/ntb: check SPAD user index
4900+* raw/octeontx2_dma: assign PCI device in DPI VF
4901+* raw/skeleton: add missing check after setting attribute
4902+* regex/mlx5: support timestamp format
4903+* regex/octeontx2: remove unused include directory
4904+* sched: fix traffic class oversubscription parameter
4905+* service: clean references to removed symbol
4906+* stack: allow lock-free only on relevant architectures
4907+* table: fix actions with different data size
4908+* telemetry: fix race on callbacks list
4909+* test/bpf: fix error message
4910+* test: check flow classifier creation
4911+* test: check thread creation
4912+* test/cmdline: fix inputs array
4913+* test/cmdline: silence clang 12 warning
4914+* test/crypto: copy offset data to OOP destination buffer
4915+* test/crypto: fix auth-cipher compare length in OOP
4916+* test/crypto: fix build with GCC 11
4917+* test/crypto: fix return value of a skipped test
4918+* test/distributor: fix burst flush on worker quit
4919+* test/distributor: fix worker notification in burst mode
4920+* test/event: fix timeout accuracy
4921+* test: fix autotest handling of skipped tests
4922+* test: fix build with GCC 11
4923+* test: fix division by zero
4924+* test: fix TCP header initialization
4925+* test/kni: check init result
4926+* test/kni: fix a comment
4927+* test/mem: fix page size for external memory
4928+* test/mempool: fix object initializer
4929+* test/power: add delay before checking CPU frequency
4930+* test/power: add turbo mode to frequency check
4931+* test/power: fix CPU frequency check
4932+* test/power: fix low frequency test when turbo enabled
4933+* test/power: fix turbo test
4934+* test/power: round CPU frequency to check
4935+* test: proceed if timer subsystem already initialized
4936+* test/table: fix build with GCC 11
4937+* test/timer: check memzone allocation
4938+* test/trace: fix race on collected perf data
4939+* vdpa/ifc: check PCI config read
4940+* vdpa/mlx5: fix device unplug
4941+* vdpa/mlx5: fix virtq cleaning
4942+* vdpa/mlx5: support timestamp format
4943+* version: 20.11.2-rc1
4944+* version: 20.11.2-rc2
4945+* vfio: do not merge contiguous areas
4946+* vfio: fix API description
4947+* vfio: fix DMA mapping granularity for IOVA as VA
4948+* vfio: fix duplicated user mem map
4949+* vhost: fix batch dequeue potential buffer overflow
4950+* vhost: fix initialization of async temporary header
4951+* vhost: fix initialization of temporary header
4952+* vhost: fix offload flags in Rx path
4953+* vhost: fix packed ring potential buffer overflow
4954+* vhost: fix queue initialization
4955+* vhost: fix redundant vring status change notification
4956+* vhost: fix split ring potential buffer overflow
4957+
4958+20.11.2 Validation
4959+~~~~~~~~~~~~~~~~~~
4960+
4961+* Intel(R) Testing
4962+
4963+ * Basic Intel(R) NIC testing
4964+
4965+ * PF(i40e, ixgbe, ice)
4966+ * VF(i40e, ixgbe, ice)
4967+ * Compile testing
4968+ * Intel NIC single core/NIC performance
4969+
4970+ * Basic cryptodev and virtio testing
4971+
4972+ * Virtio function and performance
4973+ * Cryptodev function and performance
4974+
4975+* Nvidia(R) Testing
4976+
4977+ * Basic functionality with testpmd
4978+
4979+ * Tx/Rx
4980+ * xstats
4981+ * Timestamps
4982+ * Link status
4983+ * RTE flow and flow_director
4984+ * RSS
4985+ * VLAN stripping and insertion
4986+ * Checksum/TSO
4987+ * ptype
4988+ * link_status_interrupt example application
4989+ * l3fwd-power example application
4990+ * Multi-process example applications
4991+ * Hardware LRO
4992+
4993+ * Build tests
4994+
4995+ * Ubuntu 20.04.2 with MLNX_OFED_LINUX-5.3-1.0.0.1.
4996+ * Ubuntu 20.04.2 with rdma-core master (a66e2a5).
4997+ * Ubuntu 20.04.2 with rdma-core v28.0.
4998+ * Ubuntu 18.04.5 with rdma-core v17.1.
4999+ * Ubuntu 18.04.5 with rdma-core master (a66e2a5) (i386).
5000+ * Ubuntu 16.04.7 with rdma-core v22.7.
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches