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