Merge ~paelzer/ubuntu/+source/dpdk:merge-19.11.3-FOCAL into ubuntu/+source/dpdk:ubuntu/focal-devel

Proposed by Christian Ehrhardt 
Status: Merged
Approved by: Christian Ehrhardt 
Approved revision: be29c18692caf33045c3a0369b9785028e5d2f4e
Merged at revision: be29c18692caf33045c3a0369b9785028e5d2f4e
Proposed branch: ~paelzer/ubuntu/+source/dpdk:merge-19.11.3-FOCAL
Merge into: ubuntu/+source/dpdk:ubuntu/focal-devel
Diff against target: 23242 lines (+7191/-2906)
487 files modified
.travis.yml (+1/-1)
VERSION (+1/-1)
app/pdump/main.c (+1/-1)
app/test-acl/main.c (+1/-1)
app/test-crypto-perf/main.c (+2/-1)
app/test-eventdev/test_pipeline_common.c (+7/-3)
app/test-pipeline/config.c (+0/-2)
app/test-pmd/cmdline.c (+5/-3)
app/test-pmd/cmdline_flow.c (+5/-3)
app/test-pmd/config.c (+25/-1)
app/test-pmd/csumonly.c (+7/-6)
app/test-pmd/parameters.c (+1/-1)
app/test-pmd/testpmd.c (+3/-1)
app/test/meson.build (+13/-17)
app/test/test.h (+0/-2)
app/test/test_acl.c (+12/-10)
app/test/test_cryptodev.c (+4/-9)
app/test/test_cryptodev_blockcipher.c (+1/-1)
app/test/test_cryptodev_hash_test_vectors.h (+10/-0)
app/test/test_fib_perf.c (+1/-1)
app/test/test_flow_classify.c (+1/-1)
app/test/test_hash.c (+5/-2)
app/test/test_ipsec.c (+30/-3)
app/test/test_kvargs.c (+37/-3)
app/test/test_lpm_perf.c (+1/-1)
app/test/test_malloc.c (+12/-0)
app/test/test_mbuf.c (+1/-1)
app/test/test_pmd_perf.c (+1/-1)
app/test/test_table_pipeline.c (+7/-5)
buildtools/options-ibverbs-static.sh (+9/-2)
config/common_base (+0/-1)
config/meson.build (+26/-4)
debian/changelog (+26/-0)
debian/patches/19.11-remove-zero-copy-and-client-mode-restriction.patch (+56/-0)
debian/patches/series (+1/-6)
dev/null (+0/-80)
devtools/check-symbol-change.sh (+4/-6)
devtools/checkpatches.sh (+8/-0)
doc/api/doxy-api-index.md (+1/-1)
doc/api/doxy-api.conf.in (+1/-0)
doc/guides/conf.py (+17/-5)
doc/guides/contributing/abi_policy.rst (+10/-11)
doc/guides/contributing/abi_versioning.rst (+87/-43)
doc/guides/contributing/documentation.rst (+6/-6)
doc/guides/contributing/patches.rst (+10/-10)
doc/guides/contributing/stable.rst (+4/-4)
doc/guides/contributing/vulnerability.rst (+3/-3)
doc/guides/cryptodevs/aesni_gcm.rst (+13/-0)
doc/guides/cryptodevs/aesni_mb.rst (+13/-0)
doc/guides/cryptodevs/features/qat.ini (+5/-0)
doc/guides/cryptodevs/qat.rst (+5/-0)
doc/guides/eventdevs/index.rst (+1/-1)
doc/guides/freebsd_gsg/install_from_ports.rst (+1/-1)
doc/guides/linux_gsg/eal_args.include.rst (+1/-1)
doc/guides/linux_gsg/nic_perf_intel_platform.rst (+1/-1)
doc/guides/nics/enic.rst (+1/-1)
doc/guides/nics/fail_safe.rst (+1/-1)
doc/guides/nics/features/hns3.ini (+1/-0)
doc/guides/nics/features/hns3_vf.ini (+1/-0)
doc/guides/nics/features/i40e.ini (+0/-1)
doc/guides/nics/features/iavf.ini (+0/-1)
doc/guides/nics/features/ice.ini (+0/-1)
doc/guides/nics/features/igb.ini (+1/-0)
doc/guides/nics/features/ixgbe.ini (+1/-0)
doc/guides/nics/hns3.rst (+1/-0)
doc/guides/nics/i40e.rst (+9/-0)
doc/guides/nics/ice.rst (+0/-4)
doc/guides/nics/mlx5.rst (+46/-2)
doc/guides/prog_guide/cryptodev_lib.rst (+1/-1)
doc/guides/prog_guide/lto.rst (+1/-1)
doc/guides/rel_notes/release_19_11.rst (+575/-0)
doc/guides/sample_app_ug/l2_forward_event.rst (+0/-8)
doc/guides/sample_app_ug/l2_forward_real_virtual.rst (+0/-9)
doc/guides/sample_app_ug/link_status_intr.rst (+0/-7)
doc/guides/sample_app_ug/multi_process.rst (+1/-1)
doc/guides/testpmd_app_ug/testpmd_funcs.rst (+1/-1)
doc/guides/windows_gsg/build_dpdk.rst (+42/-9)
drivers/Makefile (+1/-1)
drivers/baseband/turbo_sw/bbdev_turbo_software.c (+1/-1)
drivers/bus/fslmc/qbman/qbman_debug.c (+5/-4)
drivers/bus/ifpga/ifpga_bus.c (+1/-0)
drivers/bus/ifpga/rte_bus_ifpga.h (+1/-0)
drivers/bus/pci/linux/pci.c (+5/-0)
drivers/bus/pci/pci_common.c (+3/-3)
drivers/bus/pci/pci_common_uio.c (+1/-0)
drivers/bus/pci/private.h (+0/-10)
drivers/bus/vmbus/linux/vmbus_uio.c (+1/-1)
drivers/bus/vmbus/vmbus_common.c (+1/-1)
drivers/common/octeontx/octeontx_mbox.c (+9/-8)
drivers/common/octeontx2/hw/otx2_npc.h (+2/-2)
drivers/compress/octeontx/otx_zip_pmd.c (+1/-1)
drivers/compress/zlib/zlib_pmd.c (+2/-0)
drivers/compress/zlib/zlib_pmd_private.h (+1/-1)
drivers/crypto/aesni_gcm/Makefile (+2/-1)
drivers/crypto/aesni_gcm/aesni_gcm_pmd.c (+2/-0)
drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h (+1/-1)
drivers/crypto/aesni_mb/Makefile (+2/-1)
drivers/crypto/aesni_mb/aesni_mb_pmd_private.h (+1/-1)
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c (+2/-0)
drivers/crypto/caam_jr/Makefile (+7/-0)
drivers/crypto/caam_jr/caam_jr.c (+19/-4)
drivers/crypto/caam_jr/caam_jr_hw_specific.h (+1/-1)
drivers/crypto/caam_jr/caam_jr_pvt.h (+5/-4)
drivers/crypto/caam_jr/caam_jr_uio.c (+22/-12)
drivers/crypto/caam_jr/meson.build (+5/-0)
drivers/crypto/ccp/ccp_dev.c (+1/-1)
drivers/crypto/dpaa2_sec/Makefile (+7/-0)
drivers/crypto/dpaa2_sec/meson.build (+5/-0)
drivers/crypto/dpaa_sec/Makefile (+7/-0)
drivers/crypto/dpaa_sec/meson.build (+5/-0)
drivers/crypto/kasumi/kasumi_pmd_private.h (+2/-2)
drivers/crypto/kasumi/rte_kasumi_pmd.c (+1/-0)
drivers/crypto/mvsam/mrvl_pmd_private.h (+1/-1)
drivers/crypto/mvsam/rte_mrvl_pmd.c (+1/-0)
drivers/crypto/nitrox/nitrox_csr.h (+10/-10)
drivers/crypto/nitrox/nitrox_sym.c (+2/-1)
drivers/crypto/octeontx2/otx2_cryptodev.c (+2/-0)
drivers/crypto/octeontx2/otx2_cryptodev.h (+1/-1)
drivers/crypto/octeontx2/otx2_cryptodev_ops.h (+1/-1)
drivers/crypto/openssl/openssl_pmd_private.h (+1/-1)
drivers/crypto/openssl/rte_openssl_pmd.c (+24/-0)
drivers/crypto/qat/qat_sym_capabilities.h (+105/-0)
drivers/crypto/qat/qat_sym_session.c (+110/-12)
drivers/crypto/qat/qat_sym_session.h (+1/-0)
drivers/crypto/snow3g/rte_snow3g_pmd.c (+1/-0)
drivers/crypto/snow3g/snow3g_pmd_private.h (+1/-1)
drivers/crypto/zuc/rte_zuc_pmd.c (+1/-0)
drivers/crypto/zuc/zuc_pmd_private.h (+2/-2)
drivers/event/dpaa2/dpaa2_eventdev.c (+1/-1)
drivers/event/dsw/dsw_event.c (+4/-11)
drivers/event/octeontx2/otx2_evdev_adptr.c (+2/-2)
drivers/event/octeontx2/otx2_evdev_stats.h (+1/-1)
drivers/mempool/dpaa2/meson.build (+2/-0)
drivers/mempool/octeontx2/otx2_mempool_ops.c (+1/-1)
drivers/net/avp/avp_ethdev.c (+1/-1)
drivers/net/bnxt/bnxt.h (+9/-4)
drivers/net/bnxt/bnxt_ethdev.c (+37/-21)
drivers/net/bnxt/bnxt_hwrm.c (+13/-16)
drivers/net/bnxt/bnxt_ring.c (+1/-1)
drivers/net/bnxt/bnxt_rxq.c (+1/-3)
drivers/net/bnxt/bnxt_rxr.c (+21/-15)
drivers/net/bnxt/bnxt_rxtx_vec_sse.c (+6/-1)
drivers/net/cxgbe/cxgbe_flow.c (+1/-1)
drivers/net/dpaa/dpaa_ethdev.c (+8/-15)
drivers/net/dpaa2/dpaa2_ethdev.c (+3/-5)
drivers/net/dpaa2/dpaa2_flow.c (+2/-2)
drivers/net/dpaa2/dpaa2_mux.c (+1/-1)
drivers/net/e1000/em_ethdev.c (+1/-1)
drivers/net/e1000/igb_ethdev.c (+2/-2)
drivers/net/ena/base/ena_com.c (+19/-11)
drivers/net/ena/base/ena_com.h (+16/-16)
drivers/net/ena/base/ena_plat_dpdk.h (+24/-15)
drivers/net/ena/ena_ethdev.c (+3/-4)
drivers/net/enetc/base/enetc_hw.h (+2/-1)
drivers/net/enetc/enetc_ethdev.c (+4/-1)
drivers/net/enic/enic_fm_flow.c (+29/-34)
drivers/net/failsafe/failsafe.c (+1/-0)
drivers/net/failsafe/failsafe_intr.c (+1/-1)
drivers/net/failsafe/failsafe_ops.c (+1/-1)
drivers/net/failsafe/failsafe_private.h (+8/-0)
drivers/net/hinic/base/hinic_compat.h (+10/-7)
drivers/net/hinic/base/hinic_pmd_api_cmd.c (+3/-4)
drivers/net/hinic/base/hinic_pmd_cmdq.c (+9/-3)
drivers/net/hinic/base/hinic_pmd_cmdq.h (+1/-0)
drivers/net/hinic/base/hinic_pmd_eqs.c (+1/-1)
drivers/net/hinic/base/hinic_pmd_hwdev.c (+25/-24)
drivers/net/hinic/base/hinic_pmd_hwdev.h (+0/-1)
drivers/net/hinic/base/hinic_pmd_mbox.c (+3/-5)
drivers/net/hinic/base/hinic_pmd_mgmt.c (+21/-17)
drivers/net/hinic/base/hinic_pmd_mgmt.h (+2/-0)
drivers/net/hinic/base/hinic_pmd_nicio.c (+15/-5)
drivers/net/hinic/base/hinic_pmd_wq.c (+6/-5)
drivers/net/hinic/base/hinic_pmd_wq.h (+1/-1)
drivers/net/hinic/hinic_pmd_ethdev.c (+7/-17)
drivers/net/hinic/hinic_pmd_rx.c (+56/-17)
drivers/net/hinic/hinic_pmd_rx.h (+4/-1)
drivers/net/hinic/hinic_pmd_tx.c (+16/-8)
drivers/net/hinic/hinic_pmd_tx.h (+3/-1)
drivers/net/hns3/hns3_cmd.c (+18/-6)
drivers/net/hns3/hns3_cmd.h (+47/-2)
drivers/net/hns3/hns3_dcb.c (+74/-29)
drivers/net/hns3/hns3_dcb.h (+3/-1)
drivers/net/hns3/hns3_ethdev.c (+492/-79)
drivers/net/hns3/hns3_ethdev.h (+16/-2)
drivers/net/hns3/hns3_ethdev_vf.c (+382/-49)
drivers/net/hns3/hns3_fdir.c (+21/-0)
drivers/net/hns3/hns3_flow.c (+25/-3)
drivers/net/hns3/hns3_intr.c (+2/-0)
drivers/net/hns3/hns3_mbx.c (+8/-4)
drivers/net/hns3/hns3_mbx.h (+13/-0)
drivers/net/hns3/hns3_regs.h (+10/-0)
drivers/net/hns3/hns3_rss.c (+24/-11)
drivers/net/hns3/hns3_rss.h (+2/-0)
drivers/net/hns3/hns3_rxtx.c (+753/-170)
drivers/net/hns3/hns3_rxtx.h (+20/-2)
drivers/net/hns3/hns3_stats.c (+17/-7)
drivers/net/i40e/base/README (+1/-1)
drivers/net/i40e/base/i40e_adminq.c (+1/-1)
drivers/net/i40e/base/i40e_adminq.h (+1/-1)
drivers/net/i40e/base/i40e_adminq_cmd.h (+1/-1)
drivers/net/i40e/base/i40e_alloc.h (+1/-1)
drivers/net/i40e/base/i40e_common.c (+1/-1)
drivers/net/i40e/base/i40e_dcb.c (+1/-1)
drivers/net/i40e/base/i40e_dcb.h (+1/-1)
drivers/net/i40e/base/i40e_devids.h (+1/-1)
drivers/net/i40e/base/i40e_diag.c (+1/-1)
drivers/net/i40e/base/i40e_diag.h (+1/-1)
drivers/net/i40e/base/i40e_hmc.c (+1/-1)
drivers/net/i40e/base/i40e_hmc.h (+1/-1)
drivers/net/i40e/base/i40e_lan_hmc.c (+1/-1)
drivers/net/i40e/base/i40e_lan_hmc.h (+1/-1)
drivers/net/i40e/base/i40e_nvm.c (+1/-1)
drivers/net/i40e/base/i40e_osdep.h (+1/-1)
drivers/net/i40e/base/i40e_prototype.h (+1/-1)
drivers/net/i40e/base/i40e_register.h (+1/-1)
drivers/net/i40e/base/i40e_status.h (+1/-1)
drivers/net/i40e/base/i40e_type.h (+1/-1)
drivers/net/i40e/base/meson.build (+1/-1)
drivers/net/i40e/base/virtchnl.h (+1/-1)
drivers/net/i40e/i40e_ethdev.c (+35/-96)
drivers/net/i40e/i40e_ethdev_vf.c (+0/-2)
drivers/net/i40e/i40e_fdir.c (+2/-2)
drivers/net/i40e/i40e_flow.c (+40/-18)
drivers/net/i40e/i40e_rxtx.c (+30/-1)
drivers/net/i40e/i40e_rxtx_vec_altivec.c (+1/-1)
drivers/net/i40e/i40e_rxtx_vec_common.h (+1/-0)
drivers/net/i40e/i40e_rxtx_vec_neon.c (+4/-2)
drivers/net/iavf/base/README (+1/-1)
drivers/net/iavf/base/iavf_adminq.c (+1/-1)
drivers/net/iavf/base/iavf_adminq.h (+1/-1)
drivers/net/iavf/base/iavf_alloc.h (+1/-1)
drivers/net/iavf/base/iavf_common.c (+1/-1)
drivers/net/iavf/base/iavf_devids.h (+1/-1)
drivers/net/iavf/base/iavf_osdep.h (+1/-1)
drivers/net/iavf/base/iavf_status.h (+1/-1)
drivers/net/iavf/base/virtchnl.h (+1/-1)
drivers/net/iavf/iavf_ethdev.c (+1/-1)
drivers/net/iavf/iavf_rxtx_vec_common.h (+1/-0)
drivers/net/iavf/iavf_vchnl.c (+40/-1)
drivers/net/ice/base/ice_adminq_cmd.h (+5/-7)
drivers/net/ice/base/ice_alloc.h (+1/-1)
drivers/net/ice/base/ice_bitops.h (+1/-1)
drivers/net/ice/base/ice_common.c (+3/-5)
drivers/net/ice/base/ice_common.h (+1/-1)
drivers/net/ice/base/ice_controlq.c (+1/-1)
drivers/net/ice/base/ice_controlq.h (+1/-1)
drivers/net/ice/base/ice_dcb.c (+1/-1)
drivers/net/ice/base/ice_dcb.h (+1/-1)
drivers/net/ice/base/ice_devids.h (+1/-1)
drivers/net/ice/base/ice_fdir.c (+1/-1)
drivers/net/ice/base/ice_fdir.h (+4/-4)
drivers/net/ice/base/ice_flex_pipe.c (+22/-32)
drivers/net/ice/base/ice_flex_pipe.h (+2/-2)
drivers/net/ice/base/ice_flex_type.h (+1/-1)
drivers/net/ice/base/ice_flow.c (+33/-18)
drivers/net/ice/base/ice_flow.h (+3/-1)
drivers/net/ice/base/ice_hw_autogen.h (+1/-1)
drivers/net/ice/base/ice_lan_tx_rx.h (+1/-1)
drivers/net/ice/base/ice_nvm.c (+1/-1)
drivers/net/ice/base/ice_nvm.h (+1/-1)
drivers/net/ice/base/ice_osdep.h (+16/-2)
drivers/net/ice/base/ice_protocol_type.h (+1/-1)
drivers/net/ice/base/ice_sbq_cmd.h (+1/-1)
drivers/net/ice/base/ice_sched.c (+52/-9)
drivers/net/ice/base/ice_sched.h (+7/-2)
drivers/net/ice/base/ice_status.h (+1/-1)
drivers/net/ice/base/ice_switch.c (+8/-18)
drivers/net/ice/base/ice_switch.h (+1/-1)
drivers/net/ice/base/ice_type.h (+4/-2)
drivers/net/ice/base/meson.build (+1/-1)
drivers/net/ice/ice_ethdev.c (+26/-24)
drivers/net/ice/ice_fdir_filter.c (+15/-2)
drivers/net/ice/ice_generic_flow.c (+10/-21)
drivers/net/ice/ice_hash.c (+18/-9)
drivers/net/ice/ice_rxtx.c (+10/-51)
drivers/net/ice/ice_rxtx_vec_common.h (+1/-0)
drivers/net/ice/ice_switch_filter.c (+65/-6)
drivers/net/ipn3ke/ipn3ke_representor.c (+2/-1)
drivers/net/ixgbe/base/README (+1/-1)
drivers/net/ixgbe/base/ixgbe_82598.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_82598.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_82599.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_82599.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_api.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_api.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_common.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_common.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb_82598.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb_82598.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb_82599.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_dcb_82599.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_hv_vf.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_hv_vf.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_mbx.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_mbx.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_osdep.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_phy.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_phy.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_type.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_vf.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_vf.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_x540.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_x540.h (+1/-1)
drivers/net/ixgbe/base/ixgbe_x550.c (+1/-1)
drivers/net/ixgbe/base/ixgbe_x550.h (+1/-1)
drivers/net/ixgbe/base/meson.build (+1/-1)
drivers/net/ixgbe/ixgbe_ethdev.c (+43/-17)
drivers/net/ixgbe/rte_pmd_ixgbe.c (+6/-0)
drivers/net/memif/memif_socket.c (+8/-6)
drivers/net/memif/rte_eth_memif.c (+1/-1)
drivers/net/mlx4/mlx4.c (+4/-0)
drivers/net/mlx4/mlx4_flow.c (+6/-5)
drivers/net/mlx4/mlx4_glue.h (+1/-1)
drivers/net/mlx4/mlx4_rxtx.h (+1/-1)
drivers/net/mlx5/Makefile (+5/-0)
drivers/net/mlx5/meson.build (+2/-0)
drivers/net/mlx5/mlx5.c (+35/-11)
drivers/net/mlx5/mlx5.h (+6/-7)
drivers/net/mlx5/mlx5_defs.h (+3/-0)
drivers/net/mlx5/mlx5_devx_cmds.c (+3/-6)
drivers/net/mlx5/mlx5_flow.c (+97/-74)
drivers/net/mlx5/mlx5_flow.h (+27/-5)
drivers/net/mlx5/mlx5_flow_dv.c (+338/-121)
drivers/net/mlx5/mlx5_flow_verbs.c (+25/-3)
drivers/net/mlx5/mlx5_glue.c (+1/-1)
drivers/net/mlx5/mlx5_glue.h (+1/-1)
drivers/net/mlx5/mlx5_nl.c (+19/-8)
drivers/net/mlx5/mlx5_prm.h (+3/-1)
drivers/net/mlx5/mlx5_rxq.c (+46/-34)
drivers/net/mlx5/mlx5_rxtx.c (+86/-66)
drivers/net/mlx5/mlx5_rxtx.h (+4/-2)
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h (+23/-4)
drivers/net/mlx5/mlx5_rxtx_vec_neon.h (+34/-13)
drivers/net/mlx5/mlx5_rxtx_vec_sse.h (+34/-14)
drivers/net/mlx5/mlx5_stats.c (+62/-16)
drivers/net/mlx5/mlx5_trigger.c (+2/-0)
drivers/net/mlx5/mlx5_txq.c (+1/-1)
drivers/net/mlx5/mlx5_utils.h (+0/-10)
drivers/net/mvneta/mvneta_ethdev.c (+1/-1)
drivers/net/mvpp2/mrvl_flow.c (+2/-2)
drivers/net/netvsc/hn_ethdev.c (+32/-22)
drivers/net/netvsc/hn_nvs.c (+39/-2)
drivers/net/netvsc/hn_nvs.h (+1/-1)
drivers/net/netvsc/hn_rxtx.c (+169/-112)
drivers/net/netvsc/hn_var.h (+7/-5)
drivers/net/netvsc/hn_vf.c (+13/-0)
drivers/net/nfp/nfp_net.c (+13/-12)
drivers/net/null/rte_eth_null.c (+13/-16)
drivers/net/octeontx/base/meson.build (+4/-1)
drivers/net/octeontx/octeontx_ethdev.c (+1/-0)
drivers/net/octeontx2/otx2_ethdev.c (+16/-8)
drivers/net/octeontx2/otx2_ethdev.h (+3/-0)
drivers/net/octeontx2/otx2_ethdev_irq.c (+32/-6)
drivers/net/octeontx2/otx2_link.c (+37/-12)
drivers/net/octeontx2/otx2_rss.c (+1/-1)
drivers/net/pfe/pfe_ethdev.c (+3/-4)
drivers/net/qede/qede_ethdev.c (+23/-12)
drivers/net/qede/qede_rxtx.c (+3/-1)
drivers/net/ring/rte_eth_ring.c (+15/-14)
drivers/net/sfc/base/ef10_evb.c (+12/-16)
drivers/net/sfc/base/ef10_filter.c (+414/-148)
drivers/net/sfc/base/ef10_impl.h (+3/-1)
drivers/net/sfc/base/ef10_nic.c (+1/-3)
drivers/net/sfc/base/ef10_proxy.c (+2/-6)
drivers/net/sfc/base/efx.h (+8/-5)
drivers/net/sfc/base/efx_evb.c (+2/-2)
drivers/net/sfc/base/efx_filter.c (+21/-5)
drivers/net/sfc/base/efx_impl.h (+20/-1)
drivers/net/sfc/base/efx_proxy.c (+2/-2)
drivers/net/sfc/sfc.c (+1/-1)
drivers/net/sfc/sfc_ethdev.c (+16/-4)
drivers/net/sfc/sfc_flow.c (+1/-0)
drivers/net/sfc/sfc_rx.c (+5/-1)
drivers/net/softnic/rte_eth_softnic_thread.c (+0/-38)
drivers/net/tap/rte_eth_tap.c (+91/-55)
drivers/net/tap/tap_flow.c (+4/-4)
drivers/net/tap/tap_intr.c (+1/-2)
drivers/net/thunderx/nicvf_ethdev.c (+9/-8)
drivers/net/vhost/rte_eth_vhost.c (+7/-9)
drivers/net/virtio/virtio_ethdev.c (+3/-3)
drivers/net/virtio/virtio_rxtx.c (+3/-3)
drivers/net/virtio/virtio_rxtx_simple_altivec.c (+1/-2)
drivers/net/virtio/virtio_user_ethdev.c (+13/-7)
drivers/net/virtio/virtqueue.c (+2/-0)
drivers/net/vmxnet3/vmxnet3_ethdev.c (+2/-1)
drivers/net/vmxnet3/vmxnet3_ethdev.h (+4/-0)
drivers/net/vmxnet3/vmxnet3_rxtx.c (+13/-1)
examples/eventdev_pipeline/main.c (+11/-6)
examples/eventdev_pipeline/pipeline_common.h (+2/-2)
examples/fips_validation/fips_validation.c (+18/-0)
examples/ioat/ioatfwd.c (+1/-1)
examples/ip_fragmentation/main.c (+1/-1)
examples/ip_pipeline/thread.c (+0/-44)
examples/ip_reassembly/main.c (+1/-1)
examples/ipsec-secgw/ipsec-secgw.c (+1/-1)
examples/ipsec-secgw/ipsec_process.c (+1/-0)
examples/ipv4_multicast/main.c (+1/-1)
examples/kni/main.c (+28/-4)
examples/l2fwd-crypto/main.c (+1/-1)
examples/l2fwd-event/main.c (+1/-1)
examples/l2fwd-jobstats/main.c (+1/-1)
examples/l2fwd-keepalive/main.c (+12/-8)
examples/l2fwd/main.c (+1/-1)
examples/l3fwd-acl/main.c (+1/-1)
examples/l3fwd-power/main.c (+1/-1)
examples/l3fwd/main.c (+1/-1)
examples/link_status_interrupt/main.c (+1/-1)
examples/multi_process/client_server_mp/mp_server/init.c (+1/-1)
examples/multi_process/symmetric_mp/main.c (+1/-1)
examples/performance-thread/l3fwd-thread/main.c (+1/-1)
examples/qos_sched/cfg_file.c (+3/-0)
examples/qos_sched/init.c (+1/-1)
examples/qos_sched/main.h (+2/-2)
examples/server_node_efd/server/init.c (+1/-1)
examples/vhost_blk/vhost_blk.c (+2/-0)
examples/vhost_blk/vhost_blk.h (+2/-2)
examples/vm_power_manager/channel_manager.c (+2/-1)
examples/vm_power_manager/channel_manager.h (+2/-7)
examples/vm_power_manager/main.c (+1/-1)
examples/vm_power_manager/power_manager.c (+0/-1)
examples/vmdq/main.c (+39/-9)
kernel/freebsd/contigmem/contigmem.c (+3/-1)
lib/Makefile (+1/-1)
lib/librte_bbdev/rte_bbdev.h (+8/-8)
lib/librte_bbdev/rte_bbdev_op.h (+8/-8)
lib/librte_bbdev/rte_bbdev_pmd.h (+7/-7)
lib/librte_cryptodev/rte_crypto_sym.h (+5/-2)
lib/librte_cryptodev/rte_cryptodev.c (+39/-4)
lib/librte_eal/common/eal_common_fbarray.c (+1/-1)
lib/librte_eal/common/eal_common_log.c (+1/-1)
lib/librte_eal/common/eal_common_memory.c (+1/-1)
lib/librte_eal/common/eal_common_options.c (+1/-1)
lib/librte_eal/common/include/arch/arm/rte_cycles_32.h (+1/-1)
lib/librte_eal/common/include/arch/arm/rte_cycles_64.h (+1/-1)
lib/librte_eal/common/include/arch/ppc_64/meson.build (+1/-0)
lib/librte_eal/common/include/arch/ppc_64/rte_altivec.h (+22/-0)
lib/librte_eal/common/include/arch/ppc_64/rte_memcpy.h (+13/-2)
lib/librte_eal/common/include/arch/ppc_64/rte_vect.h (+2/-1)
lib/librte_eal/common/include/arch/x86/rte_atomic.h (+1/-1)
lib/librte_eal/common/include/arch/x86/rte_memcpy.h (+9/-0)
lib/librte_eal/common/include/generic/rte_byteorder.h (+3/-3)
lib/librte_eal/common/include/rte_common.h (+2/-2)
lib/librte_eal/common/include/rte_service.h (+6/-2)
lib/librte_eal/common/include/rte_service_component.h (+5/-1)
lib/librte_eal/common/malloc_elem.c (+1/-1)
lib/librte_eal/common/malloc_heap.c (+3/-0)
lib/librte_eal/common/rte_random.c (+1/-1)
lib/librte_eal/common/rte_service.c (+27/-47)
lib/librte_eal/freebsd/eal/eal_interrupts.c (+43/-36)
lib/librte_eal/freebsd/eal/eal_memory.c (+1/-1)
lib/librte_eal/linux/eal/eal.c (+1/-1)
lib/librte_eal/linux/eal/eal_memalloc.c (+1/-1)
lib/librte_eal/linux/eal/eal_memory.c (+20/-4)
lib/librte_eal/linux/eal/eal_vfio.c (+4/-2)
lib/librte_ethdev/ethdev_profile.h (+9/-0)
lib/librte_ethdev/rte_ethdev.c (+5/-5)
lib/librte_ethdev/rte_flow.c (+1/-1)
lib/librte_ethdev/rte_flow.h (+1/-1)
lib/librte_eventdev/rte_eventdev.c (+8/-5)
lib/librte_eventdev/rte_eventdev_pmd_pci.h (+5/-3)
lib/librte_fib/rte_fib.h (+8/-0)
lib/librte_fib/rte_fib6.h (+8/-0)
lib/librte_ipsec/ipsec_sad.c (+2/-0)
lib/librte_ipsec/sa.h (+1/-1)
lib/librte_kvargs/rte_kvargs.c (+2/-0)
lib/librte_kvargs/rte_kvargs.h (+1/-1)
lib/librte_lpm/rte_lpm6.c (+5/-4)
lib/librte_mempool/rte_mempool_version.map (+0/-4)
lib/librte_pci/rte_pci.c (+15/-2)
lib/librte_pci/rte_pci.h (+0/-6)
lib/librte_security/rte_security.c (+54/-16)
lib/librte_security/rte_security.h (+5/-3)
lib/librte_telemetry/rte_telemetry_parser.c (+1/-1)
lib/librte_timer/rte_timer.c (+14/-10)
lib/librte_vhost/iotlb.c (+3/-2)
lib/librte_vhost/rte_vhost.h (+6/-1)
lib/librte_vhost/socket.c (+6/-0)
lib/librte_vhost/vhost.h (+0/-1)
lib/librte_vhost/vhost_crypto.c (+19/-1)
lib/librte_vhost/vhost_user.c (+32/-8)
lib/librte_vhost/virtio_net.c (+98/-91)
lib/meson.build (+6/-2)
mk/rte.app.mk (+4/-0)
mk/toolchain/gcc/rte.vars.mk (+5/-0)
usertools/dpdk-pmdinfo.py (+4/-1)
Reviewer Review Type Date Requested Status
Rafael David Tinoco (community) Approve
Canonical Server Pending
Canonical Server packageset reviewers Pending
git-ubuntu developers Pending
Review via email: mp+386722@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

Intentionally not taking any of the latter packaging changes as they might change the SRU too much.
Instead these are clean cherry-picks from the upstream branches.
At https://salsa.debian.org/debian/dpdk/-/tree/upstream-19.11-stable there are gbp import based commits to pick for that which I did.

If you look at just the diff you'll see a lot due to the upstream changes, but commit by commit they should be easy to review.

A few changes were droppable due to upstream integrating them.

Upstream identified one follow up fix scheduled for 19.11.4 which from an SRU POV makes sense to be added now.

PPA: https://launchpad.net/~ci-train-ppa-service/+archive/ubuntu/4130/+packages

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

Ill review this one...

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

In Debian: (origin/upstream-19.11-stable)

018c283f New upstream version 19.11.3
729f04dc New upstream version 19.11.2
21762127 New upstream version 19.11.1
47dc7e92 New upstream version 19.11
7903129b New upstream version 19.08

$ git log -1 -p 018c283f | diffstat -s
 483 files changed, 7001 insertions(+), 2813 deletions(-)

$ git log -1 -p 729f04dc | diffstat -s
 5 files changed, 108 insertions(+), 8 deletions(-)

----

In Ubuntu (merge-19.11.3-FOCAL)

f868d03e7 New upstream version 19.11.3

$ git log -1 -p f868d03e7 | diffstat -s
 483 files changed, 7001 insertions(+), 2813 deletions(-)

9de17eb92 New upstream version 19.11.2

$ git log -1 -p 9de17eb92 | diffstat -s
 5 files changed, 108 insertions(+), 8 deletions(-)

Pretty much the same.. analysing the delta now...

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

For commit:

    - drop security patches being included in 19.11.3
      - d/p/0001-vhost-check-log-mmap-offset-and-size-overflow.patch
      - d/p/0002-vhost-fix-vring-index-check.patch
      - d/p/0003-vhost-crypto-validate-keys-lengths.patch
      - d/p/0004-vhost-fix-translated-address-not-checked.patch
      - d/p/0005-vhost-fix-potential-memory-space-leak.patch
      - d/p/0006-vhost-fix-potential-fd-leak.patch

I could cleanly revert all of them when having commit "19.11.3" as HEAD:

$ patch -p1 -R < ./debian/patches/0006-vhost-fix-potential-fd-leak.patch
patching file lib/librte_vhost/vhost_user.c

$ patch -p1 -R < ./debian/patches/0005-vhost-fix-potential-memory-space-leak.patch
patching file lib/librte_vhost/vhost_user.c

$ patch -p1 -R < ./debian/patches/0004-vhost-fix-translated-address-not-checked.patch
patching file lib/librte_vhost/virtio_net.c
Hunk #1 succeeded at 1072 (offset -14 lines).
Hunk #2 succeeded at 1853 (offset 12 lines).

$ patch -p1 -R < ./debian/patches/0003-vhost-crypto-validate-keys-lengths.patch
patching file lib/librte_vhost/vhost_crypto.c
Hunk #1 succeeded at 238 (offset 1 line).
Hunk #2 succeeded at 288 (offset 1 line).
Hunk #3 succeeded at 302 (offset 1 line).

$ patch -p1 -R < ./debian/patches/0002-vhost-fix-vring-index-check.patch
patching file lib/librte_vhost/vhost_user.c

$ patch -p1 -R < ./debian/patches/0001-vhost-check-log-mmap-offset-and-size-overflow.patch
patching file lib/librte_vhost/vhost_user.c

So its all good.

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

commit 4ac6d9854
Author: Christian Ehrhardt <email address hidden>
Date: Thu Jul 2 07:00:21 2020

    d/p/19.11-remove-zero-copy-and-client-mode-restriction.patch

Seems like a clean cherry-pick and proper fix of behavior change.

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

# CHECKLIST
----------------------------
 [!] changelog entry correct:
     - I would squash last 2 commits as this hasn't
       been pushed yet
 [.] targeted to correct codename
 [.] version number is correct
     - 19.11.3-0ubuntu0.1 seems appropriate for focal
     - 19.11.3-1ubuntuX would be set for groovy
       dev or even 0.X if just SRUs
 [.] update-maintainer has been run before
 ----
 [-] changes forwarded upstream/debian (if appropriate)
 [.] patches match what was proposed upstream
 ----
 [.] patches correctly included in debian/patches/series?
 [.] patches have correct DEP3 metadata
 ----
 [.] relying on PPA only for build check ?
 [-] if relying on PPA, did it install correctly ?
     - I'll rely on your functional tests, doing logical
       review only. Let me know if you need more, pls.
 ----
 [-] if building locally, was source build good ?
 [-] if building locally, was binary build good ?
 ----
 [-] was autopkgtest tested ?
 ----
 [.] is this a SRU ?
 [.] if a SRU, does the public bug have a template ?
 [.] is this a bundle of fixes ?
 ----
 [.] is this a MERGE ?
 [.] if MERGE, is there a public bug referred ?
 [.] if MERGE, does it add/remove existing packages ?
 [-] if MERGE, does it bump library SONAME ?
     - upstream microrelease take
----------------------------
 [.] = ok | [x] = not ok | [?] = question | [!] = note | [-] = n/a
----------------------------

# comments:

 dpdk | 2.2.0-0ubuntu7 | xenial | source
 dpdk | 2.2.0-0ubuntu8 | xenial-updates | source
 dpdk | 17.11.1-6 | bionic | source
 dpdk | 17.11.9-0ubuntu18.04.2 | bionic-security | source
 dpdk | 17.11.9-0ubuntu18.04.2 | bionic-updates | source
 dpdk | 18.11.2-4 | eoan | source
 dpdk | 18.11.5-0ubuntu0.19.10.2 | eoan-security | source
 dpdk | 18.11.5-0ubuntu0.19.10.2 | eoan-updates | source
 dpdk | 19.11.1-0ubuntu1 | focal | source
 dpdk | 19.11.1-0ubuntu1.1 | focal-security | source
 dpdk | 19.11.1-0ubuntu1.1 | focal-updates | source
 dpdk | 19.11.3-1 | groovy | source

All good, +1.

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

To ssh://git.launchpad.net/~usd-import-team/ubuntu/+source/dpdk
 * [new tag] upload/19.11.3-0ubuntu0.1 -> upload/19.11.3-0ubuntu0.1

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.travis.yml b/.travis.yml
2index 0bb47c1..77ac26d 100644
3--- a/.travis.yml
4+++ b/.travis.yml
5@@ -21,7 +21,7 @@ _aarch64_packages: &aarch64_packages
6
7 _extra_packages: &extra_packages
8 - *required_packages
9- - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4]
10+ - [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson-dev]
11
12 _build_32b_packages: &build_32b_packages
13 - *required_packages
14diff --git a/VERSION b/VERSION
15index 6a16e51..a43c349 100644
16--- a/VERSION
17+++ b/VERSION
18@@ -1 +1 @@
19-19.11.1
20+19.11.3
21diff --git a/app/pdump/main.c b/app/pdump/main.c
22index d05a023..c38c537 100644
23--- a/app/pdump/main.c
24+++ b/app/pdump/main.c
25@@ -151,7 +151,7 @@ static uint8_t multiple_core_capture;
26 static void
27 pdump_usage(const char *prgname)
28 {
29- printf("usage: %s [EAL options]"
30+ printf("usage: %s [EAL options] --"
31 " --["CMD_LINE_OPT_MULTI"]\n"
32 " --"CMD_LINE_OPT_PDUMP" "
33 "'(port=<port id> | device_id=<pci id or vdev name>),"
34diff --git a/app/test-acl/main.c b/app/test-acl/main.c
35index 57f2394..08f06c1 100644
36--- a/app/test-acl/main.c
37+++ b/app/test-acl/main.c
38@@ -12,7 +12,7 @@
39 #include <rte_lcore.h>
40 #include <rte_ip.h>
41
42-#define PRINT_USAGE_START "%s [EAL options]\n"
43+#define PRINT_USAGE_START "%s [EAL options] --\n"
44
45 #define RTE_LOGTYPE_TESTACL RTE_LOGTYPE_USER1
46
47diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
48index 52a1860..7bb286c 100644
49--- a/app/test-crypto-perf/main.c
50+++ b/app/test-crypto-perf/main.c
51@@ -582,7 +582,8 @@ main(int argc, char **argv)
52 goto err;
53 }
54
55- if (!opts.silent)
56+ if (!opts.silent && opts.test != CPERF_TEST_TYPE_THROUGHPUT &&
57+ opts.test != CPERF_TEST_TYPE_LATENCY)
58 show_test_vector(t_vec);
59
60 total_nb_qps = nb_cryptodevs * opts.nb_qps;
61diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c
62index fa91bf2..126e216 100644
63--- a/app/test-eventdev/test_pipeline_common.c
64+++ b/app/test-eventdev/test_pipeline_common.c
65@@ -385,12 +385,16 @@ pipeline_event_tx_adapter_setup(struct evt_options *opt,
66 if (!(cap & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT)) {
67 uint32_t service_id = -1U;
68
69- rte_event_eth_tx_adapter_service_id_get(consm,
70- &service_id);
71+ ret = rte_event_eth_tx_adapter_service_id_get(consm,
72+ &service_id);
73+ if (ret != -ESRCH && ret != 0) {
74+ evt_err("Failed to get Tx adptr service ID");
75+ return ret;
76+ }
77 ret = evt_service_setup(service_id);
78 if (ret) {
79 evt_err("Failed to setup service core"
80- " for Tx adapter\n");
81+ " for Tx adapter");
82 return ret;
83 }
84 }
85diff --git a/app/test-pipeline/config.c b/app/test-pipeline/config.c
86index 28ac9fc..33f3f1c 100644
87--- a/app/test-pipeline/config.c
88+++ b/app/test-pipeline/config.c
89@@ -42,8 +42,6 @@
90
91 #include "main.h"
92
93-struct app_params app;
94-
95 static const char usage[] = "\n";
96
97 void
98diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
99index d9f5f6f..d508d1e 100644
100--- a/app/test-pmd/cmdline.c
101+++ b/app/test-pmd/cmdline.c
102@@ -94,7 +94,7 @@ static void cmd_help_brief_parsed(__attribute__((unused)) void *parsed_result,
103 " help ports : Configuring ports.\n"
104 " help registers : Reading and setting port registers.\n"
105 " help filters : Filters configuration help.\n"
106- " help traffic_management : Traffic Management commmands.\n"
107+ " help traffic_management : Traffic Management commands.\n"
108 " help devices : Device related cmds.\n"
109 " help all : All of the above sections.\n\n"
110 );
111@@ -5122,7 +5122,7 @@ cmd_gso_size_parsed(void *parsed_result,
112
113 if (test_done == 0) {
114 printf("Before setting GSO segsz, please first"
115- " stop fowarding\n");
116+ " stop forwarding\n");
117 return;
118 }
119
120@@ -16805,8 +16805,10 @@ cmd_ddp_get_list_parsed(
121 #ifdef RTE_LIBRTE_I40E_PMD
122 size = PROFILE_INFO_SIZE * MAX_PROFILE_NUM + 4;
123 p_list = (struct rte_pmd_i40e_profile_list *)malloc(size);
124- if (!p_list)
125+ if (!p_list) {
126 printf("%s: Failed to malloc buffer\n", __func__);
127+ return;
128+ }
129
130 if (ret == -ENOTSUP)
131 ret = rte_pmd_i40e_get_ddp_list(res->port_id,
132diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
133index f059978..deced65 100644
134--- a/app/test-pmd/cmdline_flow.c
135+++ b/app/test-pmd/cmdline_flow.c
136@@ -1005,7 +1005,6 @@ static const enum index item_pppoes[] = {
137 };
138
139 static const enum index item_pppoe_proto_id[] = {
140- ITEM_PPPOE_PROTO_ID,
141 ITEM_NEXT,
142 ZERO,
143 };
144@@ -2544,11 +2543,14 @@ static const struct token token_list[] = {
145 session_id)),
146 },
147 [ITEM_PPPOE_PROTO_ID] = {
148- .name = "proto_id",
149+ .name = "pppoe_proto_id",
150 .help = "match PPPoE session protocol identifier",
151 .priv = PRIV_ITEM(PPPOE_PROTO_ID,
152 sizeof(struct rte_flow_item_pppoe_proto_id)),
153- .next = NEXT(item_pppoe_proto_id),
154+ .next = NEXT(item_pppoe_proto_id, NEXT_ENTRY(UNSIGNED),
155+ item_param),
156+ .args = ARGS(ARGS_ENTRY_HTON
157+ (struct rte_flow_item_pppoe_proto_id, proto_id)),
158 .call = parse_vc,
159 },
160 [ITEM_HIGIG2] = {
161diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
162index 62e547b..42eba68 100644
163--- a/app/test-pmd/config.c
164+++ b/app/test-pmd/config.c
165@@ -223,11 +223,26 @@ nic_stats_display(portid_t port_id)
166 void
167 nic_stats_clear(portid_t port_id)
168 {
169+ int ret;
170+
171 if (port_id_is_invalid(port_id, ENABLED_WARN)) {
172 print_valid_ports();
173 return;
174 }
175- rte_eth_stats_reset(port_id);
176+
177+ ret = rte_eth_stats_reset(port_id);
178+ if (ret != 0) {
179+ printf("%s: Error: failed to reset stats (port %u): %s",
180+ __func__, port_id, strerror(ret));
181+ return;
182+ }
183+
184+ ret = rte_eth_stats_get(port_id, &ports[port_id].stats);
185+ if (ret != 0) {
186+ printf("%s: Error: failed to get stats (port %u): %s",
187+ __func__, port_id, strerror(ret));
188+ return;
189+ }
190 printf("\n NIC statistics for port %d cleared\n", port_id);
191 }
192
193@@ -303,10 +318,19 @@ nic_xstats_clear(portid_t port_id)
194 print_valid_ports();
195 return;
196 }
197+
198 ret = rte_eth_xstats_reset(port_id);
199 if (ret != 0) {
200 printf("%s: Error: failed to reset xstats (port %u): %s",
201 __func__, port_id, strerror(ret));
202+ return;
203+ }
204+
205+ ret = rte_eth_stats_get(port_id, &ports[port_id].stats);
206+ if (ret != 0) {
207+ printf("%s: Error: failed to get stats (port %u): %s",
208+ __func__, port_id, strerror(ret));
209+ return;
210 }
211 }
212
213diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
214index 25091de..7b92ab1 100644
215--- a/app/test-pmd/csumonly.c
216+++ b/app/test-pmd/csumonly.c
217@@ -139,22 +139,23 @@ parse_ipv6(struct rte_ipv6_hdr *ipv6_hdr, struct testpmd_offload_info *info)
218
219 /*
220 * Parse an ethernet header to fill the ethertype, l2_len, l3_len and
221- * ipproto. This function is able to recognize IPv4/IPv6 with one optional vlan
222- * header. The l4_len argument is only set in case of TCP (useful for TSO).
223+ * ipproto. This function is able to recognize IPv4/IPv6 with optional VLAN
224+ * headers. The l4_len argument is only set in case of TCP (useful for TSO).
225 */
226 static void
227 parse_ethernet(struct rte_ether_hdr *eth_hdr, struct testpmd_offload_info *info)
228 {
229 struct rte_ipv4_hdr *ipv4_hdr;
230 struct rte_ipv6_hdr *ipv6_hdr;
231+ struct rte_vlan_hdr *vlan_hdr;
232
233 info->l2_len = sizeof(struct rte_ether_hdr);
234 info->ethertype = eth_hdr->ether_type;
235
236- if (info->ethertype == _htons(RTE_ETHER_TYPE_VLAN)) {
237- struct rte_vlan_hdr *vlan_hdr = (
238- struct rte_vlan_hdr *)(eth_hdr + 1);
239-
240+ while (info->ethertype == _htons(RTE_ETHER_TYPE_VLAN) ||
241+ info->ethertype == _htons(RTE_ETHER_TYPE_QINQ)) {
242+ vlan_hdr = (struct rte_vlan_hdr *)
243+ ((char *)eth_hdr + info->l2_len);
244 info->l2_len += sizeof(struct rte_vlan_hdr);
245 info->ethertype = vlan_hdr->eth_proto;
246 }
247diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
248index 2e7a504..0eb7844 100644
249--- a/app/test-pmd/parameters.c
250+++ b/app/test-pmd/parameters.c
251@@ -49,7 +49,7 @@
252 static void
253 usage(char* progname)
254 {
255- printf("usage: %s "
256+ printf("usage: %s [EAL options] -- "
257 #ifdef RTE_LIBRTE_CMDLINE
258 "[--interactive|-i] "
259 "[--cmdline-file=FILENAME] "
260diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
261index 31361e4..0b12659 100644
262--- a/app/test-pmd/testpmd.c
263+++ b/app/test-pmd/testpmd.c
264@@ -2752,7 +2752,7 @@ check_all_ports_link_status(uint32_t port_mask)
265 "Port%d Link Up. speed %u Mbps- %s\n",
266 portid, link.link_speed,
267 (link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
268- ("full-duplex") : ("half-duplex\n"));
269+ ("full-duplex") : ("half-duplex"));
270 else
271 printf("Port %d Link Down\n", portid);
272 continue;
273@@ -3193,6 +3193,8 @@ get_eth_dcb_conf(portid_t pid, struct rte_eth_conf *eth_conf,
274 struct rte_eth_dcb_tx_conf *tx_conf =
275 &eth_conf->tx_adv_conf.dcb_tx_conf;
276
277+ memset(&rss_conf, 0, sizeof(struct rte_eth_rss_conf));
278+
279 rc = rte_eth_dev_rss_hash_conf_get(pid, &rss_conf);
280 if (rc != 0)
281 return rc;
282diff --git a/app/test/meson.build b/app/test/meson.build
283index 8cb90c4..8524a98 100644
284--- a/app/test/meson.build
285+++ b/app/test/meson.build
286@@ -402,37 +402,33 @@ timeout_seconds_fast = 10
287 get_coremask = find_program('get-coremask.sh')
288 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
289
290-test_args = [num_cores_arg]
291+default_test_args = [num_cores_arg]
292
293 foreach arg : fast_test_names
294+ test_args = default_test_args
295+
296 if (get_option('default_library') == 'shared' and
297 arg == 'event_eth_tx_adapter_autotest')
298 foreach drv:dpdk_drivers
299 test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
300 endforeach
301 endif
302- if host_machine.system() == 'linux'
303- test(arg, dpdk_test,
304- env : ['DPDK_TEST=' + arg],
305- args : test_args +
306- ['--file-prefix=@0@'.format(arg)],
307- timeout : timeout_seconds_fast,
308- is_parallel : false,
309- suite : 'fast-tests')
310- else
311- test(arg, dpdk_test,
312- env : ['DPDK_TEST=' + arg],
313- args : test_args,
314+ if is_linux
315+ test_args += ['--file-prefix=@0@'.format(arg)]
316+ endif
317+
318+ test(arg, dpdk_test,
319+ env : ['DPDK_TEST=' + arg],
320+ args : test_args,
321 timeout : timeout_seconds_fast,
322 is_parallel : false,
323 suite : 'fast-tests')
324- endif
325 endforeach
326
327 foreach arg : perf_test_names
328 test(arg, dpdk_test,
329 env : ['DPDK_TEST=' + arg],
330- args : test_args,
331+ args : default_test_args,
332 timeout : timeout_seconds,
333 is_parallel : false,
334 suite : 'perf-tests')
335@@ -441,7 +437,7 @@ endforeach
336 foreach arg : driver_test_names
337 test(arg, dpdk_test,
338 env : ['DPDK_TEST=' + arg],
339- args : test_args,
340+ args : default_test_args,
341 timeout : timeout_seconds,
342 is_parallel : false,
343 suite : 'driver-tests')
344@@ -450,7 +446,7 @@ endforeach
345 foreach arg : dump_test_names
346 test(arg, dpdk_test,
347 env : ['DPDK_TEST=' + arg],
348- args : test_args,
349+ args : default_test_args,
350 timeout : timeout_seconds,
351 is_parallel : false,
352 suite : 'debug-tests')
353diff --git a/app/test/test.h b/app/test/test.h
354index ac0c506..b07f6c1 100644
355--- a/app/test/test.h
356+++ b/app/test/test.h
357@@ -22,8 +22,6 @@
358 # define TEST_TRACE_FAILURE(_file, _line, _func)
359 #endif
360
361-#define RTE_TEST_TRACE_FAILURE TEST_TRACE_FAILURE
362-
363 #include <rte_test.h>
364
365 #define TEST_ASSERT RTE_TEST_ASSERT
366diff --git a/app/test/test_acl.c b/app/test/test_acl.c
367index 9cd9e37..b78b671 100644
368--- a/app/test/test_acl.c
369+++ b/app/test/test_acl.c
370@@ -1394,16 +1394,18 @@ test_invalid_parameters(void)
371 } else
372 rte_acl_free(acx);
373
374- /* invalid NUMA node */
375- memcpy(&param, &acl_param, sizeof(param));
376- param.socket_id = RTE_MAX_NUMA_NODES + 1;
377-
378- acx = rte_acl_create(&param);
379- if (acx != NULL) {
380- printf("Line %i: ACL context creation with invalid NUMA "
381- "should have failed!\n", __LINE__);
382- rte_acl_free(acx);
383- return -1;
384+ if (rte_eal_has_hugepages()) {
385+ /* invalid NUMA node */
386+ memcpy(&param, &acl_param, sizeof(param));
387+ param.socket_id = RTE_MAX_NUMA_NODES + 1;
388+
389+ acx = rte_acl_create(&param);
390+ if (acx != NULL) {
391+ printf("Line %i: ACL context creation with invalid "
392+ "NUMA should have failed!\n", __LINE__);
393+ rte_acl_free(acx);
394+ return -1;
395+ }
396 }
397
398 /* NULL name */
399diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
400index 79ced80..db9dd3a 100644
401--- a/app/test/test_cryptodev.c
402+++ b/app/test/test_cryptodev.c
403@@ -9158,8 +9158,10 @@ test_stats(void)
404 {
405 struct crypto_testsuite_params *ts_params = &testsuite_params;
406 struct rte_cryptodev_stats stats;
407- struct rte_cryptodev *dev;
408- cryptodev_stats_get_t temp_pfn;
409+
410+ if (rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
411+ == -ENOTSUP)
412+ return -ENOTSUP;
413
414 rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
415 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
416@@ -9167,13 +9169,6 @@ test_stats(void)
417 "rte_cryptodev_stats_get invalid dev failed");
418 TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
419 "rte_cryptodev_stats_get invalid Param failed");
420- dev = &rte_cryptodevs[ts_params->valid_devs[0]];
421- temp_pfn = dev->dev_ops->stats_get;
422- dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
423- TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
424- == -ENOTSUP),
425- "rte_cryptodev_stats_get invalid Param failed");
426- dev->dev_ops->stats_get = temp_pfn;
427
428 /* Test expected values */
429 ut_setup();
430diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c
431index 5bfe2d0..2f91d00 100644
432--- a/app/test/test_cryptodev_blockcipher.c
433+++ b/app/test/test_cryptodev_blockcipher.c
434@@ -93,7 +93,7 @@ test_blockcipher_one_case(const struct blockcipher_test_case *t,
435 uint64_t feat_flags = dev_info.feature_flags;
436 uint64_t oop_flag = RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT;
437
438- if (t->feature_mask && BLOCKCIPHER_TEST_FEATURE_OOP) {
439+ if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {
440 if (!(feat_flags & oop_flag)) {
441 printf("Device doesn't support out-of-place "
442 "scatter-gather in input mbuf. "
443diff --git a/app/test/test_cryptodev_hash_test_vectors.h b/app/test/test_cryptodev_hash_test_vectors.h
444index cff2831..394bb6b 100644
445--- a/app/test/test_cryptodev_hash_test_vectors.h
446+++ b/app/test/test_cryptodev_hash_test_vectors.h
447@@ -460,6 +460,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
448 .test_data = &sha1_test_vector,
449 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
450 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
451+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
452 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
453 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
454 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
455@@ -473,6 +474,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
456 .test_data = &sha1_test_vector,
457 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
458 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
459+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
460 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
461 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
462 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
463@@ -540,6 +542,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
464 .test_data = &sha224_test_vector,
465 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
466 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
467+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
468 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
469 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
470 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
471@@ -553,6 +556,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
472 .test_data = &sha224_test_vector,
473 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
474 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
475+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
476 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
477 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
478 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
479@@ -596,6 +600,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
480 .test_data = &sha256_test_vector,
481 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
482 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
483+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
484 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
485 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
486 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
487@@ -609,6 +614,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
488 .test_data = &sha256_test_vector,
489 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
490 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
491+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
492 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
493 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
494 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
495@@ -654,6 +660,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
496 .test_data = &sha384_test_vector,
497 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
498 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
499+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
500 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
501 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
502 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
503@@ -667,6 +674,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
504 .test_data = &sha384_test_vector,
505 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
506 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
507+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
508 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
509 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
510 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
511@@ -712,6 +720,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
512 .test_data = &sha512_test_vector,
513 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
514 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
515+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
516 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
517 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
518 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
519@@ -724,6 +733,7 @@ static const struct blockcipher_test_case hash_test_cases[] = {
520 .test_data = &sha512_test_vector,
521 .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
522 .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
523+ BLOCKCIPHER_TEST_TARGET_PMD_QAT |
524 BLOCKCIPHER_TEST_TARGET_PMD_CCP |
525 BLOCKCIPHER_TEST_TARGET_PMD_MVSAM |
526 #if IMB_VERSION_NUM >= IMB_VERSION(0, 52, 0)
527diff --git a/app/test/test_fib_perf.c b/app/test/test_fib_perf.c
528index 573087c..dd2e54d 100644
529--- a/app/test/test_fib_perf.c
530+++ b/app/test/test_fib_perf.c
531@@ -35,7 +35,7 @@ struct route_rule {
532 uint8_t depth;
533 };
534
535-struct route_rule large_route_table[MAX_RULE_NUM];
536+static struct route_rule large_route_table[MAX_RULE_NUM];
537
538 static uint32_t num_route_entries;
539 #define NUM_ROUTE_ENTRIES num_route_entries
540diff --git a/app/test/test_flow_classify.c b/app/test/test_flow_classify.c
541index ff5265c..ef0b6fd 100644
542--- a/app/test/test_flow_classify.c
543+++ b/app/test/test_flow_classify.c
544@@ -23,7 +23,7 @@
545
546 #define FLOW_CLASSIFY_MAX_RULE_NUM 100
547 #define MAX_PKT_BURST 32
548-#define NB_SOCKETS 1
549+#define NB_SOCKETS 4
550 #define MEMPOOL_CACHE_SIZE 256
551 #define MBUF_SIZE 512
552 #define NB_MBUF 512
553diff --git a/app/test/test_hash.c b/app/test/test_hash.c
554index 0052dce..2ac298e 100644
555--- a/app/test/test_hash.c
556+++ b/app/test/test_hash.c
557@@ -1142,8 +1142,11 @@ fbk_hash_unit_test(void)
558 handle = rte_fbk_hash_create(&invalid_params_7);
559 RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
560
561- handle = rte_fbk_hash_create(&invalid_params_8);
562- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
563+ if (rte_eal_has_hugepages()) {
564+ handle = rte_fbk_hash_create(&invalid_params_8);
565+ RETURN_IF_ERROR_FBK(handle != NULL,
566+ "fbk hash creation should have failed");
567+ }
568
569 handle = rte_fbk_hash_create(&invalid_params_same_name_1);
570 RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation should have succeeded");
571diff --git a/app/test/test_ipsec.c b/app/test/test_ipsec.c
572index 9e14472..79d00d7 100644
573--- a/app/test/test_ipsec.c
574+++ b/app/test/test_ipsec.c
575@@ -1168,6 +1168,34 @@ test_ipsec_dump_buffers(struct ipsec_unitest_params *ut_params, int i)
576 }
577
578 static void
579+destroy_dummy_sec_session(struct ipsec_unitest_params *ut,
580+ uint32_t j)
581+{
582+ rte_security_session_destroy(&dummy_sec_ctx,
583+ ut->ss[j].security.ses);
584+ ut->ss[j].security.ctx = NULL;
585+}
586+
587+static void
588+destroy_crypto_session(struct ipsec_unitest_params *ut,
589+ uint8_t crypto_dev, uint32_t j)
590+{
591+ rte_cryptodev_sym_session_clear(crypto_dev, ut->ss[j].crypto.ses);
592+ rte_cryptodev_sym_session_free(ut->ss[j].crypto.ses);
593+ memset(&ut->ss[j], 0, sizeof(ut->ss[j]));
594+}
595+
596+static void
597+destroy_session(struct ipsec_unitest_params *ut,
598+ uint8_t crypto_dev, uint32_t j)
599+{
600+ if (ut->ss[j].type == RTE_SECURITY_ACTION_TYPE_NONE)
601+ return destroy_crypto_session(ut, crypto_dev, j);
602+ else
603+ return destroy_dummy_sec_session(ut, j);
604+}
605+
606+static void
607 destroy_sa(uint32_t j)
608 {
609 struct ipsec_unitest_params *ut = &unittest_params;
610@@ -1175,9 +1203,8 @@ destroy_sa(uint32_t j)
611
612 rte_ipsec_sa_fini(ut->ss[j].sa);
613 rte_free(ut->ss[j].sa);
614- rte_cryptodev_sym_session_clear(ts->valid_dev, ut->ss[j].crypto.ses);
615- rte_cryptodev_sym_session_free(ut->ss[j].crypto.ses);
616- memset(&ut->ss[j], 0, sizeof(ut->ss[j]));
617+
618+ destroy_session(ut, ts->valid_dev, j);
619 }
620
621 static int
622diff --git a/app/test/test_kvargs.c b/app/test/test_kvargs.c
623index a42056f..2a2dae4 100644
624--- a/app/test/test_kvargs.c
625+++ b/app/test/test_kvargs.c
626@@ -142,7 +142,7 @@ static int test_valid_kvargs(void)
627 valid_keys = valid_keys_list;
628 kvlist = rte_kvargs_parse(args, valid_keys);
629 if (kvlist == NULL) {
630- printf("rte_kvargs_parse() error");
631+ printf("rte_kvargs_parse() error\n");
632 goto fail;
633 }
634 if (strcmp(kvlist->pairs[0].value, "[0,1]") != 0) {
635@@ -157,6 +157,40 @@ static int test_valid_kvargs(void)
636 }
637 rte_kvargs_free(kvlist);
638
639+ /* test using empty string (it is valid) */
640+ args = "";
641+ kvlist = rte_kvargs_parse(args, NULL);
642+ if (kvlist == NULL) {
643+ printf("rte_kvargs_parse() error\n");
644+ goto fail;
645+ }
646+ if (rte_kvargs_count(kvlist, NULL) != 0) {
647+ printf("invalid count value\n");
648+ goto fail;
649+ }
650+ rte_kvargs_free(kvlist);
651+
652+ /* test using empty elements (it is valid) */
653+ args = "foo=1,,check=value2,,";
654+ kvlist = rte_kvargs_parse(args, NULL);
655+ if (kvlist == NULL) {
656+ printf("rte_kvargs_parse() error\n");
657+ goto fail;
658+ }
659+ if (rte_kvargs_count(kvlist, NULL) != 2) {
660+ printf("invalid count value\n");
661+ goto fail;
662+ }
663+ if (rte_kvargs_count(kvlist, "foo") != 1) {
664+ printf("invalid count value for 'foo'\n");
665+ goto fail;
666+ }
667+ if (rte_kvargs_count(kvlist, "check") != 1) {
668+ printf("invalid count value for 'check'\n");
669+ goto fail;
670+ }
671+ rte_kvargs_free(kvlist);
672+
673 return 0;
674
675 fail:
676@@ -179,11 +213,11 @@ static int test_invalid_kvargs(void)
677 const char *args_list[] = {
678 "wrong-key=x", /* key not in valid_keys_list */
679 "foo=1,foo=", /* empty value */
680- "foo=1,,foo=2", /* empty key/value */
681 "foo=1,foo", /* no value */
682 "foo=1,=2", /* no key */
683 "foo=[1,2", /* no closing bracket in value */
684 ",=", /* also test with a smiley */
685+ "foo=[", /* no value in list and no closing bracket */
686 NULL };
687 const char **args;
688 const char *valid_keys_list[] = { "foo", "check", NULL };
689@@ -197,8 +231,8 @@ static int test_invalid_kvargs(void)
690 rte_kvargs_free(kvlist);
691 goto fail;
692 }
693- return 0;
694 }
695+ return 0;
696
697 fail:
698 printf("while processing <%s>", *args);
699diff --git a/app/test/test_lpm_perf.c b/app/test/test_lpm_perf.c
700index a2578fe..489719c 100644
701--- a/app/test/test_lpm_perf.c
702+++ b/app/test/test_lpm_perf.c
703@@ -34,7 +34,7 @@ struct route_rule {
704 uint8_t depth;
705 };
706
707-struct route_rule large_route_table[MAX_RULE_NUM];
708+static struct route_rule large_route_table[MAX_RULE_NUM];
709
710 static uint32_t num_route_entries;
711 #define NUM_ROUTE_ENTRIES num_route_entries
712diff --git a/app/test/test_malloc.c b/app/test/test_malloc.c
713index a16e28c..57f796f 100644
714--- a/app/test/test_malloc.c
715+++ b/app/test/test_malloc.c
716@@ -746,6 +746,18 @@ test_malloc_bad_params(void)
717 if (bad_ptr != NULL)
718 goto err_return;
719
720+ /* rte_malloc expected to return null with size will cause overflow */
721+ align = RTE_CACHE_LINE_SIZE;
722+ size = (size_t)-8;
723+
724+ bad_ptr = rte_malloc(type, size, align);
725+ if (bad_ptr != NULL)
726+ goto err_return;
727+
728+ bad_ptr = rte_realloc(NULL, size, align);
729+ if (bad_ptr != NULL)
730+ goto err_return;
731+
732 return 0;
733
734 err_return:
735diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c
736index 61ecffc..f2922e0 100644
737--- a/app/test/test_mbuf.c
738+++ b/app/test/test_mbuf.c
739@@ -1144,7 +1144,7 @@ test_refcnt_mbuf(void)
740 tref += refcnt_lcore[slave];
741
742 if (tref != refcnt_lcore[master])
743- rte_panic("refernced mbufs: %u, freed mbufs: %u\n",
744+ rte_panic("referenced mbufs: %u, freed mbufs: %u\n",
745 tref, refcnt_lcore[master]);
746
747 rte_mempool_dump(stdout, refcnt_pool);
748diff --git a/app/test/test_pmd_perf.c b/app/test/test_pmd_perf.c
749index d61be58..352cd47 100644
750--- a/app/test/test_pmd_perf.c
751+++ b/app/test/test_pmd_perf.c
752@@ -151,7 +151,7 @@ check_all_ports_link_status(uint16_t port_num, uint32_t port_mask)
753 "Port%d Link Up. Speed %u Mbps - %s\n",
754 portid, link.link_speed,
755 (link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
756- ("full-duplex") : ("half-duplex\n"));
757+ ("full-duplex") : ("half-duplex"));
758 if (link_mbps == 0)
759 link_mbps = link.link_speed;
760 } else
761diff --git a/app/test/test_table_pipeline.c b/app/test/test_table_pipeline.c
762index 441338a..bc412c3 100644
763--- a/app/test/test_table_pipeline.c
764+++ b/app/test/test_table_pipeline.c
765@@ -190,11 +190,13 @@ check_pipeline_invalid_params(void)
766 goto fail;
767 }
768
769- p = rte_pipeline_create(&pipeline_params_3);
770- if (p != NULL) {
771- RTE_LOG(INFO, PIPELINE, "%s: Configure pipeline with invalid "
772- "socket\n", __func__);
773- goto fail;
774+ if (rte_eal_has_hugepages()) {
775+ p = rte_pipeline_create(&pipeline_params_3);
776+ if (p != NULL) {
777+ RTE_LOG(INFO, PIPELINE, "%s: Configure pipeline with "
778+ "invalid socket\n", __func__);
779+ goto fail;
780+ }
781 }
782
783 /* Check pipeline consistency */
784diff --git a/buildtools/options-ibverbs-static.sh b/buildtools/options-ibverbs-static.sh
785index 0f285a3..0740a71 100755
786--- a/buildtools/options-ibverbs-static.sh
787+++ b/buildtools/options-ibverbs-static.sh
788@@ -9,6 +9,13 @@
789 #
790 # PKG_CONFIG_PATH may be required to be set if libibverbs.pc is not installed.
791
792-pkg-config --libs-only-l --static libibverbs |
793+lib='libibverbs'
794+deps='pthread|nl'
795+
796+pkg-config --libs --static $lib |
797 tr '[:space:]' '\n' |
798- sed -r '/^-l(pthread|nl)/! s,(^-l)(.*),\1:lib\2.a,'
799+ sed -r "/^-l($deps)/! s,(^-l)(.*),\1:lib\2.a," | # explicit .a
800+ sed -n '/^-[Ll]/p' | # extra link options may break with make
801+ tac |
802+ awk "/^-l:$lib.a/&&c++ {next} 1" | # drop first duplicates of main lib
803+ tac
804diff --git a/config/common_base b/config/common_base
805index 2e0c725..861f7d1 100644
806--- a/config/common_base
807+++ b/config/common_base
808@@ -328,7 +328,6 @@ CONFIG_RTE_LIBRTE_ICE_PMD=y
809 CONFIG_RTE_LIBRTE_ICE_DEBUG_RX=n
810 CONFIG_RTE_LIBRTE_ICE_DEBUG_TX=n
811 CONFIG_RTE_LIBRTE_ICE_DEBUG_TX_FREE=n
812-CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC=y
813 CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC=n
814
815 # Compile burst-oriented IAVF PMD driver
816diff --git a/config/meson.build b/config/meson.build
817index 4174701..78bfdf3 100644
818--- a/config/meson.build
819+++ b/config/meson.build
820@@ -14,6 +14,10 @@ foreach env:supported_exec_envs
821 set_variable('is_' + env, exec_env == env)
822 endforeach
823
824+# MS linker requires special treatment.
825+# TODO: use cc.get_linker_id() with Meson >= 0.54
826+is_ms_linker = is_windows and (cc.get_id() == 'clang')
827+
828 # set the major version, which might be used by drivers and libraries
829 # depending on the configuration options
830 pver = meson.project_version().split('.')
831@@ -98,11 +102,15 @@ dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1)
832
833 dpdk_conf.set('RTE_ARCH_64', cc.sizeof('void *') == 8)
834
835-add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
836+if not is_windows
837+ add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
838+endif
839
840-# use pthreads
841-add_project_link_arguments('-pthread', language: 'c')
842-dpdk_extra_ldflags += '-pthread'
843+# use pthreads if available for the platform
844+if not is_ms_linker
845+ add_project_link_arguments('-pthread', language: 'c')
846+ dpdk_extra_ldflags += '-pthread'
847+endif
848
849 # on some OS, maths functions are in a separate library
850 if cc.find_library('m', required : false).found()
851@@ -183,6 +191,10 @@ warning_flags = [
852 '-Wno-packed-not-aligned',
853 '-Wno-missing-field-initializers'
854 ]
855+if cc.get_id() == 'gcc' and cc.version().version_compare('>=10.0')
856+# FIXME: Bugzilla 396
857+ warning_flags += '-Wno-zero-length-bounds'
858+endif
859 if not dpdk_conf.get('RTE_ARCH_64')
860 # for 32-bit, don't warn about casting a 32-bit pointer to 64-bit int - it's fine!!
861 warning_flags += '-Wno-pointer-to-int-cast'
862@@ -231,6 +243,16 @@ if is_freebsd
863 add_project_arguments('-D__BSD_VISIBLE', language: 'c')
864 endif
865
866+if is_windows
867+ # Minimum supported API is Windows 7.
868+ add_project_arguments('-D_WIN32_WINNT=0x0601', language: 'c')
869+
870+ # Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.
871+ if cc.get_id() == 'gcc'
872+ add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')
873+ endif
874+endif
875+
876 if get_option('b_lto')
877 if cc.has_argument('-ffat-lto-objects')
878 add_project_arguments('-ffat-lto-objects', language: 'c')
879diff --git a/debian/changelog b/debian/changelog
880index 68687e1..fb63ebe 100644
881--- a/debian/changelog
882+++ b/debian/changelog
883@@ -1,3 +1,29 @@
884+dpdk (19.11.3-0ubuntu0.1) focal; urgency=medium
885+
886+ * Merge latest stable DPDK release 19.11.3; for a full list of changes see:
887+ https://doc.dpdk.org/guides-19.11/rel_notes/release_19_11.html#release-notes
888+ (LP: #1885915)
889+ * Remaining Changes:
890+ - d/control: disable libbpf-dev build dependency while waiting for the
891+ kernel to build it for LP: 1836708 1826410.
892+ - d/control: remove librte-pmd-af-xdp20.0 until libbpf-dev is available
893+ - d/p/revert-net-ipn3ke-fix-meson-build.patch: avoid adding new shared
894+ objects and binary packages
895+ - Revert "add new packages which didn't build"
896+ * Dropped changes
897+ - drop security patches being included in 19.11.3
898+ - d/p/0001-vhost-check-log-mmap-offset-and-size-overflow.patch
899+ - d/p/0002-vhost-fix-vring-index-check.patch
900+ - d/p/0003-vhost-crypto-validate-keys-lengths.patch
901+ - d/p/0004-vhost-fix-translated-address-not-checked.patch
902+ - d/p/0005-vhost-fix-potential-memory-space-leak.patch
903+ - d/p/0006-vhost-fix-potential-fd-leak.patch
904+ * Added changes:
905+ - d/p/19.11-remove-zero-copy-and-client-mode-restriction.patch: avoid
906+ dropping a used feature with the stable update
907+
908+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 02 Jul 2020 08:41:28 +0200
909+
910 dpdk (19.11.1-0ubuntu1.1) focal-security; urgency=medium
911
912 * SECURITY UPDATE: Integer overflow in vhost_user_set_log_base()
913diff --git a/debian/patches/0001-vhost-check-log-mmap-offset-and-size-overflow.patch b/debian/patches/0001-vhost-check-log-mmap-offset-and-size-overflow.patch
914deleted file mode 100644
915index 19a0d63..0000000
916--- a/debian/patches/0001-vhost-check-log-mmap-offset-and-size-overflow.patch
917+++ /dev/null
918@@ -1,49 +0,0 @@
919-From 342f6d57f417303b12f86d040b87f27448e4a0ae Mon Sep 17 00:00:00 2001
920-From: Maxime Coquelin <maxime.coquelin@redhat.com>
921-Date: Tue, 21 Apr 2020 11:16:56 +0200
922-Subject: [PATCH 1/6] vhost: check log mmap offset and size overflow
923-
924-vhost_user_set_log_base() is a message handler that is
925-called to handle the VHOST_USER_SET_LOG_BASE message.
926-Its payload contains a 64 bit size and offset. Both are
927-added up and used as a size when calling mmap().
928-
929-There is no integer overflow check. If an integer overflow
930-occurs a smaller memory map would be created than
931-requested. Since the returned mapping is mapped as writable
932-and used for logging, a memory corruption could occur.
933-
934-Fixes: fbc4d248b198 ("vhost: fix offset while mmaping log base address")
935-Cc: stable@dpdk.org
936-
937-This issue has been assigned CVE-2020-10722
938-
939-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
940-Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
941-Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
942-Reviewed-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
943----
944- lib/librte_vhost/vhost_user.c | 6 +++---
945- 1 file changed, 3 insertions(+), 3 deletions(-)
946-
947-diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
948-index 40c4520c08..02962fcdbc 100644
949---- a/lib/librte_vhost/vhost_user.c
950-+++ b/lib/librte_vhost/vhost_user.c
951-@@ -2059,10 +2059,10 @@ vhost_user_set_log_base(struct virtio_net **pdev, struct VhostUserMsg *msg,
952- size = msg->payload.log.mmap_size;
953- off = msg->payload.log.mmap_offset;
954-
955-- /* Don't allow mmap_offset to point outside the mmap region */
956-- if (off > size) {
957-+ /* Check for mmap size and offset overflow. */
958-+ if (off >= -size) {
959- RTE_LOG(ERR, VHOST_CONFIG,
960-- "log offset %#"PRIx64" exceeds log size %#"PRIx64"\n",
961-+ "log offset %#"PRIx64" and log size %#"PRIx64" overflow\n",
962- off, size);
963- return RTE_VHOST_MSG_RESULT_ERR;
964- }
965---
966-2.25.2
967-
968diff --git a/debian/patches/0002-vhost-fix-vring-index-check.patch b/debian/patches/0002-vhost-fix-vring-index-check.patch
969deleted file mode 100644
970index dfbeeb8..0000000
971--- a/debian/patches/0002-vhost-fix-vring-index-check.patch
972+++ /dev/null
973@@ -1,58 +0,0 @@
974-From 7e74c33644452051cc4193fd2516d97e1e4009e0 Mon Sep 17 00:00:00 2001
975-From: Maxime Coquelin <maxime.coquelin@redhat.com>
976-Date: Tue, 21 Apr 2020 18:17:43 +0200
977-Subject: [PATCH 2/6] vhost: fix vring index check
978-
979-vhost_user_check_and_alloc_queue_pair() is used to extract
980-a vring index from a payload. This function validates the
981-index and is called early on in when performing message
982-handling. Most message handlers depend on it correctly
983-validating the vring index.
984-
985-Depending on the message type the vring index is in
986-different parts of the payload. The function contains a
987-switch/case for each type and copies the index. This is
988-stored in a uint16. This index is then validated. Depending
989-on the message, the source index is an unsigned int. If
990-integer truncation occurs (uint->uint16) the top 16 bits
991-of the index are never validated.
992-
993-When they are used later on (e.g. in
994-vhost_user_set_vring_num() or vhost_user_set_vring_addr())
995-it can lead to out of bound indexing. The out of bound
996-indexed data gets written to, and hence this can cause
997-memory corruption.
998-
999-This patch fixes this vulnerability by declaring vring
1000-index as an unsigned int in
1001-vhost_user_check_and_alloc_queue_pair().
1002-
1003-Fixes: 160cbc815b41 ("vhost: remove a hack on queue allocation")
1004-Cc: stable@dpdk.org
1005-
1006-This issue has been assigned CVE-2020-10723
1007-
1008-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
1009-Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
1010-Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
1011-Reviewed-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
1012----
1013- lib/librte_vhost/vhost_user.c | 2 +-
1014- 1 file changed, 1 insertion(+), 1 deletion(-)
1015-
1016-diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
1017-index 02962fcdbc..d19614265b 100644
1018---- a/lib/librte_vhost/vhost_user.c
1019-+++ b/lib/librte_vhost/vhost_user.c
1020-@@ -2526,7 +2526,7 @@ static int
1021- vhost_user_check_and_alloc_queue_pair(struct virtio_net *dev,
1022- struct VhostUserMsg *msg)
1023- {
1024-- uint16_t vring_idx;
1025-+ uint32_t vring_idx;
1026-
1027- switch (msg->request.master) {
1028- case VHOST_USER_SET_VRING_KICK:
1029---
1030-2.25.2
1031-
1032diff --git a/debian/patches/0003-vhost-crypto-validate-keys-lengths.patch b/debian/patches/0003-vhost-crypto-validate-keys-lengths.patch
1033deleted file mode 100644
1034index 0c46032..0000000
1035--- a/debian/patches/0003-vhost-crypto-validate-keys-lengths.patch
1036+++ /dev/null
1037@@ -1,77 +0,0 @@
1038-From 5216718e4837d4dcc6020cd5f6d5d629222bad8c Mon Sep 17 00:00:00 2001
1039-From: Maxime Coquelin <maxime.coquelin@redhat.com>
1040-Date: Tue, 21 Apr 2020 19:10:09 +0200
1041-Subject: [PATCH 3/6] vhost/crypto: validate keys lengths
1042-
1043-transform_cipher_param() and transform_chain_param() handle
1044-the payload data for the VHOST_USER_CRYPTO_CREATE_SESS
1045-message. These payloads have to be validated, since it
1046-could come from untrusted sources.
1047-
1048-Two buffers and their lenghts are defined in this payload,
1049-one the the auth key and one for the cipher key. But above
1050-functions do not validate the key length inputs, which could
1051-lead to read out of bounds, as buffers have static sizes of
1052-64 bytes for the cipher key and 512 bytes for the auth key.
1053-
1054-This patch adds necessary checks on the key length field
1055-before being used.
1056-
1057-Fixes: e80a98708166 ("vhost/crypto: add session message handler")
1058-Cc: stable@dpdk.org
1059-
1060-This issue has been assigned CVE-2020-10724
1061-
1062-Reported-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
1063-Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
1064-Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
1065-Reviewed-by: Ilja Van Sprundel <ivansprundel@ioactive.com>
1066----
1067- lib/librte_vhost/vhost_crypto.c | 17 +++++++++++++++++
1068- 1 file changed, 17 insertions(+)
1069-
1070-diff --git a/lib/librte_vhost/vhost_crypto.c b/lib/librte_vhost/vhost_crypto.c
1071-index 68911972b6..07a4115482 100644
1072---- a/lib/librte_vhost/vhost_crypto.c
1073-+++ b/lib/librte_vhost/vhost_crypto.c
1074-@@ -237,6 +237,11 @@ transform_cipher_param(struct rte_crypto_sym_xform *xform,
1075- if (unlikely(ret < 0))
1076- return ret;
1077-
1078-+ if (param->cipher_key_len > VHOST_USER_CRYPTO_MAX_CIPHER_KEY_LENGTH) {
1079-+ VC_LOG_DBG("Invalid cipher key length\n");
1080-+ return -VIRTIO_CRYPTO_BADMSG;
1081-+ }
1082-+
1083- xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1084- xform->cipher.key.length = param->cipher_key_len;
1085- if (xform->cipher.key.length > 0)
1086-@@ -287,6 +292,12 @@ transform_chain_param(struct rte_crypto_sym_xform *xforms,
1087- &xform_cipher->cipher.algo);
1088- if (unlikely(ret < 0))
1089- return ret;
1090-+
1091-+ if (param->cipher_key_len > VHOST_USER_CRYPTO_MAX_CIPHER_KEY_LENGTH) {
1092-+ VC_LOG_DBG("Invalid cipher key length\n");
1093-+ return -VIRTIO_CRYPTO_BADMSG;
1094-+ }
1095-+
1096- xform_cipher->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1097- xform_cipher->cipher.key.length = param->cipher_key_len;
1098- xform_cipher->cipher.key.data = param->cipher_key_buf;
1099-@@ -301,6 +312,12 @@ transform_chain_param(struct rte_crypto_sym_xform *xforms,
1100- ret = auth_algo_transform(param->hash_algo, &xform_auth->auth.algo);
1101- if (unlikely(ret < 0))
1102- return ret;
1103-+
1104-+ if (param->auth_key_len > VHOST_USER_CRYPTO_MAX_HMAC_KEY_LENGTH) {
1105-+ VC_LOG_DBG("Invalid auth key length\n");
1106-+ return -VIRTIO_CRYPTO_BADMSG;
1107-+ }
1108-+
1109- xform_auth->auth.digest_length = param->digest_len;
1110- xform_auth->auth.key.length = param->auth_key_len;
1111- xform_auth->auth.key.data = param->auth_key_buf;
1112---
1113-2.25.2
1114-
1115diff --git a/debian/patches/0004-vhost-fix-translated-address-not-checked.patch b/debian/patches/0004-vhost-fix-translated-address-not-checked.patch
1116deleted file mode 100644
1117index ce9fac5..0000000
1118--- a/debian/patches/0004-vhost-fix-translated-address-not-checked.patch
1119+++ /dev/null
1120@@ -1,46 +0,0 @@
1121-From c74f5a29dbb505bb31bec932a9bd77325e2ceea6 Mon Sep 17 00:00:00 2001
1122-From: Marvin Liu <yong.liu@intel.com>
1123-Date: Wed, 8 Apr 2020 17:13:55 +0800
1124-Subject: [PATCH 4/6] vhost: fix translated address not checked
1125-
1126-Malicious guest can construct desc with invalid address and zero buffer
1127-length. That will request vhost to check both translated address and
1128-translated data length. This patch will add missed address check.
1129-
1130-Fixes: 75ed51697820 ("vhost: add packed ring batch dequeue")
1131-Fixes: ef861692c398 ("vhost: add packed ring batch enqueue")
1132-Cc: stable@dpdk.org
1133-
1134-This issue has been assigned CVE-2020-10725
1135-
1136-Signed-off-by: Marvin Liu <yong.liu@intel.com>
1137-Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
1138----
1139- lib/librte_vhost/virtio_net.c | 4 ++++
1140- 1 file changed, 4 insertions(+)
1141-
1142-diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
1143-index ac2842b2d2..33f10258cf 100644
1144---- a/lib/librte_vhost/virtio_net.c
1145-+++ b/lib/librte_vhost/virtio_net.c
1146-@@ -1086,6 +1086,8 @@ virtio_dev_rx_batch_packed(struct virtio_net *dev,
1147- VHOST_ACCESS_RW);
1148-
1149- vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
1150-+ if (unlikely(!desc_addrs[i]))
1151-+ return -1;
1152- if (unlikely(lens[i] != descs[avail_idx + i].len))
1153- return -1;
1154- }
1155-@@ -1841,6 +1843,8 @@ vhost_reserve_avail_batch_packed(struct virtio_net *dev,
1156- }
1157-
1158- vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) {
1159-+ if (unlikely(!desc_addrs[i]))
1160-+ return -1;
1161- if (unlikely((lens[i] != descs[avail_idx + i].len)))
1162- return -1;
1163- }
1164---
1165-2.25.2
1166-
1167diff --git a/debian/patches/0005-vhost-fix-potential-memory-space-leak.patch b/debian/patches/0005-vhost-fix-potential-memory-space-leak.patch
1168deleted file mode 100644
1169index 4fdac0e..0000000
1170--- a/debian/patches/0005-vhost-fix-potential-memory-space-leak.patch
1171+++ /dev/null
1172@@ -1,52 +0,0 @@
1173-From 9566391031723e854e818bb7d965e9e677784dc4 Mon Sep 17 00:00:00 2001
1174-From: Xiaolong Ye <xiaolong.ye@intel.com>
1175-Date: Wed, 8 Apr 2020 15:31:35 +0800
1176-Subject: [PATCH 5/6] vhost: fix potential memory space leak
1177-
1178-A malicious container which has direct access to the vhost-user socket
1179-can keep sending VHOST_USER_GET_INFLIGHT_FD messages which may cause
1180-leaking resources until resulting a DOS. Fix it by unmapping the
1181-dev->inflight_info->addr before assigning new mapped addr to it.
1182-
1183-Fixes: d87f1a1cb7b6 ("vhost: support inflight info sharing")
1184-Cc: stable@dpdk.org
1185-
1186-This issue has been assigned CVE-2020-10726
1187-
1188-Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
1189-Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
1190----
1191- lib/librte_vhost/vhost_user.c | 9 ++++++++-
1192- 1 file changed, 8 insertions(+), 1 deletion(-)
1193-
1194-diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
1195-index d19614265b..2a4ba205cf 100644
1196---- a/lib/librte_vhost/vhost_user.c
1197-+++ b/lib/librte_vhost/vhost_user.c
1198-@@ -1433,6 +1433,11 @@ vhost_user_get_inflight_fd(struct virtio_net **pdev,
1199- }
1200- memset(addr, 0, mmap_size);
1201-
1202-+ if (dev->inflight_info->addr) {
1203-+ munmap(dev->inflight_info->addr, dev->inflight_info->size);
1204-+ dev->inflight_info->addr = NULL;
1205-+ }
1206-+
1207- dev->inflight_info->addr = addr;
1208- dev->inflight_info->size = msg->payload.inflight.mmap_size = mmap_size;
1209- dev->inflight_info->fd = msg->fds[0] = fd;
1210-@@ -1517,8 +1522,10 @@ vhost_user_set_inflight_fd(struct virtio_net **pdev, VhostUserMsg *msg,
1211- }
1212- }
1213-
1214-- if (dev->inflight_info->addr)
1215-+ if (dev->inflight_info->addr) {
1216- munmap(dev->inflight_info->addr, dev->inflight_info->size);
1217-+ dev->inflight_info->addr = NULL;
1218-+ }
1219-
1220- addr = mmap(0, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED,
1221- fd, mmap_offset);
1222---
1223-2.25.2
1224-
1225diff --git a/debian/patches/0006-vhost-fix-potential-fd-leak.patch b/debian/patches/0006-vhost-fix-potential-fd-leak.patch
1226deleted file mode 100644
1227index 11d759a..0000000
1228--- a/debian/patches/0006-vhost-fix-potential-fd-leak.patch
1229+++ /dev/null
1230@@ -1,80 +0,0 @@
1231-From 1cb6dbef9c15e739da9b253c53b558e93906c6c5 Mon Sep 17 00:00:00 2001
1232-From: Xuan Ding <xuan.ding@intel.com>
1233-Date: Wed, 8 Apr 2020 10:19:51 +0000
1234-Subject: [PATCH 6/6] vhost: fix potential fd leak
1235-
1236-Vhost will create temporary file when receiving VHOST_USER_GET_INFLIGHT_FD
1237-message. Malicious guest can send endless this message to drain out the
1238-resource of host.
1239-
1240-When receiving VHOST_USER_GET_INFLIGHT_FD message repeatedly, closing the
1241-file created during the last handling of this message.
1242-
1243-Fixes: d87f1a1cb7b666550 ("vhost: support inflight info sharing")
1244-Cc: stable@dpdk.org
1245-
1246-This issue has been assigned CVE-2020-10726
1247-
1248-Signed-off-by: Xuan Ding <xuan.ding@intel.com>
1249-Signed-off-by: Xiaolong Ye <xiaolong.ye@intel.com>
1250-Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
1251----
1252- lib/librte_vhost/vhost_user.c | 13 +++++++++++--
1253- 1 file changed, 11 insertions(+), 2 deletions(-)
1254-
1255-diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c
1256-index 2a4ba205cf..8954f7930e 100644
1257---- a/lib/librte_vhost/vhost_user.c
1258-+++ b/lib/librte_vhost/vhost_user.c
1259-@@ -206,7 +206,7 @@ vhost_backend_cleanup(struct virtio_net *dev)
1260- dev->inflight_info->addr = NULL;
1261- }
1262-
1263-- if (dev->inflight_info->fd > 0) {
1264-+ if (dev->inflight_info->fd >= 0) {
1265- close(dev->inflight_info->fd);
1266- dev->inflight_info->fd = -1;
1267- }
1268-@@ -1408,6 +1408,7 @@ vhost_user_get_inflight_fd(struct virtio_net **pdev,
1269- "failed to alloc dev inflight area\n");
1270- return RTE_VHOST_MSG_RESULT_ERR;
1271- }
1272-+ dev->inflight_info->fd = -1;
1273- }
1274-
1275- num_queues = msg->payload.inflight.num_queues;
1276-@@ -1438,6 +1439,11 @@ vhost_user_get_inflight_fd(struct virtio_net **pdev,
1277- dev->inflight_info->addr = NULL;
1278- }
1279-
1280-+ if (dev->inflight_info->fd >= 0) {
1281-+ close(dev->inflight_info->fd);
1282-+ dev->inflight_info->fd = -1;
1283-+ }
1284-+
1285- dev->inflight_info->addr = addr;
1286- dev->inflight_info->size = msg->payload.inflight.mmap_size = mmap_size;
1287- dev->inflight_info->fd = msg->fds[0] = fd;
1288-@@ -1520,6 +1526,7 @@ vhost_user_set_inflight_fd(struct virtio_net **pdev, VhostUserMsg *msg,
1289- "failed to alloc dev inflight area\n");
1290- return RTE_VHOST_MSG_RESULT_ERR;
1291- }
1292-+ dev->inflight_info->fd = -1;
1293- }
1294-
1295- if (dev->inflight_info->addr) {
1296-@@ -1534,8 +1541,10 @@ vhost_user_set_inflight_fd(struct virtio_net **pdev, VhostUserMsg *msg,
1297- return RTE_VHOST_MSG_RESULT_ERR;
1298- }
1299-
1300-- if (dev->inflight_info->fd)
1301-+ if (dev->inflight_info->fd >= 0) {
1302- close(dev->inflight_info->fd);
1303-+ dev->inflight_info->fd = -1;
1304-+ }
1305-
1306- dev->inflight_info->fd = fd;
1307- dev->inflight_info->addr = addr;
1308---
1309-2.25.2
1310-
1311diff --git a/debian/patches/19.11-remove-zero-copy-and-client-mode-restriction.patch b/debian/patches/19.11-remove-zero-copy-and-client-mode-restriction.patch
1312new file mode 100644
1313index 0000000..c46c560
1314--- /dev/null
1315+++ b/debian/patches/19.11-remove-zero-copy-and-client-mode-restriction.patch
1316@@ -0,0 +1,56 @@
1317+Subject: [dpdk-stable] [PATCH 19.11] vhost: remove zero-copy and client mode restriction
1318+From: Kevin Traynor ktraynor@redhat.com
1319+
1320+Commits [1] were backported as fixes from the latest DPDK release
1321+to the stable branches. They are detecting if vhost-user client and
1322+zero-copy are being used together. As this can be problematic in
1323+some cases, this combination was being rejected by those patches.
1324+
1325+It might be ok to deprecate this combination in latest DPDK,
1326+but for stable releases we should not remove the functionality
1327+as it may be in use with earlier releases from the same stable branch.
1328+
1329+In fact, we know that this functionality is used at least in OVS in
1330+multiple releases/active branches.
1331+
1332+This patch removes the restriction of zero-copy and client mode
1333+and adds a warning for the user.
1334+
1335+[1]
1336+commit a6ae060e3995
1337+("vhost: prevent zero-copy with incompatible client mode")
1338+
1339+commit 1c2eaf9a9852
1340+("vhost: fix zero-copy server mode")
1341+
1342+Signed-off-by: Kevin Traynor <ktraynor at redhat.com>
1343+Origin: upstream, http://mails.dpdk.org/archives/stable/2020-July/023584.html
1344+Last-Update: 2020-07-02
1345+---
1346+Cc: xuan.ding at intel.com
1347+Cc: bluca at debian.org
1348+---
1349+ lib/librte_vhost/socket.c | 10 ++++------
1350+ 1 file changed, 4 insertions(+), 6 deletions(-)
1351+
1352+diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
1353+index 2461549fea..dc3ee1e99d 100644
1354+--- a/lib/librte_vhost/socket.c
1355++++ b/lib/librte_vhost/socket.c
1356+@@ -927,10 +927,8 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
1357+ goto out_mutex;
1358+ }
1359+- if ((flags & RTE_VHOST_USER_CLIENT) != 0) {
1360+- RTE_LOG(ERR, VHOST_CONFIG,
1361+- "error: zero copy is incompatible with vhost client mode\n");
1362+- ret = -1;
1363+- goto out_mutex;
1364+- }
1365++ if ((flags & RTE_VHOST_USER_CLIENT) != 0)
1366++ RTE_LOG(WARNING, VHOST_CONFIG,
1367++ "zero copy may be incompatible with vhost client mode\n");
1368++
1369+ vsocket->supported_features &= ~(1ULL << VIRTIO_F_IN_ORDER);
1370+ vsocket->features &= ~(1ULL << VIRTIO_F_IN_ORDER);
1371+--
1372+2.21.3
1373diff --git a/debian/patches/series b/debian/patches/series
1374index 6043eda..19aa3d3 100644
1375--- a/debian/patches/series
1376+++ b/debian/patches/series
1377@@ -1,7 +1,2 @@
1378 revert-net-ipn3ke-fix-meson-build.patch
1379-0001-vhost-check-log-mmap-offset-and-size-overflow.patch
1380-0002-vhost-fix-vring-index-check.patch
1381-0003-vhost-crypto-validate-keys-lengths.patch
1382-0004-vhost-fix-translated-address-not-checked.patch
1383-0005-vhost-fix-potential-memory-space-leak.patch
1384-0006-vhost-fix-potential-fd-leak.patch
1385+19.11-remove-zero-copy-and-client-mode-restriction.patch
1386diff --git a/devtools/check-symbol-change.sh b/devtools/check-symbol-change.sh
1387index c5434f3..ed2178e 100755
1388--- a/devtools/check-symbol-change.sh
1389+++ b/devtools/check-symbol-change.sh
1390@@ -17,13 +17,11 @@ build_map_changes()
1391 # map files are altered, and all section/symbol names
1392 # appearing between a triggering of this rule and the
1393 # next trigger of this rule are associated with this file
1394- /[-+] a\/.*\.map/ {map=$2; in_map=1}
1395+ /[-+] [ab]\/.*\.map/ {map=$2; in_map=1; next}
1396
1397- # Same pattern as above, only it matches on anything that
1398- # does not end in 'map', indicating we have left the map chunk.
1399- # When we hit this, turn off the in_map variable, which
1400- # supresses the subordonate rules below
1401- /[-+] a\/.*\.[^map]/ {in_map=0}
1402+ # The previous rule catches all .map files, anything else
1403+ # indicates we left the map chunk.
1404+ /[-+] [ab]\// {in_map=0}
1405
1406 # Triggering this rule, which starts a line and ends it
1407 # with a { identifies a versioned section. The section name is
1408diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
1409index b16bace..9902e2a 100755
1410--- a/devtools/checkpatches.sh
1411+++ b/devtools/checkpatches.sh
1412@@ -70,6 +70,14 @@ check_forbidden_additions() { # <patch>
1413 -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
1414 "$1" || res=1
1415
1416+ # links must prefer https over http
1417+ awk -v FOLDERS='doc' \
1418+ -v EXPRESSIONS='http://.*dpdk.org' \
1419+ -v RET_ON_FAIL=1 \
1420+ -v MESSAGE='Using non https link to dpdk.org' \
1421+ -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
1422+ "$1" || res=1
1423+
1424 return $res
1425 }
1426
1427diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md
1428index dff496b..d7c8bd2 100644
1429--- a/doc/api/doxy-api-index.md
1430+++ b/doc/api/doxy-api-index.md
1431@@ -1,4 +1,4 @@
1432-API {#index}
1433+API
1434 ===
1435
1436 <!--
1437diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in
1438index 1c4392e..12f0a26 100644
1439--- a/doc/api/doxy-api.conf.in
1440+++ b/doc/api/doxy-api.conf.in
1441@@ -3,6 +3,7 @@
1442
1443 PROJECT_NAME = DPDK
1444 PROJECT_NUMBER = @VERSION@
1445+USE_MDFILE_AS_MAINPAGE = @TOPDIR@/doc/api/doxy-api-index.md
1446 INPUT = @TOPDIR@/doc/api/doxy-api-index.md \
1447 @TOPDIR@/drivers/bus/vdev \
1448 @TOPDIR@/drivers/crypto/scheduler \
1449diff --git a/doc/guides/conf.py b/doc/guides/conf.py
1450index 0892c06..c1a82be 100644
1451--- a/doc/guides/conf.py
1452+++ b/doc/guides/conf.py
1453@@ -314,16 +314,22 @@ def print_table_css(outfile, table_id):
1454 cursor: default;
1455 overflow: hidden;
1456 }
1457+ table#idx p {
1458+ margin: 0;
1459+ line-height: inherit;
1460+ }
1461 table#idx th, table#idx td {
1462 text-align: center;
1463+ border: solid 1px #ddd;
1464 }
1465 table#idx th {
1466- font-size: 72%;
1467+ padding: 0.5em 0;
1468+ }
1469+ table#idx th, table#idx th p {
1470+ font-size: 11px;
1471 white-space: pre-wrap;
1472 vertical-align: top;
1473- padding: 0.5em 0;
1474 min-width: 0.9em;
1475- width: 2em;
1476 }
1477 table#idx col:first-child {
1478 width: 0;
1479@@ -332,9 +338,11 @@ def print_table_css(outfile, table_id):
1480 vertical-align: bottom;
1481 }
1482 table#idx td {
1483- font-size: 70%;
1484 padding: 1px;
1485 }
1486+ table#idx td, table#idx td p {
1487+ font-size: 11px;
1488+ }
1489 table#idx td:first-child {
1490 padding-left: 1em;
1491 text-align: left;
1492@@ -410,4 +418,8 @@ def setup(app):
1493 # Process the numref references once the doctree has been created.
1494 app.connect('doctree-resolved', process_numref)
1495
1496- app.add_stylesheet('css/custom.css')
1497+ try:
1498+ # New function in sphinx 1.8
1499+ app.add_css_file('css/custom.css')
1500+ except:
1501+ app.add_stylesheet('css/custom.css')
1502diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
1503index 05ca959..2198519 100644
1504--- a/doc/guides/contributing/abi_policy.rst
1505+++ b/doc/guides/contributing/abi_policy.rst
1506@@ -220,19 +220,18 @@ Examples of ABI Changes
1507 The following are examples of allowable ABI changes occurring between
1508 declarations of major ABI versions.
1509
1510-* DPDK 19.11 release, defines the function ``rte_foo()``, and ``rte_foo()``
1511- as part of the major ABI version ``20``.
1512+* DPDK 19.11 release defines the function ``rte_foo()`` ; ``rte_foo()``
1513+ is part of the major ABI version ``20``.
1514
1515-* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``, and
1516- this is not a problem as long as the symbol ``rte_foo@DPDK20`` is
1517+* DPDK 20.02 release defines a new function ``rte_foo(uint8_t bar)``.
1518+ This is not a problem as long as the symbol ``rte_foo@DPDK20`` is
1519 preserved through :ref:`abi_versioning`.
1520
1521 - The new function may be marked with the ``__rte_experimental`` tag for a
1522 number of releases, as described in the section :ref:`experimental_apis`.
1523
1524- - Once ``rte_foo(uint8_t bar)`` becomes non-experimental ``rte_foo()`` is then
1525- declared as ``__rte_depreciated``, with an associated deprecation notice
1526- provided.
1527+ - Once ``rte_foo(uint8_t bar)`` becomes non-experimental, ``rte_foo()`` is
1528+ declared as ``__rte_deprecated`` and an deprecation notice is provided.
1529
1530 * DPDK 19.11 is not re-released to include ``rte_foo(uint8_t bar)``, the new
1531 version of ``rte_foo`` only exists from DPDK 20.02 onwards as described in the
1532@@ -242,13 +241,13 @@ declarations of major ABI versions.
1533 rte_baz()``. This function may or may not exist in the DPDK 20.05 release.
1534
1535 * An application ``dPacket`` wishes to use ``rte_foo(uint8_t bar)``, before the
1536- declaration of the DPDK ``21`` major API version. The application can only
1537+ declaration of the DPDK ``21`` major ABI version. The application can only
1538 ensure its runtime dependencies are met by specifying ``DPDK (>= 20.2)`` as
1539- an explicit package dependency, as the soname only may only indicate the
1540+ an explicit package dependency, as the soname can only indicate the
1541 supported major ABI version.
1542
1543 * At the release of DPDK 20.11, the function ``rte_foo(uint8_t bar)`` becomes
1544- formally part of then new major ABI version DPDK 21.0 and ``rte_foo()`` may be
1545+ formally part of then new major ABI version DPDK ``21`` and ``rte_foo()`` may be
1546 removed.
1547
1548 .. _deprecation_notices:
1549@@ -322,6 +321,6 @@ Libraries
1550
1551 Libraries marked as ``experimental`` are entirely not considered part of an ABI
1552 version, and may change without warning at any time. Experimental libraries
1553-always have a major version of ``0`` to indicate they exist outside of
1554+always have a major ABI version of ``0`` to indicate they exist outside of
1555 :ref:`abi_versioning` , with the minor version incremented with each ABI change
1556 to library.
1557diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
1558index a21f4e7..ea9d996 100644
1559--- a/doc/guides/contributing/abi_versioning.rst
1560+++ b/doc/guides/contributing/abi_versioning.rst
1561@@ -200,7 +200,7 @@ private, is safe), but it also requires modifying the code as follows
1562 Note also that, being a public function, the header file prototype must also be
1563 changed, as must all the call sites, to reflect the new ABI footprint. We will
1564 maintain previous ABI versions that are accessible only to previously compiled
1565-binaries
1566+binaries.
1567
1568 The addition of a parameter to the function is ABI breaking as the function is
1569 public, and existing application may use it in its current form. However, the
1570@@ -266,12 +266,12 @@ This file needs to be modified as follows
1571
1572 } DPDK_20;
1573
1574-The addition of the new block tells the linker that a new version node is
1575-available (DPDK_21), which contains the symbol rte_acl_create, and inherits
1576+The addition of the new block tells the linker that a new version node
1577+``DPDK_21`` is available, which contains the symbol rte_acl_create, and inherits
1578 the symbols from the DPDK_20 node. This list is directly translated into a
1579-list of exported symbols when DPDK is compiled as a shared library
1580+list of exported symbols when DPDK is compiled as a shared library.
1581
1582-Next, we need to specify in the code which function map to the rte_acl_create
1583+Next, we need to specify in the code which function maps to the rte_acl_create
1584 symbol at which versions. First, at the site of the initial symbol definition,
1585 we need to update the function so that it is uniquely named, and not in conflict
1586 with the public symbol name
1587@@ -288,24 +288,29 @@ with the public symbol name
1588 ...
1589
1590 Note that the base name of the symbol was kept intact, as this is conducive to
1591-the macros used for versioning symbols and we have annotated the function as an
1592-implementation of versioned symbol. That is our next step, mapping this new
1593-symbol name to the initial symbol name at version node 20. Immediately after
1594-the function, we add this line of code
1595+the macros used for versioning symbols and we have annotated the function as
1596+``__vsym``, an implementation of a versioned symbol . That is our next step,
1597+mapping this new symbol name to the initial symbol name at version node 20.
1598+Immediately after the function, we add the VERSION_SYMBOL macro.
1599
1600 .. code-block:: c
1601
1602+ #include <rte_function_versioning.h>
1603+
1604+ ...
1605 VERSION_SYMBOL(rte_acl_create, _v20, 20);
1606
1607 Remembering to also add the rte_function_versioning.h header to the requisite c
1608-file where these changes are being made. The above macro instructs the linker to
1609+file where these changes are being made. The macro instructs the linker to
1610 create a new symbol ``rte_acl_create@DPDK_20``, which matches the symbol created
1611 in older builds, but now points to the above newly named function. We have now
1612 mapped the original rte_acl_create symbol to the original function (but with a
1613 new name).
1614
1615-Next, we need to create the 21 version of the symbol. We create a new function
1616-name, with a different suffix, and implement it appropriately
1617+Please see the section :ref:`Enabling versioning macros
1618+<enabling_versioning_macros>` to enable this macro in the meson/ninja build.
1619+Next, we need to create the new ``v21`` version of the symbol. We create a new
1620+function name, with the ``v21`` suffix, and implement it appropriately.
1621
1622 .. code-block:: c
1623
1624@@ -320,35 +325,58 @@ name, with a different suffix, and implement it appropriately
1625 }
1626
1627 This code serves as our new API call. Its the same as our old call, but adds the
1628-new parameter in place. Next we need to map this function to the symbol
1629-``rte_acl_create@DPDK_21``. To do this, we modify the public prototype of the
1630-call in the header file, adding the macro there to inform all including
1631-applications, that on re-link, the default rte_acl_create symbol should point to
1632-this function. Note that we could do this by simply naming the function above
1633-rte_acl_create, and the linker would chose the most recent version tag to apply
1634-in the version script, but we can also do this in the header file
1635+new parameter in place. Next we need to map this function to the new default
1636+symbol ``rte_acl_create@DPDK_21``. To do this, immediately after the function,
1637+we add the BIND_DEFAULT_SYMBOL macro.
1638+
1639+.. code-block:: c
1640+
1641+ #include <rte_function_versioning.h>
1642+
1643+ ...
1644+ BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
1645+
1646+The macro instructs the linker to create the new default symbol
1647+``rte_acl_create@DPDK_21``, which points to the above newly named function.
1648+
1649+We finally modify the prototype of the call in the public header file,
1650+such that it contains both versions of the symbol and the public API.
1651
1652 .. code-block:: c
1653
1654 struct rte_acl_ctx *
1655- -rte_acl_create(const struct rte_acl_param *param);
1656- +rte_acl_create_v21(const struct rte_acl_param *param, int debug);
1657- +BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
1658-
1659-The BIND_DEFAULT_SYMBOL macro explicitly tells applications that include this
1660-header, to link to the rte_acl_create_v21 function and apply the DPDK_21
1661-version node to it. This method is more explicit and flexible than just
1662-re-implementing the exact symbol name, and allows for other features (such as
1663-linking to the old symbol version by default, when the new ABI is to be opt-in
1664-for a period.
1665-
1666-One last thing we need to do. Note that we've taken what was a public symbol,
1667-and duplicated it into two uniquely and differently named symbols. We've then
1668-mapped each of those back to the public symbol ``rte_acl_create`` with different
1669-version tags. This only applies to dynamic linking, as static linking has no
1670-notion of versioning. That leaves this code in a position of no longer having a
1671-symbol simply named ``rte_acl_create`` and a static build will fail on that
1672-missing symbol.
1673+ rte_acl_create(const struct rte_acl_param *param);
1674+
1675+ struct rte_acl_ctx * __vsym
1676+ rte_acl_create_v20(const struct rte_acl_param *param);
1677+
1678+ struct rte_acl_ctx * __vsym
1679+ rte_acl_create_v21(const struct rte_acl_param *param, int debug);
1680+
1681+
1682+And that's it, on the next shared library rebuild, there will be two versions of
1683+rte_acl_create, an old DPDK_20 version, used by previously built applications,
1684+and a new DPDK_21 version, used by future built applications.
1685+
1686+.. note::
1687+
1688+ **Before you leave**, please take care reviewing the sections on
1689+ :ref:`mapping static symbols <mapping_static_symbols>`,
1690+ :ref:`enabling versioning macros <enabling_versioning_macros>`,
1691+ and :ref:`ABI deprecation <abi_deprecation>`.
1692+
1693+
1694+.. _mapping_static_symbols:
1695+
1696+Mapping static symbols
1697+______________________
1698+
1699+Now we've taken what was a public symbol, and duplicated it into two uniquely
1700+and differently named symbols. We've then mapped each of those back to the
1701+public symbol ``rte_acl_create`` with different version tags. This only applies
1702+to dynamic linking, as static linking has no notion of versioning. That leaves
1703+this code in a position of no longer having a symbol simply named
1704+``rte_acl_create`` and a static build will fail on that missing symbol.
1705
1706 To correct this, we can simply map a function of our choosing back to the public
1707 symbol in the static build with the ``MAP_STATIC_SYMBOL`` macro. Generally the
1708@@ -369,15 +397,31 @@ defined, we add this
1709 That tells the compiler that, when building a static library, any calls to the
1710 symbol ``rte_acl_create`` should be linked to ``rte_acl_create_v21``
1711
1712-That's it, on the next shared library rebuild, there will be two versions of
1713-rte_acl_create, an old DPDK_20 version, used by previously built applications,
1714-and a new DPDK_21 version, used by future built applications.
1715
1716+.. _enabling_versioning_macros:
1717+
1718+Enabling versioning macros
1719+__________________________
1720+
1721+Finally, we need to indicate to the meson/ninja build system
1722+to enable versioning macros when building the
1723+library or driver. In the libraries or driver where we have added symbol
1724+versioning, in the ``meson.build`` file we add the following
1725+
1726+.. code-block:: none
1727+
1728+ use_function_versioning = true
1729+
1730+at the start of the head of the file. This will indicate to the tool-chain to
1731+enable the function version macros when building. There is no corresponding
1732+directive required for the ``make`` build system.
1733+
1734+.. _abi_deprecation:
1735
1736 Deprecating part of a public API
1737 ________________________________
1738
1739-Lets assume that you've done the above update, and in preparation for the next
1740+Lets assume that you've done the above updates, and in preparation for the next
1741 major ABI version you decide you would like to retire the old version of the
1742 function. After having gone through the ABI deprecation announcement process,
1743 removal is easy. Start by removing the symbol from the requisite version map
1744@@ -421,8 +465,8 @@ Next remove the corresponding versioned export.
1745
1746
1747 Note that the internal function definition could also be removed, but its used
1748-in our example by the newer version v21, so we leave it in place and declare it
1749-as static. This is a coding style choice.
1750+in our example by the newer version ``v21``, so we leave it in place and declare
1751+it as static. This is a coding style choice.
1752
1753 .. _deprecating_entire_abi:
1754
1755diff --git a/doc/guides/contributing/documentation.rst b/doc/guides/contributing/documentation.rst
1756index 27e4b13..3924771 100644
1757--- a/doc/guides/contributing/documentation.rst
1758+++ b/doc/guides/contributing/documentation.rst
1759@@ -82,7 +82,7 @@ added to by the developer.
1760 * **API documentation**
1761
1762 The API documentation explains how to use the public DPDK functions.
1763- The `API index page <http://doc.dpdk.org/api/>`_ shows the generated API documentation with related groups of functions.
1764+ The `API index page <https://doc.dpdk.org/api/>`_ shows the generated API documentation with related groups of functions.
1765
1766 The API documentation should be updated via Doxygen comments when new functions are added.
1767
1768@@ -561,14 +561,14 @@ Hyperlinks
1769 ~~~~~~~~~~
1770
1771 * Links to external websites can be plain URLs.
1772- The following is rendered as http://dpdk.org::
1773+ The following is rendered as https://dpdk.org::
1774
1775- http://dpdk.org
1776+ https://dpdk.org
1777
1778 * They can contain alternative text.
1779- The following is rendered as `Check out DPDK <http://dpdk.org>`_::
1780+ The following is rendered as `Check out DPDK <https://dpdk.org>`_::
1781
1782- `Check out DPDK <http://dpdk.org>`_
1783+ `Check out DPDK <https://dpdk.org>`_
1784
1785 * An internal link can be generated by placing labels in the document with the format ``.. _label_name``.
1786
1787@@ -666,7 +666,7 @@ The following are some guidelines for use of Doxygen in the DPDK API documentati
1788 */
1789
1790 In the API documentation the functions will be rendered as links, see the
1791- `online section of the rte_ethdev.h docs <http://doc.dpdk.org/api/rte__ethdev_8h.html>`_ that contains the above text.
1792+ `online section of the rte_ethdev.h docs <https://doc.dpdk.org/api/rte__ethdev_8h.html>`_ that contains the above text.
1793
1794 * The ``@see`` keyword can be used to create a *see also* link to another file or library.
1795 This directive should be placed on one line at the bottom of the documentation section.
1796diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
1797index 0686450..5ca0377 100644
1798--- a/doc/guides/contributing/patches.rst
1799+++ b/doc/guides/contributing/patches.rst
1800@@ -28,9 +28,9 @@ The DPDK development process has the following features:
1801 * All sub-repositories are merged into main repository for ``-rc1`` and ``-rc2`` versions of the release.
1802 * After the ``-rc2`` release all patches should target the main repository.
1803
1804-The mailing list for DPDK development is `dev@dpdk.org <http://mails.dpdk.org/archives/dev/>`_.
1805-Contributors will need to `register for the mailing list <http://mails.dpdk.org/listinfo/dev>`_ in order to submit patches.
1806-It is also worth registering for the DPDK `Patchwork <http://patches.dpdk.org/project/dpdk/list/>`_
1807+The mailing list for DPDK development is `dev@dpdk.org <https://mails.dpdk.org/archives/dev/>`_.
1808+Contributors will need to `register for the mailing list <https://mails.dpdk.org/listinfo/dev>`_ in order to submit patches.
1809+It is also worth registering for the DPDK `Patchwork <https://patches.dpdk.org/project/dpdk/list/>`_
1810
1811 If you are using the GitHub service, you can link your repository to
1812 the ``travis-ci.org`` build service. When you push patches to your GitHub
1813@@ -130,12 +130,12 @@ The source code can be cloned using either of the following:
1814 main repository::
1815
1816 git clone git://dpdk.org/dpdk
1817- git clone http://dpdk.org/git/dpdk
1818+ git clone https://dpdk.org/git/dpdk
1819
1820-sub-repositories (`list <http://git.dpdk.org/next>`_)::
1821+sub-repositories (`list <https://git.dpdk.org/next>`_)::
1822
1823 git clone git://dpdk.org/next/dpdk-next-*
1824- git clone http://dpdk.org/git/next/dpdk-next-*
1825+ git clone https://dpdk.org/git/next/dpdk-next-*
1826
1827 Make your Changes
1828 -----------------
1829@@ -182,7 +182,7 @@ A good way of thinking about whether a patch should be split is to consider whet
1830 applied without dependencies as a backport.
1831
1832 It is better to keep the related documentation changes in the same patch
1833-file as the code, rather than one big documentation patch at then end of a
1834+file as the code, rather than one big documentation patch at the end of a
1835 patchset. This makes it easier for future maintenance and development of the
1836 code.
1837
1838@@ -320,7 +320,7 @@ Patch for Stable Releases
1839 ~~~~~~~~~~~~~~~~~~~~~~~~~
1840
1841 All fix patches to the master branch that are candidates for backporting
1842-should also be CCed to the `stable@dpdk.org <http://mails.dpdk.org/listinfo/stable>`_
1843+should also be CCed to the `stable@dpdk.org <https://mails.dpdk.org/listinfo/stable>`_
1844 mailing list.
1845 In the commit message body the Cc: stable@dpdk.org should be inserted as follows::
1846
1847@@ -423,7 +423,7 @@ are loaded from the following files, in order of preference::
1848 ~/.config/dpdk/devel.config
1849 /etc/dpdk/devel.config.
1850
1851-Once the environment variable the script can be run as follows::
1852+Once the environment variable is set, the script can be run as follows::
1853
1854 devtools/checkpatches.sh ~/patch/
1855
1856@@ -548,7 +548,7 @@ If the patch is in relation to a previous email thread you can add it to the sam
1857 git send-email --to dev@dpdk.org --in-reply-to <1234-foo@bar.com> 000*.patch
1858
1859 The Message ID can be found in the raw text of emails or at the top of each Patchwork patch,
1860-`for example <http://patches.dpdk.org/patch/7646/>`_.
1861+`for example <https://patches.dpdk.org/patch/7646/>`_.
1862 Shallow threading (``--thread --no-chain-reply-to``) is preferred for a patch series.
1863
1864 Once submitted your patches will appear on the mailing list and in Patchwork.
1865diff --git a/doc/guides/contributing/stable.rst b/doc/guides/contributing/stable.rst
1866index 4d38bb8..021c762 100644
1867--- a/doc/guides/contributing/stable.rst
1868+++ b/doc/guides/contributing/stable.rst
1869@@ -51,7 +51,7 @@ agreement and a commitment from a maintainer. The current policy is that each
1870 year's November (X.11) release will be maintained as an LTS for 2 years.
1871
1872 After the X.11 release, an LTS branch will be created for it at
1873-http://git.dpdk.org/dpdk-stable where bugfixes will be backported to.
1874+https://git.dpdk.org/dpdk-stable where bugfixes will be backported to.
1875
1876 A LTS release may align with the declaration of a new major ABI version,
1877 please read the :doc:`abi_policy` for more information.
1878@@ -107,7 +107,7 @@ The Stable and LTS release are coordinated on the stable@dpdk.org mailing
1879 list.
1880
1881 All fix patches to the master branch that are candidates for backporting
1882-should also be CCed to the `stable@dpdk.org <http://mails.dpdk.org/listinfo/stable>`_
1883+should also be CCed to the `stable@dpdk.org <https://mails.dpdk.org/listinfo/stable>`_
1884 mailing list.
1885
1886
1887@@ -118,7 +118,7 @@ A Stable Release will be released by:
1888
1889 * Tagging the release with YY.MM.n (year, month, number).
1890 * Uploading a tarball of the release to dpdk.org.
1891-* Sending an announcement to the `announce@dpdk.org <http://mails.dpdk.org/listinfo/announce>`_
1892+* Sending an announcement to the `announce@dpdk.org <https://mails.dpdk.org/listinfo/announce>`_
1893 list.
1894
1895-Stable releases are available on the `dpdk.org download page <http://core.dpdk.org/download/>`_.
1896+Stable releases are available on the `dpdk.org download page <https://core.dpdk.org/download/>`_.
1897diff --git a/doc/guides/contributing/vulnerability.rst b/doc/guides/contributing/vulnerability.rst
1898index 5484119..da00acd 100644
1899--- a/doc/guides/contributing/vulnerability.rst
1900+++ b/doc/guides/contributing/vulnerability.rst
1901@@ -36,11 +36,11 @@ Report
1902
1903 Do not use Bugzilla (unsecured).
1904 Instead, send GPG-encrypted emails
1905-to `security@dpdk.org <http://core.dpdk.org/security#contact>`_.
1906+to `security@dpdk.org <https://core.dpdk.org/security#contact>`_.
1907 Anyone can post to this list.
1908 In order to reduce the disclosure of a vulnerability in the early stages,
1909 membership of this list is intentionally limited to a `small number of people
1910-<http://mails.dpdk.org/roster/security>`_.
1911+<https://mails.dpdk.org/roster/security>`_.
1912
1913 It is additionally encouraged to GPG-sign one-on-one conversations
1914 as part of the security process.
1915@@ -188,7 +188,7 @@ Downstream stakeholders are expected not to deploy or disclose patches
1916 until the embargo is passed, otherwise they will be removed from the list.
1917
1918 Downstream stakeholders (in `security-prerelease list
1919-<http://mails.dpdk.org/roster/security-prerelease>`_), are:
1920+<https://mails.dpdk.org/roster/security-prerelease>`_), are:
1921
1922 * Operating system vendors known to package DPDK
1923 * Major DPDK users, considered trustworthy by the technical board, who
1924diff --git a/doc/guides/cryptodevs/aesni_gcm.rst b/doc/guides/cryptodevs/aesni_gcm.rst
1925index 151aa30..a8ea320 100644
1926--- a/doc/guides/cryptodevs/aesni_gcm.rst
1927+++ b/doc/guides/cryptodevs/aesni_gcm.rst
1928@@ -45,6 +45,19 @@ can be downloaded in `<https://github.com/01org/intel-ipsec-mb/archive/v0.53.zip
1929 make
1930 make install
1931
1932+The library requires NASM to be built. Depending on the library version, it might require a minimum NASM version (e.g. v0.53 requires at least NASM 2.13.03).
1933+
1934+NASM is packaged for different OS. However, on some OS the version is too old, so a manual installation is required.
1935+In that case, NASM can be downloaded from
1936+`NASM website <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_.
1937+Once it is downloaded, extract it and follow these steps:
1938+
1939+.. code-block:: console
1940+
1941+ ./configure
1942+ make
1943+ make install
1944+
1945 As a reference, the following table shows a mapping between the past DPDK versions
1946 and the external crypto libraries supported by them:
1947
1948diff --git a/doc/guides/cryptodevs/aesni_mb.rst b/doc/guides/cryptodevs/aesni_mb.rst
1949index 5d8fb46..ca6c169 100644
1950--- a/doc/guides/cryptodevs/aesni_mb.rst
1951+++ b/doc/guides/cryptodevs/aesni_mb.rst
1952@@ -72,6 +72,19 @@ can be downloaded from `<https://github.com/01org/intel-ipsec-mb/archive/v0.53.z
1953 make
1954 make install
1955
1956+The library requires NASM to be built. Depending on the library version, it might require a minimum NASM version (e.g. v0.53 requires at least NASM 2.13.03).
1957+
1958+NASM is packaged for different OS. However, on some OS the version is too old, so a manual installation is required.
1959+In that case, NASM can be downloaded from
1960+`NASM website <https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D>`_.
1961+Once it is downloaded, extract it and follow these steps:
1962+
1963+.. code-block:: console
1964+
1965+ ./configure
1966+ make
1967+ make install
1968+
1969 As a reference, the following table shows a mapping between the past DPDK versions
1970 and the Multi-Buffer library version supported by them:
1971
1972diff --git a/doc/guides/cryptodevs/features/qat.ini b/doc/guides/cryptodevs/features/qat.ini
1973index 6e350eb..a722419 100644
1974--- a/doc/guides/cryptodevs/features/qat.ini
1975+++ b/doc/guides/cryptodevs/features/qat.ini
1976@@ -44,10 +44,15 @@ ZUC EEA3 = Y
1977 [Auth]
1978 NULL = Y
1979 MD5 HMAC = Y
1980+SHA1 = Y
1981 SHA1 HMAC = Y
1982+SHA224 = Y
1983 SHA224 HMAC = Y
1984+SHA256 = Y
1985 SHA256 HMAC = Y
1986+SHA384 = Y
1987 SHA384 HMAC = Y
1988+SHA512 = Y
1989 SHA512 HMAC = Y
1990 AES GMAC = Y
1991 SNOW3G UIA2 = Y
1992diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
1993index 6197875..bb04590 100644
1994--- a/doc/guides/cryptodevs/qat.rst
1995+++ b/doc/guides/cryptodevs/qat.rst
1996@@ -52,10 +52,15 @@ Cipher algorithms:
1997
1998 Hash algorithms:
1999
2000+* ``RTE_CRYPTO_AUTH_SHA1``
2001 * ``RTE_CRYPTO_AUTH_SHA1_HMAC``
2002+* ``RTE_CRYPTO_AUTH_SHA224``
2003 * ``RTE_CRYPTO_AUTH_SHA224_HMAC``
2004+* ``RTE_CRYPTO_AUTH_SHA256``
2005 * ``RTE_CRYPTO_AUTH_SHA256_HMAC``
2006+* ``RTE_CRYPTO_AUTH_SHA384``
2007 * ``RTE_CRYPTO_AUTH_SHA384_HMAC``
2008+* ``RTE_CRYPTO_AUTH_SHA512``
2009 * ``RTE_CRYPTO_AUTH_SHA512_HMAC``
2010 * ``RTE_CRYPTO_AUTH_AES_XCBC_MAC``
2011 * ``RTE_CRYPTO_AUTH_SNOW3G_UIA2``
2012diff --git a/doc/guides/eventdevs/index.rst b/doc/guides/eventdevs/index.rst
2013index 570905b..bb66a5e 100644
2014--- a/doc/guides/eventdevs/index.rst
2015+++ b/doc/guides/eventdevs/index.rst
2016@@ -5,7 +5,7 @@ Event Device Drivers
2017 ====================
2018
2019 The following are a list of event device PMDs, which can be used from an
2020-application trough the eventdev API.
2021+application through the eventdev API.
2022
2023 .. toctree::
2024 :maxdepth: 2
2025diff --git a/doc/guides/freebsd_gsg/install_from_ports.rst b/doc/guides/freebsd_gsg/install_from_ports.rst
2026index 29f16cc..dce028b 100644
2027--- a/doc/guides/freebsd_gsg/install_from_ports.rst
2028+++ b/doc/guides/freebsd_gsg/install_from_ports.rst
2029@@ -62,7 +62,7 @@ environmental variables should be set as below:
2030 .. note::
2031
2032 To install a copy of the DPDK compiled using gcc, please download the
2033- official DPDK package from http://core.dpdk.org/download/ and install manually using
2034+ official DPDK package from https://core.dpdk.org/download/ and install manually using
2035 the instructions given in the next chapter, :ref:`building_from_source`
2036
2037 An example application can therefore be copied to a user's home directory and
2038diff --git a/doc/guides/linux_gsg/eal_args.include.rst b/doc/guides/linux_gsg/eal_args.include.rst
2039index ed8b0e3..7b2f6b1 100644
2040--- a/doc/guides/linux_gsg/eal_args.include.rst
2041+++ b/doc/guides/linux_gsg/eal_args.include.rst
2042@@ -132,7 +132,7 @@ Debugging options
2043
2044 Specify log level for a specific component. For example::
2045
2046- --log-level eal:8
2047+ --log-level lib.eal:debug
2048
2049 Can be specified multiple times.
2050
2051diff --git a/doc/guides/linux_gsg/nic_perf_intel_platform.rst b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
2052index c554c21..1dabbce 100644
2053--- a/doc/guides/linux_gsg/nic_perf_intel_platform.rst
2054+++ b/doc/guides/linux_gsg/nic_perf_intel_platform.rst
2055@@ -64,7 +64,7 @@ This aligns with the previous output which showed that each channel has one memo
2056 Network Interface Card Requirements
2057 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2058
2059-Use a `DPDK supported <http://core.dpdk.org/supported/>`_ high end NIC such as the Intel XL710 40GbE.
2060+Use a `DPDK supported <https://core.dpdk.org/supported/>`_ high end NIC such as the Intel XL710 40GbE.
2061
2062 Make sure each NIC has been flashed the latest version of NVM/firmware.
2063
2064diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
2065index 65e536d..24d2b57 100644
2066--- a/doc/guides/nics/enic.rst
2067+++ b/doc/guides/nics/enic.rst
2068@@ -14,7 +14,7 @@ How to obtain ENIC PMD integrated DPDK
2069 --------------------------------------
2070
2071 ENIC PMD support is integrated into the DPDK suite. dpdk-<version>.tar.gz
2072-should be downloaded from http://core.dpdk.org/download/
2073+should be downloaded from https://core.dpdk.org/download/
2074
2075
2076 Configuration information
2077diff --git a/doc/guides/nics/fail_safe.rst b/doc/guides/nics/fail_safe.rst
2078index 6c02d7e..60bbf40 100644
2079--- a/doc/guides/nics/fail_safe.rst
2080+++ b/doc/guides/nics/fail_safe.rst
2081@@ -49,7 +49,7 @@ The Fail-safe PMD can be used like most other DPDK virtual devices, by passing a
2082 ``--vdev`` parameter to the EAL when starting the application. The device name
2083 must start with the *net_failsafe* prefix, followed by numbers or letters. This
2084 name must be unique for each device. Each fail-safe instance must have at least one
2085-sub-device, up to ``RTE_MAX_ETHPORTS-1``.
2086+sub-device, and at most two.
2087
2088 A sub-device can be any legal DPDK device, including possibly another fail-safe
2089 instance.
2090diff --git a/doc/guides/nics/features/hns3.ini b/doc/guides/nics/features/hns3.ini
2091index 6df789e..cd5c08a 100644
2092--- a/doc/guides/nics/features/hns3.ini
2093+++ b/doc/guides/nics/features/hns3.ini
2094@@ -5,6 +5,7 @@
2095 ;
2096 [Features]
2097 Link status = Y
2098+Rx interrupt = Y
2099 MTU update = Y
2100 Jumbo frame = Y
2101 Promiscuous mode = Y
2102diff --git a/doc/guides/nics/features/hns3_vf.ini b/doc/guides/nics/features/hns3_vf.ini
2103index 41497c4..fd00ac3 100644
2104--- a/doc/guides/nics/features/hns3_vf.ini
2105+++ b/doc/guides/nics/features/hns3_vf.ini
2106@@ -5,6 +5,7 @@
2107 ;
2108 [Features]
2109 Link status = Y
2110+Rx interrupt = Y
2111 MTU update = Y
2112 Jumbo frame = Y
2113 Unicast MAC filter = Y
2114diff --git a/doc/guides/nics/features/i40e.ini b/doc/guides/nics/features/i40e.ini
2115index e5ae6de..c2717cd 100644
2116--- a/doc/guides/nics/features/i40e.ini
2117+++ b/doc/guides/nics/features/i40e.ini
2118@@ -18,7 +18,6 @@ TSO = Y
2119 Promiscuous mode = Y
2120 Allmulticast mode = Y
2121 Unicast MAC filter = Y
2122-Multicast MAC filter = Y
2123 RSS hash = Y
2124 RSS key update = Y
2125 RSS reta update = Y
2126diff --git a/doc/guides/nics/features/iavf.ini b/doc/guides/nics/features/iavf.ini
2127index 8014305..f08392a 100644
2128--- a/doc/guides/nics/features/iavf.ini
2129+++ b/doc/guides/nics/features/iavf.ini
2130@@ -15,7 +15,6 @@ TSO = Y
2131 Promiscuous mode = Y
2132 Allmulticast mode = Y
2133 Unicast MAC filter = Y
2134-Multicast MAC filter = Y
2135 RSS hash = Y
2136 RSS key update = Y
2137 RSS reta update = Y
2138diff --git a/doc/guides/nics/features/ice.ini b/doc/guides/nics/features/ice.ini
2139index 65923f0..949d09f 100644
2140--- a/doc/guides/nics/features/ice.ini
2141+++ b/doc/guides/nics/features/ice.ini
2142@@ -18,7 +18,6 @@ TSO = Y
2143 Promiscuous mode = Y
2144 Allmulticast mode = Y
2145 Unicast MAC filter = Y
2146-Multicast MAC filter = Y
2147 RSS hash = Y
2148 RSS key update = Y
2149 RSS reta update = Y
2150diff --git a/doc/guides/nics/features/igb.ini b/doc/guides/nics/features/igb.ini
2151index 0351f84..167c0ca 100644
2152--- a/doc/guides/nics/features/igb.ini
2153+++ b/doc/guides/nics/features/igb.ini
2154@@ -15,6 +15,7 @@ TSO = Y
2155 Promiscuous mode = Y
2156 Allmulticast mode = Y
2157 Unicast MAC filter = Y
2158+Multicast MAC filter = Y
2159 RSS hash = Y
2160 RSS key update = Y
2161 RSS reta update = Y
2162diff --git a/doc/guides/nics/features/ixgbe.ini b/doc/guides/nics/features/ixgbe.ini
2163index c412d7a..1c7a2a5 100644
2164--- a/doc/guides/nics/features/ixgbe.ini
2165+++ b/doc/guides/nics/features/ixgbe.ini
2166@@ -17,6 +17,7 @@ TSO = Y
2167 Promiscuous mode = Y
2168 Allmulticast mode = Y
2169 Unicast MAC filter = Y
2170+Multicast MAC filter = Y
2171 RSS hash = Y
2172 RSS key update = Y
2173 RSS reta update = Y
2174diff --git a/doc/guides/nics/hns3.rst b/doc/guides/nics/hns3.rst
2175index 505488b..8d19f48 100644
2176--- a/doc/guides/nics/hns3.rst
2177+++ b/doc/guides/nics/hns3.rst
2178@@ -22,6 +22,7 @@ Features of the HNS3 PMD are:
2179 - Port hardware statistics
2180 - Jumbo frames
2181 - Link state information
2182+- Interrupt mode for RX
2183 - VLAN stripping
2184 - NUMA support
2185
2186diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst
2187index c7c34b6..61d72c2 100644
2188--- a/doc/guides/nics/i40e.rst
2189+++ b/doc/guides/nics/i40e.rst
2190@@ -667,6 +667,15 @@ Use 16 Bytes RX Descriptor Size
2191 As i40e PMD supports both 16 and 32 bytes RX descriptor sizes, and 16 bytes size can provide helps to high performance of small packets.
2192 Configuration of ``CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC`` in config files can be changed to use 16 bytes size RX descriptors.
2193
2194+Input set requirement of each pctype for FDIR
2195+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2196+
2197+Each PCTYPE can only have one specific FDIR input set at one time.
2198+For example, if creating 2 rte_flow rules with different input set for one PCTYPE,
2199+it will fail and return the info "Conflict with the first rule's input set",
2200+which means the current rule's input set conflicts with the first rule's.
2201+Remove the first rule if want to change the input set of the PCTYPE.
2202+
2203 Example of getting best performance with l3fwd example
2204 ------------------------------------------------------
2205
2206diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
2207index 9b90b38..58eb023 100644
2208--- a/doc/guides/nics/ice.rst
2209+++ b/doc/guides/nics/ice.rst
2210@@ -54,10 +54,6 @@ Please note that enabling debugging options may affect system performance.
2211
2212 Toggle display of generic debugging messages.
2213
2214-- ``CONFIG_RTE_LIBRTE_ICE_RX_ALLOW_BULK_ALLOC`` (default ``y``)
2215-
2216- Toggle bulk allocation for RX.
2217-
2218 - ``CONFIG_RTE_LIBRTE_ICE_16BYTE_RX_DESC`` (default ``n``)
2219
2220 Toggle to use a 16-byte RX descriptor, by default the RX descriptor is 32 byte.
2221diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
2222index 86ad404..75f58e6 100644
2223--- a/doc/guides/nics/mlx5.rst
2224+++ b/doc/guides/nics/mlx5.rst
2225@@ -123,6 +123,24 @@ Limitations
2226
2227 Will match any ipv4 packet (VLAN included).
2228
2229+- When using DV flow engine (``dv_flow_en`` = 1), flow pattern without VLAN item
2230+ will match untagged packets only.
2231+ The flow rule::
2232+
2233+ flow create 0 ingress pattern eth / ipv4 / end ...
2234+
2235+ Will match untagged packets only.
2236+ The flow rule::
2237+
2238+ flow create 0 ingress pattern eth / vlan / ipv4 / end ...
2239+
2240+ Will match tagged packets only, with any VLAN ID value.
2241+ The flow rule::
2242+
2243+ flow create 0 ingress pattern eth / vlan vid is 3 / ipv4 / end ...
2244+
2245+ Will only match tagged packets with VLAN ID 3.
2246+
2247 - VLAN pop offload command:
2248
2249 - Flow rules having a VLAN pop offload command as one of their actions and
2250@@ -360,8 +378,7 @@ Run-time configuration
2251
2252 A nonzero value enables configuring Multi-Packet Rx queues. Rx queue is
2253 configured as Multi-Packet RQ if the total number of Rx queues is
2254- ``rxqs_min_mprq`` or more and Rx scatter isn't configured. Disabled by
2255- default.
2256+ ``rxqs_min_mprq`` or more. Disabled by default.
2257
2258 Multi-Packet Rx Queue (MPRQ a.k.a Striding RQ) can further save PCIe bandwidth
2259 by posting a single large buffer for multiple packets. Instead of posting a
2260@@ -386,6 +403,20 @@ Run-time configuration
2261
2262 The size of Rx queue should be bigger than the number of strides.
2263
2264+- ``mprq_log_stride_size`` parameter [int]
2265+
2266+ Log 2 of the size of a stride for Multi-Packet Rx queue. Configuring a smaller
2267+ stride size can save some memory and reduce probability of a depletion of all
2268+ available strides due to unreleased packets by an application. If configured
2269+ value is not in the range of device capability, the default value will be set
2270+ with a warning message. The default value is 11 which is 2048 bytes per a
2271+ stride, valid only if ``mprq_en`` is set. With ``mprq_log_stride_size`` set
2272+ it is possible for a pcaket to span across multiple strides. This mode allows
2273+ support of jumbo frames (9K) with MPRQ. The memcopy of some packets (or part
2274+ of a packet if Rx scatter is configured) may be required in case there is no
2275+ space left for a head room at the end of a stride which incurs some
2276+ performance penalty.
2277+
2278 - ``mprq_max_memcpy_len`` parameter [int]
2279
2280 The maximum length of packet to memcpy in case of Multi-Packet Rx queue. Rx
2281@@ -1214,6 +1245,19 @@ Supported hardware offloads
2282 | | | ConnectX-5 | | ConnectX-5 |
2283 +-----------------------+-----------------+-----------------+
2284
2285+Notes for metadata
2286+------------------
2287+
2288+MARK and META items are interrelated with datapath - they might move from/to
2289+the applications in mbuf fields. Hence, zero value for these items has the
2290+special meaning - it means "no metadata are provided", not zero values are
2291+treated by applications and PMD as valid ones.
2292+
2293+Moreover in the flow engine domain the value zero is acceptable to match and
2294+set, and we should allow to specify zero values as rte_flow parameters for the
2295+META and MARK items and actions. In the same time zero mask has no meaning and
2296+should be rejected on validation stage.
2297+
2298 Notes for testpmd
2299 -----------------
2300
2301diff --git a/doc/guides/prog_guide/cryptodev_lib.rst b/doc/guides/prog_guide/cryptodev_lib.rst
2302index ac16437..c839379 100644
2303--- a/doc/guides/prog_guide/cryptodev_lib.rst
2304+++ b/doc/guides/prog_guide/cryptodev_lib.rst
2305@@ -1097,4 +1097,4 @@ Asymmetric Crypto Device API
2306 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2307
2308 The cryptodev Library API is described in the
2309-`DPDK API Reference <http://doc.dpdk.org/api/>`_
2310+`DPDK API Reference <https://doc.dpdk.org/api/>`_
2311diff --git a/doc/guides/prog_guide/lto.rst b/doc/guides/prog_guide/lto.rst
2312index 43f4c63..277a6f1 100644
2313--- a/doc/guides/prog_guide/lto.rst
2314+++ b/doc/guides/prog_guide/lto.rst
2315@@ -31,7 +31,7 @@ the whole DPDK by setting:
2316
2317 .. code-block:: console
2318
2319- CONFIG_ENABLE_LTO=y
2320+ CONFIG_RTE_ENABLE_LTO=y
2321
2322 in config file.
2323
2324diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst
2325index f6ae7ea..6d7a084 100644
2326--- a/doc/guides/rel_notes/release_19_11.rst
2327+++ b/doc/guides/rel_notes/release_19_11.rst
2328@@ -1340,3 +1340,578 @@ Tested Platforms
2329 * Kernel 4.15.0-88-generic
2330 * IBM Power9 Model 8335-101 CPU: 2.3 (pvr 004e 1203)
2331 * Mellanox Technologies MT28800 Family [ConnectX-5 Ex], firmware version: 16.26.4012, MLNX_OFED_LINUX-4.7-3.2.9.1
2332+
2333+19.11.2 Release Notes
2334+---------------------
2335+
2336+19.11.2 Fixes
2337+~~~~~~~~~~~~~
2338+
2339+* 2cf9c470eb vhost: check log mmap offset and size overflow (CVE-2020-10722)
2340+* 8e9652b0b6 vhost: fix translated address not checked (CVE-2020-10723)
2341+* 95e1f29c26 vhost/crypto: validate keys lengths (CVE-2020-10724)
2342+* 963b6eea05 vhost: fix potential memory space leak (CVE-2020-10725)
2343+* c9c630a117 vhost: fix potential fd leak (CVE-2020-10726)
2344+* cd0ea71bb6 vhost: fix vring index check (CVE-2020-10726)
2345+
2346+19.11.2 Validation
2347+~~~~~~~~~~~~~~~~~~
2348+
2349+* Red Hat(R) Testing
2350+
2351+ * Platform
2352+
2353+ * RHEL 8.3
2354+ * Kernel 4.18
2355+ * Qemu 4.2
2356+ * X540-AT2 NIC(ixgbe, 10G)
2357+
2358+ * Functionality
2359+
2360+ * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing
2361+ * PVP vhost-user 2Q throughput testing
2362+ * PVP vhost-user 1Q - cross numa node throughput testing
2363+ * PVP 1Q live migration testing
2364+ * PVP 1Q cross numa node live migration testing
2365+
2366+* Intel(R) Testing
2367+
2368+ * Virtio features
2369+
2370+ * vhost/virtio loopback test with virtio user as server mode
2371+ * loopback multi queues
2372+ * loopback multi paths port restart
2373+ * vhost/virtio pvp multi-paths performance
2374+ * pvp multi-queues and port restart
2375+ * vhost dequeue zero copy
2376+ * pvp share lib
2377+ * pvp vhost user reconnect
2378+ * pvp test with 4k pages
2379+ * pvp test with 2M hugepages
2380+ * pvp virtio bonding
2381+ * pvp test with diff qemu version
2382+ * vhost enqueue interrupt
2383+ * vhost event idx interrupt
2384+ * vhost virtio pmd interrupt
2385+ * vhost virtio user interrupt
2386+ * virtio event idx interrupt
2387+ * virtio user for container networking
2388+ * virtio user as exceptional path
2389+ * vhost xstats
2390+ * virtio-pmd multi-process
2391+ * vm2vm virtio pmd
2392+ * vm2vm virtio-net iperf
2393+ * vm2vm virtio-user
2394+ * vhost user live migration
2395+
2396+19.11.3 Release Notes
2397+---------------------
2398+
2399+19.11.3 Fixes
2400+~~~~~~~~~~~~~
2401+
2402+* app/crypto-perf: fix display of sample test vector
2403+* app/eventdev: check Tx adapter service ID
2404+* app: fix usage help of options separated by dashes
2405+* app/pipeline: fix build with gcc 10
2406+* app: remove extra new line after link duplex
2407+* app/testpmd: add parsing for QinQ VLAN headers
2408+* app/testpmd: fix DCB set
2409+* app/testpmd: fix memory failure handling for i40e DDP
2410+* app/testpmd: fix PPPoE flow command
2411+* app/testpmd: fix statistics after reset
2412+* baseband/turbo_sw: fix exposed LLR decimals assumption
2413+* bbdev: fix doxygen comments
2414+* build: disable gcc 10 zero-length-bounds warning
2415+* build: fix linker warnings with clang on Windows
2416+* build: support MinGW-w64 with Meson
2417+* buildtools: get static mlx dependencies for meson
2418+* bus/fslmc: fix dereferencing null pointer
2419+* bus/fslmc: fix size of qman fq descriptor
2420+* bus/pci: fix devargs on probing again
2421+* bus/pci: fix UIO resource access from secondary process
2422+* bus/vmbus: fix comment spelling
2423+* ci: fix telemetry dependency in Travis
2424+* common/iavf: update copyright
2425+* common/mlx5: fix build with -fno-common
2426+* common/mlx5: fix build with rdma-core 21
2427+* common/mlx5: fix netlink buffer allocation from stack
2428+* common/mlx5: fix umem buffer alignment
2429+* common/octeontx: fix gcc 9.1 ABI break
2430+* common/qat: fix GEN3 marketing name
2431+* contigmem: cleanup properly when load fails
2432+* crypto/caam_jr: fix check of file descriptors
2433+* crypto/caam_jr: fix IRQ functions return type
2434+* crypto/ccp: fix fd leak on probe failure
2435+* cryptodev: add asymmetric session-less feature name
2436+* cryptodev: fix missing device id range checking
2437+* cryptodev: fix SHA-1 digest enum comment
2438+* crypto/kasumi: fix extern declaration
2439+* crypto/nitrox: fix CSR register address generation
2440+* crypto/nitrox: fix oversized device name
2441+* crypto/octeontx2: fix build with gcc 10
2442+* crypto/openssl: fix out-of-place encryption
2443+* crypto/qat: fix cipher descriptor for ZUC and SNOW
2444+* crypto/qat: support plain SHA1..SHA512 hashes
2445+* devtools: fix symbol map change check
2446+* doc: add i40e limitation for flow director
2447+* doc: add NASM installation steps
2448+* doc: fix API index
2449+* doc: fix build issue in ABI guide
2450+* doc: fix build with doxygen 1.8.18
2451+* doc: fix default symbol binding in ABI guide
2452+* doc: fix log level example in Linux guide
2453+* doc: fix LTO config option
2454+* doc: fix matrix CSS for recent sphinx
2455+* doc: fix multicast filter feature announcement
2456+* doc: fix number of failsafe sub-devices
2457+* doc: fix reference in ABI guide
2458+* doc: fix sphinx compatibility
2459+* doc: fix typo in contributors guide
2460+* doc: fix typo in contributors guide
2461+* doc: fix typos in ABI policy
2462+* doc: prefer https when pointing to dpdk.org
2463+* drivers: add crypto as dependency for event drivers
2464+* drivers/crypto: disable gcc 10 no-common errors
2465+* drivers/crypto: fix build with make 4.3
2466+* drivers/crypto: fix log type variables for -fno-common
2467+* drivers: fix log type variables for -fno-common
2468+* eal/arm64: fix precise TSC
2469+* eal: fix C++17 compilation
2470+* eal: fix comments spelling
2471+* eal: fix log message print for regex
2472+* eal: fix PRNG init with HPET enabled
2473+* eal: fix typo in endian conversion macros
2474+* eal/freebsd: fix queuing duplicate alarm callbacks
2475+* eal/ppc: fix bool type after altivec include
2476+* eal/ppc: fix build with gcc 9.3
2477+* eal/x86: ignore gcc 10 stringop-overflow warnings
2478+* ethdev: fix build when vtune profiling is on
2479+* ethdev: fix spelling
2480+* eventdev: fix probe and remove for secondary process
2481+* event/dsw: avoid reusing previously recorded events
2482+* event/dsw: fix enqueue burst return value
2483+* event/dsw: remove redundant control ring poll
2484+* event/dsw: remove unnecessary read barrier
2485+* event/octeontx2: fix build for O1 optimization
2486+* event/octeontx2: fix queue removal from Rx adapter
2487+* examples/eventdev: fix build with gcc 10
2488+* examples/eventdev: fix crash on exit
2489+* examples/fips_validation: fix parsing of algorithms
2490+* examples/ip_pipeline: remove check of null response
2491+* examples/ipsec-gw: fix gcc 10 maybe-uninitialized warning
2492+* examples/kni: fix crash during MTU set
2493+* examples/kni: fix MTU change to setup Tx queue
2494+* examples/l2fwd-keepalive: fix mbuf pool size
2495+* examples/qos_sched: fix build with gcc 10
2496+* examples: remove extra new line after link duplex
2497+* examples/vhost_blk: fix build with gcc 10
2498+* examples/vmdq: fix output of pools/queues
2499+* examples/vmdq: fix RSS configuration
2500+* examples/vm_power: drop Unix path limit redefinition
2501+* examples/vm_power: fix build with -fno-common
2502+* fib: fix headers for C++ support
2503+* fix same typo in multiple places
2504+* fix various typos found by Lintian
2505+* ipsec: check SAD lookup error
2506+* ipsec: fix build dependency on hash lib
2507+* kvargs: fix buffer overflow when parsing list
2508+* kvargs: fix invalid token parsing on FreeBSD
2509+* kvargs: fix strcmp helper documentation
2510+* log: fix level picked with globbing on type register
2511+* lpm6: fix comments spelling
2512+* lpm6: fix size of tbl8 group
2513+* mem: fix overflow on allocation
2514+* mem: mark pages as not accessed when freeing memory
2515+* mem: mark pages as not accessed when reserving VA
2516+* mempool/dpaa2: install missing header with meson
2517+* mempool/octeontx2: fix build for gcc O1 optimization
2518+* mempool: remove inline functions from export list
2519+* mem: preallocate VA space in no-huge mode
2520+* mk: fix static linkage of mlx dependency
2521+* net/avp: fix gcc 10 maybe-uninitialized warning
2522+* net/bnxt: do not use PMD log type
2523+* net/bnxt: fix error log for command timeout
2524+* net/bnxt: fix FW version query
2525+* net/bnxt: fix HWRM command during FW reset
2526+* net/bnxt: fix max ring count
2527+* net/bnxt: fix memory leak during queue restart
2528+* net/bnxt: fix number of TQM ring
2529+* net/bnxt: fix port start failure handling
2530+* net/bnxt: fix possible stack smashing
2531+* net/bnxt: fix Rx ring producer index
2532+* net/bnxt: fix storing MAC address twice
2533+* net/bnxt: fix TQM ring context memory size
2534+* net/bnxt: fix using RSS config struct
2535+* net/bnxt: fix VLAN add when port is stopped
2536+* net/bnxt: fix VNIC Rx queue count on VNIC free
2537+* net/bnxt: use true/false for bool types
2538+* net/dpaa2: fix 10G port negotiation
2539+* net/dpaa2: fix congestion ID for multiple traffic classes
2540+* net/dpaa: use dynamic log type
2541+* net/e1000: fix port hotplug for multi-process
2542+* net/ena/base: fix documentation of functions
2543+* net/ena/base: fix indentation in CQ polling
2544+* net/ena/base: fix indentation of multiple defines
2545+* net/ena/base: fix testing for supported hash function
2546+* net/ena/base: make allocation macros thread-safe
2547+* net/ena/base: prevent allocation of zero sized memory
2548+* net/ena: fix build for O1 optimization
2549+* net/ena: set IO ring size to valid value
2550+* net/enetc: fix Rx lock-up
2551+* net/enic: fix flow action reordering
2552+* net/failsafe: fix fd leak
2553+* net/hinic: allocate IO memory with socket id
2554+* net/hinic/base: fix PF firmware hot-active problem
2555+* net/hinic/base: fix port start during FW hot update
2556+* net/hinic: fix LRO
2557+* net/hinic: fix queues resource free
2558+* net/hinic: fix repeating cable log and length check
2559+* net/hinic: fix snprintf length of cable info
2560+* net/hinic: fix TSO
2561+* net/hinic: fix Tx mbuf length while copying
2562+* net/hns3: add free threshold in Rx
2563+* net/hns3: add RSS hash offload to capabilities
2564+* net/hns3: clear residual flow rules on init
2565+* net/hns3: fix configuring illegal VLAN PVID
2566+* net/hns3: fix configuring RSS hash when rules are flushed
2567+* net/hns3: fix crash when flushing RSS flow rules with FLR
2568+* net/hns3: fix default error code of command interface
2569+* net/hns3: fix default VLAN filter configuration for PF
2570+* net/hns3: fix mailbox opcode data type
2571+* net/hns3: fix MSI-X interrupt during initialization
2572+* net/hns3: fix packets offload features flags in Rx
2573+* net/hns3: fix promiscuous mode for PF
2574+* net/hns3: fix return value of setting VLAN offload
2575+* net/hns3: fix return value when clearing statistics
2576+* net/hns3: fix RSS indirection table configuration
2577+* net/hns3: fix RSS key length
2578+* net/hns3: fix Rx interrupt after reset
2579+* net/hns3: fix status after repeated resets
2580+* net/hns3: fix Tx interrupt when enabling Rx interrupt
2581+* net/hns3: fix VLAN filter when setting promisucous mode
2582+* net/hns3: fix VLAN PVID when configuring device
2583+* net/hns3: reduce judgements of free Tx ring space
2584+* net/hns3: remove one IO barrier in Rx
2585+* net/hns3: remove unnecessary assignments in Tx
2586+* net/hns3: replace memory barrier with data dependency order
2587+* net/hns3: support different numbers of Rx and Tx queues
2588+* net/hns3: support Rx interrupt
2589+* net/i40e/base: update copyright
2590+* net/i40e: fix flow director enabling
2591+* net/i40e: fix flow director for ARP packets
2592+* net/i40e: fix flow director initialisation
2593+* net/i40e: fix flush of flow director filter
2594+* net/i40e: fix queue region in RSS flow
2595+* net/i40e: fix queue related exception handling
2596+* net/i40e: fix setting L2TAG
2597+* net/i40e: fix wild pointer
2598+* net/i40e: fix X722 performance
2599+* net/i40e: relax barrier in Tx
2600+* net/i40e: relax barrier in Tx for NEON
2601+* net/iavf: fix link speed
2602+* net/iavf: fix setting L2TAG
2603+* net/iavf: fix stats query error code
2604+* net/ice: add action number check for switch
2605+* net/ice/base: check memory pointer before copying
2606+* net/ice/base: fix binary order for GTPU filter
2607+* net/ice/base: fix MAC write command
2608+* net/ice/base: fix uninitialized stack variables
2609+* net/ice/base: minor fixes
2610+* net/ice/base: read PSM clock frequency from register
2611+* net/ice/base: remove unused code in switch rule
2612+* net/ice/base: update copyright
2613+* net/ice: change default tunnel type
2614+* net/ice: fix crash in switch filter
2615+* net/ice: fix hash flow crash
2616+* net/ice: fix input set of VLAN item
2617+* net/ice: fix RSS advanced rule
2618+* net/ice: fix RSS for GTPU
2619+* net/ice: fix setting L2TAG
2620+* net/ice: fix variable initialization
2621+* net/ice: remove bulk alloc option
2622+* net/ice: remove unnecessary variable
2623+* net/ice: support mark only action for flow director
2624+* net/ipn3ke: use control thread to check link status
2625+* net/ixgbe/base: update copyright
2626+* net/ixgbe: check driver type in MACsec API
2627+* net/ixgbe: fix link state timing on fiber ports
2628+* net/ixgbe: fix link status after port reset
2629+* net/ixgbe: fix link status inconsistencies
2630+* net/ixgbe: fix link status synchronization on BSD
2631+* net/ixgbe: fix resource leak after thread exits normally
2632+* net/ixgbe: fix statistics in flow control mode
2633+* net/memif: fix init when already connected
2634+* net/memif: fix resource leak
2635+* net/mlx4: fix build with -fno-common
2636+* net/mlx4: fix drop queue error handling
2637+* net/mlx5: add device parameter for MPRQ stride size
2638+* net/mlx5: add multi-segment packets in MPRQ mode
2639+* net/mlx5: enable MPRQ multi-stride operations
2640+* net/mlx5: fix actions validation on root table
2641+* net/mlx5: fix assert in doorbell lookup
2642+* net/mlx5: fix assert in dynamic metadata handling
2643+* net/mlx5: fix assert in modify converting
2644+* net/mlx5: fix build with separate glue lib for dlopen
2645+* net/mlx5: fix call to modify action without init item
2646+* net/mlx5: fix counter container usage
2647+* net/mlx5: fix crash when releasing meter table
2648+* net/mlx5: fix CVLAN tag set in IP item translation
2649+* net/mlx5: fix doorbell bitmap management offsets
2650+* net/mlx5: fix gcc 10 enum-conversion warning
2651+* net/mlx5: fix header modify action validation
2652+* net/mlx5: fix imissed counter overflow
2653+* net/mlx5: fix jump table leak
2654+* net/mlx5: fix mask used for IPv6 item validation
2655+* net/mlx5: fix matching for UDP tunnels with Verbs
2656+* net/mlx5: fix match on empty VLAN item in DV mode
2657+* net/mlx5: fix metadata for compressed Rx CQEs
2658+* net/mlx5: fix meter color register consideration
2659+* net/mlx5: fix meter suffix table leak
2660+* net/mlx5: fix packet length assert in MPRQ
2661+* net/mlx5: fix push VLAN action to use item info
2662+* net/mlx5: fix RSS enablement
2663+* net/mlx5: fix RSS key copy to TIR context
2664+* net/mlx5: fix Tx queue release debug log timing
2665+* net/mlx5: fix validation of push VLAN without full mask
2666+* net/mlx5: fix validation of VXLAN/VXLAN-GPE specs
2667+* net/mlx5: fix VLAN flow action with wildcard VLAN item
2668+* net/mlx5: fix VLAN ID check
2669+* net/mlx5: fix VLAN PCP item calculation
2670+* net/mlx5: fix zero metadata action
2671+* net/mlx5: fix zero value validation for metadata
2672+* net/mlx5: improve logging of MPRQ selection
2673+* net/mlx5: reduce Tx completion index memory loads
2674+* net/mlx5: set dynamic flow metadata in Rx queues
2675+* net/mlx5: update VLAN and encap actions validation
2676+* net/mlx5: use open/read/close for ib stats query
2677+* net/mvneta: do not use PMD log type
2678+* net/mvpp2: fix build with gcc 10
2679+* net/netvsc: avoid possible live lock
2680+* net/netvsc: do not configure RSS if disabled
2681+* net/netvsc: do RSS across Rx queue only
2682+* net/netvsc: fix comment spelling
2683+* net/netvsc: fix memory free on device close
2684+* net/netvsc: handle Rx packets during multi-channel setup
2685+* net/netvsc: handle Tx completions based on burst size
2686+* net/netvsc: propagate descriptor limits from VF
2687+* net/netvsc: remove process event optimization
2688+* net/netvsc: split send buffers from Tx descriptors
2689+* net/nfp: fix dangling pointer on probe failure
2690+* net/nfp: fix log format specifiers
2691+* net/null: fix secondary burst function selection
2692+* net/null: remove redundant check
2693+* net/octeontx2: disable unnecessary error interrupts
2694+* net/octeontx2: enable error and RAS interrupt in configure
2695+* net/octeontx2: fix buffer size assignment
2696+* net/octeontx2: fix device configuration sequence
2697+* net/octeontx2: fix link information for loopback port
2698+* net/octeontx: fix dangling pointer on init failure
2699+* net/octeontx: fix meson build for disabled drivers
2700+* net/pfe: do not use PMD log type
2701+* net/pfe: fix double free of MAC address
2702+* net/qede: fix link state configuration
2703+* net/qede: fix port reconfiguration
2704+* net/ring: fix device pointer on allocation
2705+* net/sfc/base: fix build when EVB is enabled
2706+* net/sfc/base: fix manual filter delete in EF10
2707+* net/sfc/base: handle manual and auto filter clashes in EF10
2708+* net/sfc/base: reduce filter priorities to implemented only
2709+* net/sfc/base: refactor filter lookup loop in EF10
2710+* net/sfc/base: reject automatic filter creation by users
2711+* net/sfc/base: use simpler EF10 family conditional check
2712+* net/sfc/base: use simpler EF10 family run-time checks
2713+* net/sfc: fix initialization error path
2714+* net/sfc: fix promiscuous and allmulticast toggles errors
2715+* net/sfc: fix reported promiscuous/multicast mode
2716+* net/sfc: fix Rx queue start failure path
2717+* net/sfc: set priority of created filters to manual
2718+* net/softnic: fix memory leak for thread
2719+* net/softnic: fix resource leak for pipeline
2720+* net/tap: do not use PMD log type
2721+* net/tap: fix check for mbuf number of segment
2722+* net/tap: fix crash in flow destroy
2723+* net/tap: fix fd leak on creation failure
2724+* net/tap: fix file close on remove
2725+* net/tap: fix mbuf and mem leak during queue release
2726+* net/tap: fix mbuf double free when writev fails
2727+* net/tap: fix queues fd check before close
2728+* net/tap: fix unexpected link handler
2729+* net/tap: remove unused assert
2730+* net/thunderx: use dynamic log type
2731+* net/vhost: fix potential memory leak on close
2732+* net/virtio: do not use PMD log type
2733+* net/virtio: fix crash when device reconnecting
2734+* net/virtio: fix outdated comment
2735+* net/virtio: fix unexpected event after reconnect
2736+* net/virtio-user: fix devargs parsing
2737+* net/vmxnet3: fix RSS setting on v4
2738+* net/vmxnet3: handle bad host framing
2739+* pci: accept 32-bit domain numbers
2740+* pci: fix build on FreeBSD
2741+* pci: fix build on ppc
2742+* pci: reject negative values in PCI id
2743+* pci: remove unneeded includes in public header file
2744+* remove references to private PCI probe function
2745+* Revert "common/qat: fix GEN3 marketing name"
2746+* Revert "net/bnxt: fix number of TQM ring"
2747+* Revert "net/bnxt: fix TQM ring context memory size"
2748+* security: fix crash at accessing non-implemented ops
2749+* security: fix return types in documentation
2750+* security: fix session counter
2751+* security: fix verification of parameters
2752+* service: fix crash on exit
2753+* service: fix identification of service running on other lcore
2754+* service: fix race condition for MT unsafe service
2755+* service: remove rte prefix from static functions
2756+* telemetry: fix port stats retrieval
2757+* test/crypto: fix flag check
2758+* test/crypto: fix statistics case
2759+* test: fix build with gcc 10
2760+* test/flow_classify: enable multi-sockets system
2761+* test/ipsec: fix crash in session destroy
2762+* test/kvargs: fix invalid cases check
2763+* test/kvargs: fix to consider empty elements as valid
2764+* test: load drivers when required
2765+* test: remove redundant macro
2766+* test: skip some subtests in no-huge mode
2767+* timer: protect initialization with lock
2768+* usertools: check for pci.ids in /usr/share/misc
2769+* vfio: fix race condition with sysfs
2770+* vfio: fix use after free with multiprocess
2771+* vhost/crypto: add missing user protocol flag
2772+* vhost: fix packed ring zero-copy
2773+* vhost: fix peer close check
2774+* vhost: fix shadowed descriptors not flushed
2775+* vhost: fix shadow update
2776+* vhost: fix zero-copy server mode
2777+* vhost: handle mbuf allocation failure
2778+* vhost: make IOTLB cache name unique among processes
2779+* vhost: prevent zero-copy with incompatible client mode
2780+* vhost: remove unused variable
2781+
2782+19.11.3 Validation
2783+~~~~~~~~~~~~~~~~~~
2784+
2785+* Intel(R) Testing
2786+
2787+ * Basic Intel(R) NIC(ixgbe, i40e and ice) testing
2788+ * PF (i40e)
2789+ * PF (ixgbe)
2790+ * PF (ice)
2791+ * VF (i40e)
2792+ * VF (ixgbe)
2793+ * VF (ice)
2794+ * Compile Testing
2795+ * Intel NIC single core/NIC performance
2796+
2797+ * Basic cryptodev and virtio testing
2798+
2799+ * vhost/virtio basic loopback, PVP and performance test
2800+ * cryptodev Function/Performance
2801+
2802+* Mellanox(R) Testing
2803+
2804+ * Basic functionality with testpmd
2805+
2806+ * Tx/Rx
2807+ * xstats
2808+ * Timestamps
2809+ * Link status
2810+ * RTE flow and flow_director
2811+ * RSS
2812+ * VLAN stripping and insertion
2813+ * Checksum/TSO
2814+ * ptype
2815+ * l3fwd-power example application
2816+ * Multi-process example applications
2817+
2818+ * ConnectX-5
2819+
2820+ * RHEL 7.4
2821+ * Driver MLNX_OFED_LINUX-5.0-2.1.8.0
2822+ * fw 16.27.2008
2823+
2824+ * ConnectX-4 Lx
2825+
2826+ * RHEL 7.4
2827+ * Driver MLNX_OFED_LINUX-5.0-2.1.8.0
2828+ * fw 14.27.1016
2829+
2830+* Red Hat(R) Testing
2831+
2832+ * Platform
2833+
2834+ * RHEL 8
2835+ * Kernel 4.18
2836+ * Qemu 4.2
2837+ * X540-AT2 NIC(ixgbe, 10G)
2838+
2839+ * Functionality
2840+
2841+ * Guest with device assignment(PF) throughput testing(1G hugepage size)
2842+ * Guest with device assignment(PF) throughput testing(2M hugepage size)
2843+ * Guest with device assignment(VF) throughput testing
2844+ * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing
2845+ * PVP vhost-user 2Q throughput testing
2846+ * PVP vhost-user 1Q - cross numa node throughput testing
2847+ * Guest with vhost-user 2 queues throughput testing
2848+ * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect
2849+ * PVP 1Q live migration testing
2850+ * PVP 1Q cross numa node live migration testing
2851+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing
2852+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M)
2853+ * Guest with ovs+dpdk+vhost-user 2Q live migration testing
2854+ * Allocate memory from the NUMA node which Virtio device locates
2855+
2856+
2857+* Intel(R) Testing with Open vSwitch
2858+
2859+ * OVS testing with OVS branches master and 2.13 with VSPERF
2860+
2861+ * Tested NICs
2862+
2863+ * i40e (X710)
2864+ * ixgbe (82599ES)
2865+ * ice
2866+ * vhost
2867+
2868+ * Functionality
2869+
2870+ * P2P
2871+ * PVP
2872+ * PVPV
2873+ * PVVP
2874+ * Multiqueue RSS
2875+ * Vhost reconnect
2876+ * Jumbo frames 1500, 6000, 9702
2877+
2878+
2879+* Microsoft(R) Testing
2880+
2881+ * Platform
2882+
2883+ * Azure
2884+ * Ubuntu 16.04-LTS
2885+ * Ubuntu 18.04-DAILY-LTS
2886+ * RHEL 7-RAW
2887+ * RHEL 7.5
2888+ * CentOS 7.5
2889+ * SLES-15-sp1 gen1
2890+ * Mellanox(R) ConnectX-4
2891+ * LISAv2 test framework
2892+
2893+ * Functionality
2894+
2895+ * VERIFY-DPDK-COMPLIANCE - verifies kernel is supported and that the build is successful
2896+ * VERIFY-DPDK-BUILD-AND-TESTPMD-TEST - verifies using testpmd that packets can be sent from a VM to another VM
2897+ * VERIFY-SRIOV-FAILSAFE-FOR-DPDK - disables/enables Accelerated Networking for the NICs under test and makes sure DPDK works in both scenarios
2898+ * VERIFY-DPDK-FAILSAFE-DURING-TRAFFIC - disables/enables Accelerated Networking for the NICs while generating traffic using testpmd
2899+ * PERF-DPDK-FWD-PPS-DS15 - verifies DPDK forwarding performance using testpmd on 2, 4, 8 cores, rx and io mode on size Standard_DS15_v2
2900+ * PERF-DPDK-SINGLE-CORE-PPS-DS4 - verifies DPDK performance using testpmd on 1 core, rx and io mode on size Standard_DS4_v2
2901+ * PERF-DPDK-SINGLE-CORE-PPS-DS15 - verifies DPDK performance using testpmd on 1 core, rx and io mode on size Standard_DS15_v2
2902+ * PERF-DPDK-MULTICORE-PPS-DS15 - verifies DPDK performance using testpmd on 2, 4, 8 cores, rx and io mode on size Standard_DS15_v2
2903+ * PERF-DPDK-MULTICORE-PPS-F32 - verifies DPDK performance using testpmd on 2, 4, 8, 16 cores, rx and io mode on size Standard_F32s_v2
2904+ * DPDK-RING-LATENCY - verifies DPDK CPU latency using dpdk-ring-ping
2905+ * VERIFY-DPDK-PRIMARY-SECONDARY-PROCESSES - verifies primary / secondary processes support for DPDK. Runs only on RHEL and Ubuntu distros with Linux kernel >= 4.20
2906+ * VERIFY-DPDK-OVS - builds OVS with DPDK support and tests if the OVS DPDK ports can be created. Runs only on Ubuntu distro.
2907diff --git a/doc/guides/sample_app_ug/l2_forward_event.rst b/doc/guides/sample_app_ug/l2_forward_event.rst
2908index 8c519c3..c5fad93 100644
2909--- a/doc/guides/sample_app_ug/l2_forward_event.rst
2910+++ b/doc/guides/sample_app_ug/l2_forward_event.rst
2911@@ -202,9 +202,6 @@ chapters that related to the Poll Mode and Event mode Driver in the
2912
2913 .. code-block:: c
2914
2915- if (rte_pci_probe() < 0)
2916- rte_panic("Cannot probe PCI\n");
2917-
2918 /* reset l2fwd_dst_ports */
2919
2920 for (portid = 0; portid < RTE_MAX_ETHPORTS; portid++)
2921@@ -234,11 +231,6 @@ chapters that related to the Poll Mode and Event mode Driver in the
2922 rte_eth_dev_info_get((uint8_t) portid, &dev_info);
2923 }
2924
2925-Observe that:
2926-
2927-* rte_pci_probe() parses the devices on the PCI bus and initializes recognized
2928- devices.
2929-
2930 The next step is to configure the RX and TX queues. For each port, there is only
2931 one RX queue (only one lcore is able to poll a given port). The number of TX
2932 queues depends on the number of available lcores. The rte_eth_dev_configure()
2933diff --git a/doc/guides/sample_app_ug/l2_forward_real_virtual.rst b/doc/guides/sample_app_ug/l2_forward_real_virtual.rst
2934index 39d6b00..671d0c7 100644
2935--- a/doc/guides/sample_app_ug/l2_forward_real_virtual.rst
2936+++ b/doc/guides/sample_app_ug/l2_forward_real_virtual.rst
2937@@ -194,9 +194,6 @@ in the *DPDK Programmer's Guide* - Rel 1.4 EAR and the *DPDK API Reference*.
2938
2939 .. code-block:: c
2940
2941- if (rte_pci_probe() < 0)
2942- rte_exit(EXIT_FAILURE, "Cannot probe PCI\n");
2943-
2944 /* reset l2fwd_dst_ports */
2945
2946 for (portid = 0; portid < RTE_MAX_ETHPORTS; portid++)
2947@@ -226,12 +223,6 @@ in the *DPDK Programmer's Guide* - Rel 1.4 EAR and the *DPDK API Reference*.
2948 rte_eth_dev_info_get((uint8_t) portid, &dev_info);
2949 }
2950
2951-Observe that:
2952-
2953-* rte_igb_pmd_init_all() simultaneously registers the driver as a PCI driver and as an Ethernet* Poll Mode Driver.
2954-
2955-* rte_pci_probe() parses the devices on the PCI bus and initializes recognized devices.
2956-
2957 The next step is to configure the RX and TX queues.
2958 For each port, there is only one RX queue (only one lcore is able to poll a given port).
2959 The number of TX queues depends on the number of available lcores.
2960diff --git a/doc/guides/sample_app_ug/link_status_intr.rst b/doc/guides/sample_app_ug/link_status_intr.rst
2961index 5283be8..04c40f2 100644
2962--- a/doc/guides/sample_app_ug/link_status_intr.rst
2963+++ b/doc/guides/sample_app_ug/link_status_intr.rst
2964@@ -88,9 +88,6 @@ To fully understand this code, it is recommended to study the chapters that rela
2965
2966 .. code-block:: c
2967
2968- if (rte_pci_probe() < 0)
2969- rte_exit(EXIT_FAILURE, "Cannot probe PCI\n");
2970-
2971 /*
2972 * Each logical core is assigned a dedicated TX queue on each port.
2973 */
2974@@ -115,10 +112,6 @@ To fully understand this code, it is recommended to study the chapters that rela
2975 rte_eth_dev_info_get((uint8_t) portid, &dev_info);
2976 }
2977
2978-Observe that:
2979-
2980-* rte_pci_probe() parses the devices on the PCI bus and initializes recognized devices.
2981-
2982 The next step is to configure the RX and TX queues.
2983 For each port, there is only one RX queue (only one lcore is able to poll a given port).
2984 The number of TX queues depends on the number of available lcores.
2985diff --git a/doc/guides/sample_app_ug/multi_process.rst b/doc/guides/sample_app_ug/multi_process.rst
2986index 9c374da..f2a79a6 100644
2987--- a/doc/guides/sample_app_ug/multi_process.rst
2988+++ b/doc/guides/sample_app_ug/multi_process.rst
2989@@ -209,7 +209,7 @@ How the Application Works
2990 ^^^^^^^^^^^^^^^^^^^^^^^^^
2991
2992 The initialization calls in both the primary and secondary instances are the same for the most part,
2993-calling the rte_eal_init(), 1 G and 10 G driver initialization and then rte_pci_probe() functions.
2994+calling the rte_eal_init(), 1 G and 10 G driver initialization and then probing devices.
2995 Thereafter, the initialization done depends on whether the process is configured as a primary or secondary instance.
2996
2997 In the primary instance, a memory pool is created for the packet mbufs and the network ports to be used are initialized -
2998diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
2999index 73ef0b4..78bdf60 100644
3000--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
3001+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
3002@@ -237,7 +237,7 @@ Display the RSS hash functions and RSS hash key of a port::
3003 clear port
3004 ~~~~~~~~~~
3005
3006-Clear the port statistics for a given port or for all ports::
3007+Clear the port statistics and forward engine statistics for a given port or for all ports::
3008
3009 testpmd> clear port (info|stats|xstats|fdir|stat_qmap) (port_id|all)
3010
3011diff --git a/doc/guides/windows_gsg/build_dpdk.rst b/doc/guides/windows_gsg/build_dpdk.rst
3012index 6711e07..a0e51df 100644
3013--- a/doc/guides/windows_gsg/build_dpdk.rst
3014+++ b/doc/guides/windows_gsg/build_dpdk.rst
3015@@ -7,15 +7,22 @@ Compiling the DPDK Target from Source
3016 System Requirements
3017 -------------------
3018
3019-The DPDK and its applications require the Clang-LLVM C compiler
3020-and Microsoft MSVC linker.
3021+Building the DPDK and its applications requires one of the following
3022+environments:
3023+
3024+* The Clang-LLVM C compiler and Microsoft MSVC linker.
3025+* The MinGW-w64 toolchain (either native or cross).
3026+
3027 The Meson Build system is used to prepare the sources for compilation
3028 with the Ninja backend.
3029 The installation of these tools is covered in this section.
3030
3031
3032+Option 1. Clang-LLVM C Compiler and Microsoft MSVC Linker
3033+---------------------------------------------------------
3034+
3035 Install the Compiler
3036---------------------
3037+~~~~~~~~~~~~~~~~~~~~
3038
3039 Download and install the clang compiler from
3040 `LLVM website <http://releases.llvm.org/download.html>`_.
3041@@ -25,7 +32,7 @@ For example, Clang-LLVM direct download link::
3042
3043
3044 Install the Linker
3045-------------------
3046+~~~~~~~~~~~~~~~~~~
3047
3048 Download and install the Build Tools for Visual Studio to link and build the
3049 files on windows,
3050@@ -34,6 +41,18 @@ When installing build tools, select the "Visual C++ build tools" option
3051 and ensure the Windows SDK is selected.
3052
3053
3054+Option 2. MinGW-w64 Toolchain
3055+-----------------------------
3056+
3057+Obtain the latest version from
3058+`MinGW-w64 website <http://mingw-w64.org/doku.php/download>`_.
3059+On Windows, install to a folder without spaces in its name, like ``C:\MinGW``.
3060+This path is assumed for the rest of this guide.
3061+
3062+Version 4.0.4 for Ubuntu 16.04 cannot be used due to a
3063+`MinGW-w64 bug <https://sourceforge.net/p/mingw-w64/bugs/562/>`_.
3064+
3065+
3066 Install the Build System
3067 ------------------------
3068
3069@@ -43,6 +62,8 @@ A good option to choose is the MSI installer for both meson and ninja together::
3070
3071 http://mesonbuild.com/Getting-meson.html#installing-meson-and-ninja-with-the-msi-installer%22
3072
3073+Recommended version is either Meson 0.47.1 (baseline) or the latest release.
3074+
3075 Install the Backend
3076 -------------------
3077
3078@@ -56,23 +77,30 @@ Build the code
3079 The build environment is setup to build the EAL and the helloworld example by
3080 default.
3081
3082-Using the ninja backend
3083-~~~~~~~~~~~~~~~~~~~~~~~~
3084+Option 1. Native Build on Windows
3085+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3086
3087-Specifying the compiler might be required to complete the meson command.
3088+When using Clang-LLVM, specifying the compiler might be required to complete
3089+the meson command:
3090
3091 .. code-block:: console
3092
3093 set CC=clang
3094
3095+When using MinGW-w64, it is sufficient to have toolchain executables in PATH:
3096+
3097+.. code-block:: console
3098+
3099+ set PATH=C:\MinGW\mingw64\bin;%PATH%
3100+
3101 To compile the examples, the flag ``-Dexamples`` is required.
3102
3103 .. code-block:: console
3104
3105 cd C:\Users\me\dpdk
3106 meson -Dexamples=helloworld build
3107- cd build
3108- ninja
3109+ ninja -C build
3110+
3111
3112 Run the helloworld example
3113 ==========================
3114@@ -87,3 +115,8 @@ Navigate to the examples in the build directory and run `dpdk-helloworld.exe`.
3115 hello from core 3
3116 hello from core 0
3117 hello from core 2
3118+
3119+Note for MinGW-w64: applications are linked to ``libwinpthread-1.dll``
3120+by default. To run the example, either add toolchain executables directory
3121+to the PATH or copy the library to the working directory.
3122+Alternatively, static linking may be used (mind the LGPLv2.1 license).
3123diff --git a/drivers/Makefile b/drivers/Makefile
3124index 7d5da5d..cfc24b2 100644
3125--- a/drivers/Makefile
3126+++ b/drivers/Makefile
3127@@ -19,7 +19,7 @@ DEPDIRS-common/qat := bus mempool
3128 DIRS-$(CONFIG_RTE_LIBRTE_COMPRESSDEV) += compress
3129 DEPDIRS-compress := bus mempool
3130 DIRS-$(CONFIG_RTE_LIBRTE_EVENTDEV) += event
3131-DEPDIRS-event := common bus mempool net
3132+DEPDIRS-event := common bus mempool net crypto
3133 DIRS-$(CONFIG_RTE_LIBRTE_RAWDEV) += raw
3134 DEPDIRS-raw := common bus mempool net event
3135
3136diff --git a/drivers/baseband/turbo_sw/bbdev_turbo_software.c b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
3137index f2fe7a2..e6d9501 100644
3138--- a/drivers/baseband/turbo_sw/bbdev_turbo_software.c
3139+++ b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
3140@@ -218,7 +218,7 @@ info_get(struct rte_bbdev *dev, struct rte_bbdev_driver_info *dev_info)
3141 RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE |
3142 RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE,
3143 .llr_size = 8,
3144- .llr_decimals = 2,
3145+ .llr_decimals = 4,
3146 .harq_memory_size = 0,
3147 .num_buffers_src =
3148 RTE_BBDEV_LDPC_MAX_CODE_BLOCKS,
3149diff --git a/drivers/bus/fslmc/qbman/qbman_debug.c b/drivers/bus/fslmc/qbman/qbman_debug.c
3150index 0bb2ce8..34374ae 100644
3151--- a/drivers/bus/fslmc/qbman/qbman_debug.c
3152+++ b/drivers/bus/fslmc/qbman/qbman_debug.c
3153@@ -20,26 +20,27 @@ struct qbman_fq_query_desc {
3154 uint8_t verb;
3155 uint8_t reserved[3];
3156 uint32_t fqid;
3157- uint8_t reserved2[57];
3158+ uint8_t reserved2[56];
3159 };
3160
3161 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
3162 struct qbman_fq_query_np_rslt *r)
3163 {
3164 struct qbman_fq_query_desc *p;
3165+ struct qbman_fq_query_np_rslt *var;
3166
3167 p = (struct qbman_fq_query_desc *)qbman_swp_mc_start(s);
3168 if (!p)
3169 return -EBUSY;
3170
3171 p->fqid = fqid;
3172- *r = *(struct qbman_fq_query_np_rslt *)qbman_swp_mc_complete(s, p,
3173- QBMAN_FQ_QUERY_NP);
3174- if (!r) {
3175+ var = qbman_swp_mc_complete(s, p, QBMAN_FQ_QUERY_NP);
3176+ if (!var) {
3177 pr_err("qbman: Query FQID %d NP fields failed, no response\n",
3178 fqid);
3179 return -EIO;
3180 }
3181+ *r = *var;
3182
3183 /* Decode the outcome */
3184 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_FQ_QUERY_NP);
3185diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
3186index dfd6b1f..addbc3e 100644
3187--- a/drivers/bus/ifpga/ifpga_bus.c
3188+++ b/drivers/bus/ifpga/ifpga_bus.c
3189@@ -24,6 +24,7 @@
3190 #include <rte_kvargs.h>
3191 #include <rte_alarm.h>
3192 #include <rte_string_fns.h>
3193+#include <rte_debug.h>
3194
3195 #include "rte_rawdev.h"
3196 #include "rte_rawdev_pmd.h"
3197diff --git a/drivers/bus/ifpga/rte_bus_ifpga.h b/drivers/bus/ifpga/rte_bus_ifpga.h
3198index 88a6289..a6eeaaf 100644
3199--- a/drivers/bus/ifpga/rte_bus_ifpga.h
3200+++ b/drivers/bus/ifpga/rte_bus_ifpga.h
3201@@ -17,6 +17,7 @@ extern "C" {
3202
3203 #include <rte_bus.h>
3204 #include <rte_pci.h>
3205+#include <rte_interrupts.h>
3206 #include <rte_spinlock.h>
3207
3208 /** Name of Intel FPGA Bus */
3209diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
3210index 740a2cd..71b0a30 100644
3211--- a/drivers/bus/pci/linux/pci.c
3212+++ b/drivers/bus/pci/linux/pci.c
3213@@ -377,6 +377,11 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr)
3214 */
3215 RTE_LOG(ERR, EAL, "Unexpected device scan at %s!\n",
3216 filename);
3217+ else if (dev2->device.devargs !=
3218+ dev->device.devargs) {
3219+ rte_devargs_remove(dev2->device.devargs);
3220+ pci_name_set(dev2);
3221+ }
3222 }
3223 free(dev);
3224 }
3225diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
3226index 3f55420..ab73c00 100644
3227--- a/drivers/bus/pci/pci_common.c
3228+++ b/drivers/bus/pci/pci_common.c
3229@@ -288,8 +288,8 @@ pci_probe_all_drivers(struct rte_pci_device *dev)
3230 * all registered drivers that have a matching entry in its id_table
3231 * for discovered devices.
3232 */
3233-int
3234-rte_pci_probe(void)
3235+static int
3236+pci_probe(void)
3237 {
3238 struct rte_pci_device *dev = NULL;
3239 size_t probed = 0, failed = 0;
3240@@ -675,7 +675,7 @@ rte_pci_get_iommu_class(void)
3241 struct rte_pci_bus rte_pci_bus = {
3242 .bus = {
3243 .scan = rte_pci_scan,
3244- .probe = rte_pci_probe,
3245+ .probe = pci_probe,
3246 .find_device = pci_find_device,
3247 .plug = pci_plug,
3248 .unplug = pci_unplug,
3249diff --git a/drivers/bus/pci/pci_common_uio.c b/drivers/bus/pci/pci_common_uio.c
3250index 7ea73db..f4dca9d 100644
3251--- a/drivers/bus/pci/pci_common_uio.c
3252+++ b/drivers/bus/pci/pci_common_uio.c
3253@@ -70,6 +70,7 @@ pci_uio_map_secondary(struct rte_pci_device *dev)
3254 }
3255 return -1;
3256 }
3257+ dev->mem_resource[i].addr = mapaddr;
3258 }
3259 return 0;
3260 }
3261diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h
3262index a205d4d..af1c7ae 100644
3263--- a/drivers/bus/pci/private.h
3264+++ b/drivers/bus/pci/private.h
3265@@ -18,16 +18,6 @@ struct rte_pci_device;
3266 extern struct rte_pci_bus rte_pci_bus;
3267
3268 /**
3269- * Probe the PCI bus
3270- *
3271- * @return
3272- * - 0 on success.
3273- * - !0 on error.
3274- */
3275-int
3276-rte_pci_probe(void);
3277-
3278-/**
3279 * Scan the content of the PCI bus, and the devices in the devices
3280 * list
3281 *
3282diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c
3283index 10e50c9..5451bfd 100644
3284--- a/drivers/bus/vmbus/linux/vmbus_uio.c
3285+++ b/drivers/bus/vmbus/linux/vmbus_uio.c
3286@@ -165,7 +165,7 @@ vmbus_uio_map_resource_by_index(struct rte_vmbus_device *dev, int idx,
3287 dev->resource[idx].addr = mapaddr;
3288 vmbus_map_addr = RTE_PTR_ADD(mapaddr, size);
3289
3290- /* Record result of sucessful mapping for use by secondary */
3291+ /* Record result of successful mapping for use by secondary */
3292 maps[idx].addr = mapaddr;
3293 maps[idx].size = size;
3294
3295diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c
3296index 48a219f..3adef01 100644
3297--- a/drivers/bus/vmbus/vmbus_common.c
3298+++ b/drivers/bus/vmbus/vmbus_common.c
3299@@ -131,7 +131,7 @@ vmbus_probe_one_driver(struct rte_vmbus_driver *dr,
3300 }
3301
3302 /*
3303- * IF device class GUID mathces, call the probe function of
3304+ * If device class GUID matches, call the probe function of
3305 * registere drivers for the vmbus device.
3306 * Return -1 if initialization failed,
3307 * and 1 if no driver found for this device.
3308diff --git a/drivers/common/octeontx/octeontx_mbox.c b/drivers/common/octeontx/octeontx_mbox.c
3309index 2fd2531..effe0b2 100644
3310--- a/drivers/common/octeontx/octeontx_mbox.c
3311+++ b/drivers/common/octeontx/octeontx_mbox.c
3312@@ -279,7 +279,7 @@ octeontx_start_domain(void)
3313 }
3314
3315 static int
3316-octeontx_check_mbox_version(struct mbox_intf_ver app_intf_ver,
3317+octeontx_check_mbox_version(struct mbox_intf_ver *app_intf_ver,
3318 struct mbox_intf_ver *intf_ver)
3319 {
3320 struct mbox_intf_ver kernel_intf_ver = {0};
3321@@ -290,8 +290,9 @@ octeontx_check_mbox_version(struct mbox_intf_ver app_intf_ver,
3322 hdr.coproc = NO_COPROC;
3323 hdr.msg = RM_INTERFACE_VERSION;
3324
3325- result = octeontx_mbox_send(&hdr, &app_intf_ver, sizeof(app_intf_ver),
3326- &kernel_intf_ver, sizeof(kernel_intf_ver));
3327+ result = octeontx_mbox_send(&hdr, app_intf_ver,
3328+ sizeof(struct mbox_intf_ver),
3329+ &kernel_intf_ver, sizeof(kernel_intf_ver));
3330 if (result != sizeof(kernel_intf_ver)) {
3331 mbox_log_err("Could not send interface version. Err=%d. FuncErr=%d\n",
3332 result, hdr.res_code);
3333@@ -301,9 +302,9 @@ octeontx_check_mbox_version(struct mbox_intf_ver app_intf_ver,
3334 if (intf_ver)
3335 *intf_ver = kernel_intf_ver;
3336
3337- if (app_intf_ver.platform != kernel_intf_ver.platform ||
3338- app_intf_ver.major != kernel_intf_ver.major ||
3339- app_intf_ver.minor != kernel_intf_ver.minor)
3340+ if (app_intf_ver->platform != kernel_intf_ver.platform ||
3341+ app_intf_ver->major != kernel_intf_ver.major ||
3342+ app_intf_ver->minor != kernel_intf_ver.minor)
3343 result = -EINVAL;
3344
3345 return result;
3346@@ -312,7 +313,7 @@ octeontx_check_mbox_version(struct mbox_intf_ver app_intf_ver,
3347 int
3348 octeontx_mbox_init(void)
3349 {
3350- const struct mbox_intf_ver MBOX_INTERFACE_VERSION = {
3351+ struct mbox_intf_ver MBOX_INTERFACE_VERSION = {
3352 .platform = 0x01,
3353 .major = 0x01,
3354 .minor = 0x03
3355@@ -330,7 +331,7 @@ octeontx_mbox_init(void)
3356 return ret;
3357 }
3358
3359- ret = octeontx_check_mbox_version(MBOX_INTERFACE_VERSION,
3360+ ret = octeontx_check_mbox_version(&MBOX_INTERFACE_VERSION,
3361 &rm_intf_ver);
3362 if (ret < 0) {
3363 mbox_log_err("MBOX version: Kernel(%d.%d.%d) != DPDK(%d.%d.%d)",
3364diff --git a/drivers/common/octeontx2/hw/otx2_npc.h b/drivers/common/octeontx2/hw/otx2_npc.h
3365index 3dfc137..600084f 100644
3366--- a/drivers/common/octeontx2/hw/otx2_npc.h
3367+++ b/drivers/common/octeontx2/hw/otx2_npc.h
3368@@ -213,7 +213,7 @@ enum npc_kpu_lc_ltype {
3369 NPC_LT_LC_FCOE,
3370 };
3371
3372-/* Don't modify Ltypes upto SCTP, otherwise it will
3373+/* Don't modify Ltypes up to SCTP, otherwise it will
3374 * effect flow tag calculation and thus RSS.
3375 */
3376 enum npc_kpu_ld_ltype {
3377@@ -260,7 +260,7 @@ enum npc_kpu_lg_ltype {
3378 NPC_LT_LG_TU_ETHER_IN_NSH,
3379 };
3380
3381-/* Don't modify Ltypes upto SCTP, otherwise it will
3382+/* Don't modify Ltypes up to SCTP, otherwise it will
3383 * effect flow tag calculation and thus RSS.
3384 */
3385 enum npc_kpu_lh_ltype {
3386diff --git a/drivers/compress/octeontx/otx_zip_pmd.c b/drivers/compress/octeontx/otx_zip_pmd.c
3387index 9e00c86..bff8ef0 100644
3388--- a/drivers/compress/octeontx/otx_zip_pmd.c
3389+++ b/drivers/compress/octeontx/otx_zip_pmd.c
3390@@ -406,7 +406,7 @@ zip_pmd_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
3391
3392 qp->name = name;
3393
3394- /* Create completion queue upto max_inflight_ops */
3395+ /* Create completion queue up to max_inflight_ops */
3396 qp->processed_pkts = zip_pmd_qp_create_processed_pkts_ring(qp,
3397 max_inflight_ops, socket_id);
3398 if (qp->processed_pkts == NULL)
3399diff --git a/drivers/compress/zlib/zlib_pmd.c b/drivers/compress/zlib/zlib_pmd.c
3400index 19f9200..e39be2e 100644
3401--- a/drivers/compress/zlib/zlib_pmd.c
3402+++ b/drivers/compress/zlib/zlib_pmd.c
3403@@ -7,6 +7,8 @@
3404
3405 #include "zlib_pmd_private.h"
3406
3407+int zlib_logtype_driver;
3408+
3409 /** Compute next mbuf in the list, assign data buffer and length,
3410 * returns 0 if mbuf is NULL
3411 */
3412diff --git a/drivers/compress/zlib/zlib_pmd_private.h b/drivers/compress/zlib/zlib_pmd_private.h
3413index bda4975..e36c5dc 100644
3414--- a/drivers/compress/zlib/zlib_pmd_private.h
3415+++ b/drivers/compress/zlib/zlib_pmd_private.h
3416@@ -14,7 +14,7 @@
3417
3418 #define DEF_MEM_LEVEL 8
3419
3420-int zlib_logtype_driver;
3421+extern int zlib_logtype_driver;
3422 #define ZLIB_PMD_LOG(level, fmt, args...) \
3423 rte_log(RTE_LOG_ ## level, zlib_logtype_driver, "%s(): "fmt "\n", \
3424 __func__, ##args)
3425diff --git a/drivers/crypto/aesni_gcm/Makefile b/drivers/crypto/aesni_gcm/Makefile
3426index d8190a2..b443167 100644
3427--- a/drivers/crypto/aesni_gcm/Makefile
3428+++ b/drivers/crypto/aesni_gcm/Makefile
3429@@ -20,7 +20,8 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
3430 LDLIBS += -lrte_cryptodev
3431 LDLIBS += -lrte_bus_vdev
3432
3433-IMB_HDR = $(shell echo '\#include <intel-ipsec-mb.h>' | \
3434+H := \#
3435+IMB_HDR = $(shell echo '$Hinclude <intel-ipsec-mb.h>' | \
3436 $(CC) -E $(EXTRA_CFLAGS) - | grep 'intel-ipsec-mb.h' | \
3437 head -n1 | cut -d'"' -f2)
3438
3439diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
3440index 1a03be3..c9c9eb8 100644
3441--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
3442+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c
3443@@ -13,6 +13,8 @@
3444
3445 #include "aesni_gcm_pmd_private.h"
3446
3447+int aesni_gcm_logtype_driver;
3448+
3449 static uint8_t cryptodev_driver_id;
3450
3451 /** Parse crypto xform chain and set private session parameters */
3452diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h b/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h
3453index 2039adb..7347c47 100644
3454--- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h
3455+++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h
3456@@ -20,7 +20,7 @@
3457 /**< AES-NI GCM PMD device name */
3458
3459 /** AES-NI GCM PMD LOGTYPE DRIVER */
3460-int aesni_gcm_logtype_driver;
3461+extern int aesni_gcm_logtype_driver;
3462 #define AESNI_GCM_LOG(level, fmt, ...) \
3463 rte_log(RTE_LOG_ ## level, aesni_gcm_logtype_driver, \
3464 "%s() line %u: "fmt "\n", __func__, __LINE__, \
3465diff --git a/drivers/crypto/aesni_mb/Makefile b/drivers/crypto/aesni_mb/Makefile
3466index f1530e7..aa2e428 100644
3467--- a/drivers/crypto/aesni_mb/Makefile
3468+++ b/drivers/crypto/aesni_mb/Makefile
3469@@ -20,7 +20,8 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
3470 LDLIBS += -lrte_cryptodev
3471 LDLIBS += -lrte_bus_vdev
3472
3473-IMB_HDR = $(shell echo '\#include <intel-ipsec-mb.h>' | \
3474+H := \#
3475+IMB_HDR = $(shell echo '$Hinclude <intel-ipsec-mb.h>' | \
3476 $(CC) -E $(EXTRA_CFLAGS) - | grep 'intel-ipsec-mb.h' | \
3477 head -n1 | cut -d'"' -f2)
3478
3479diff --git a/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h b/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h
3480index 3456693..b3cb2f1 100644
3481--- a/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h
3482+++ b/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h
3483@@ -19,7 +19,7 @@ enum aesni_mb_vector_mode {
3484 /**< AES-NI Multi buffer PMD device name */
3485
3486 /** AESNI_MB PMD LOGTYPE DRIVER */
3487-int aesni_mb_logtype_driver;
3488+extern int aesni_mb_logtype_driver;
3489
3490 #define AESNI_MB_LOG(level, fmt, ...) \
3491 rte_log(RTE_LOG_ ## level, aesni_mb_logtype_driver, \
3492diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
3493index 33f4167..40feae3 100644
3494--- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
3495+++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
3496@@ -14,6 +14,8 @@
3497
3498 #include "aesni_mb_pmd_private.h"
3499
3500+int aesni_mb_logtype_driver;
3501+
3502 #define AES_CCM_DIGEST_MIN_LEN 4
3503 #define AES_CCM_DIGEST_MAX_LEN 16
3504 #define HMAC_MAX_BLOCK_SIZE 128
3505diff --git a/drivers/crypto/caam_jr/Makefile b/drivers/crypto/caam_jr/Makefile
3506index 1b1f25a..5b27b84 100644
3507--- a/drivers/crypto/caam_jr/Makefile
3508+++ b/drivers/crypto/caam_jr/Makefile
3509@@ -16,6 +16,13 @@ CFLAGS += -D _GNU_SOURCE
3510 CFLAGS += -O3
3511 CFLAGS += $(WERROR_FLAGS)
3512
3513+# FIXME: temporary solution for Bugzilla 469
3514+ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
3515+ifeq ($(shell test $(GCC_VERSION) -ge 100 && echo 1), 1)
3516+CFLAGS += -fcommon
3517+endif
3518+endif
3519+
3520 CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa/include
3521 CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax
3522 CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax/caamflib/
3523diff --git a/drivers/crypto/caam_jr/caam_jr.c b/drivers/crypto/caam_jr/caam_jr.c
3524index 8aaa3d4..86aa9a1 100644
3525--- a/drivers/crypto/caam_jr/caam_jr.c
3526+++ b/drivers/crypto/caam_jr/caam_jr.c
3527@@ -2084,7 +2084,7 @@ static struct rte_security_ops caam_jr_security_ops = {
3528 static void
3529 close_job_ring(struct sec_job_ring_t *job_ring)
3530 {
3531- if (job_ring->irq_fd) {
3532+ if (job_ring->irq_fd != -1) {
3533 /* Producer index is frozen. If consumer index is not equal
3534 * with producer index, then we have descs to flush.
3535 */
3536@@ -2093,7 +2093,7 @@ close_job_ring(struct sec_job_ring_t *job_ring)
3537
3538 /* free the uio job ring */
3539 free_job_ring(job_ring->irq_fd);
3540- job_ring->irq_fd = 0;
3541+ job_ring->irq_fd = -1;
3542 caam_jr_dma_free(job_ring->input_ring);
3543 caam_jr_dma_free(job_ring->output_ring);
3544 g_job_rings_no--;
3545@@ -2197,7 +2197,7 @@ caam_jr_dev_uninit(struct rte_cryptodev *dev)
3546 *
3547 */
3548 static void *
3549-init_job_ring(void *reg_base_addr, uint32_t irq_id)
3550+init_job_ring(void *reg_base_addr, int irq_id)
3551 {
3552 struct sec_job_ring_t *job_ring = NULL;
3553 int i, ret = 0;
3554@@ -2207,7 +2207,7 @@ init_job_ring(void *reg_base_addr, uint32_t irq_id)
3555 int irq_coalescing_count = 0;
3556
3557 for (i = 0; i < MAX_SEC_JOB_RINGS; i++) {
3558- if (g_job_rings[i].irq_fd == 0) {
3559+ if (g_job_rings[i].irq_fd == -1) {
3560 job_ring = &g_job_rings[i];
3561 g_job_rings_no++;
3562 break;
3563@@ -2460,6 +2460,15 @@ cryptodev_caam_jr_remove(struct rte_vdev_device *vdev)
3564 return rte_cryptodev_pmd_destroy(cryptodev);
3565 }
3566
3567+static void
3568+sec_job_rings_init(void)
3569+{
3570+ int i;
3571+
3572+ for (i = 0; i < MAX_SEC_JOB_RINGS; i++)
3573+ g_job_rings[i].irq_fd = -1;
3574+}
3575+
3576 static struct rte_vdev_driver cryptodev_caam_jr_drv = {
3577 .probe = cryptodev_caam_jr_probe,
3578 .remove = cryptodev_caam_jr_remove
3579@@ -2474,6 +2483,12 @@ RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CAAM_JR_PMD,
3580 RTE_PMD_REGISTER_CRYPTO_DRIVER(caam_jr_crypto_drv, cryptodev_caam_jr_drv.driver,
3581 cryptodev_driver_id);
3582
3583+RTE_INIT(caam_jr_init)
3584+{
3585+ sec_uio_job_rings_init();
3586+ sec_job_rings_init();
3587+}
3588+
3589 RTE_INIT(caam_jr_init_log)
3590 {
3591 caam_jr_logtype = rte_log_register("pmd.crypto.caam");
3592diff --git a/drivers/crypto/caam_jr/caam_jr_hw_specific.h b/drivers/crypto/caam_jr/caam_jr_hw_specific.h
3593index 5f58a58..bbe8bc3 100644
3594--- a/drivers/crypto/caam_jr/caam_jr_hw_specific.h
3595+++ b/drivers/crypto/caam_jr/caam_jr_hw_specific.h
3596@@ -360,7 +360,7 @@ struct sec_job_ring_t {
3597 * bitwise operations.
3598 */
3599
3600- uint32_t irq_fd; /* The file descriptor used for polling from
3601+ int irq_fd; /* The file descriptor used for polling from
3602 * user space for interrupts notifications
3603 */
3604 uint32_t jr_mode; /* Model used by SEC Driver to receive
3605diff --git a/drivers/crypto/caam_jr/caam_jr_pvt.h b/drivers/crypto/caam_jr/caam_jr_pvt.h
3606index 98cd443..552d6b9 100644
3607--- a/drivers/crypto/caam_jr/caam_jr_pvt.h
3608+++ b/drivers/crypto/caam_jr/caam_jr_pvt.h
3609@@ -216,7 +216,7 @@ calc_chksum(void *buffer, int len)
3610 }
3611 struct uio_job_ring {
3612 uint32_t jr_id;
3613- uint32_t uio_fd;
3614+ int uio_fd;
3615 void *register_base_addr;
3616 int map_size;
3617 int uio_minor_number;
3618@@ -224,8 +224,9 @@ struct uio_job_ring {
3619
3620 int sec_cleanup(void);
3621 int sec_configure(void);
3622+void sec_uio_job_rings_init(void);
3623 struct uio_job_ring *config_job_ring(void);
3624-void free_job_ring(uint32_t uio_fd);
3625+void free_job_ring(int uio_fd);
3626
3627 /* For Dma memory allocation of specified length and alignment */
3628 static inline void *
3629@@ -279,7 +280,7 @@ static inline rte_iova_t caam_jr_dma_vtop(void *ptr)
3630 * @retval 0 for success
3631 * @retval -1 value for error
3632 */
3633-uint32_t caam_jr_enable_irqs(uint32_t uio_fd);
3634+int caam_jr_enable_irqs(int uio_fd);
3635
3636 /** @brief Request to SEC kernel driver to disable interrupts for descriptor
3637 * finished processing
3638@@ -292,6 +293,6 @@ uint32_t caam_jr_enable_irqs(uint32_t uio_fd);
3639 * @retval -1 value for error
3640 *
3641 */
3642-uint32_t caam_jr_disable_irqs(uint32_t uio_fd);
3643+int caam_jr_disable_irqs(int uio_fd);
3644
3645 #endif
3646diff --git a/drivers/crypto/caam_jr/caam_jr_uio.c b/drivers/crypto/caam_jr/caam_jr_uio.c
3647index b1bb44c..e4ee102 100644
3648--- a/drivers/crypto/caam_jr/caam_jr_uio.c
3649+++ b/drivers/crypto/caam_jr/caam_jr_uio.c
3650@@ -145,7 +145,7 @@ file_read_first_line(const char root[], const char subdir[],
3651 "%s/%s/%s", root, subdir, filename);
3652
3653 fd = open(absolute_file_name, O_RDONLY);
3654- SEC_ASSERT(fd > 0, fd, "Error opening file %s",
3655+ SEC_ASSERT(fd >= 0, fd, "Error opening file %s",
3656 absolute_file_name);
3657
3658 /* read UIO device name from first line in file */
3659@@ -179,7 +179,7 @@ file_read_first_line(const char root[], const char subdir[],
3660 * kernel driver as well. No special return values are used.
3661 */
3662 static int
3663-sec_uio_send_command(uint32_t uio_fd, int32_t uio_command)
3664+sec_uio_send_command(int uio_fd, int32_t uio_command)
3665 {
3666 int ret;
3667
3668@@ -201,8 +201,8 @@ sec_uio_send_command(uint32_t uio_fd, int32_t uio_command)
3669 * @retval 0 for success
3670 * @retval -1 value for error
3671 */
3672-uint32_t
3673-caam_jr_enable_irqs(uint32_t uio_fd)
3674+int
3675+caam_jr_enable_irqs(int uio_fd)
3676 {
3677 int ret;
3678
3679@@ -232,8 +232,8 @@ caam_jr_enable_irqs(uint32_t uio_fd)
3680 * @retval -1 value for error
3681 *
3682 */
3683-uint32_t
3684-caam_jr_disable_irqs(uint32_t uio_fd)
3685+int
3686+caam_jr_disable_irqs(int uio_fd)
3687 {
3688 int ret;
3689
3690@@ -322,12 +322,12 @@ uio_map_registers(int uio_device_fd, int uio_device_id,
3691 }
3692
3693 void
3694-free_job_ring(uint32_t uio_fd)
3695+free_job_ring(int uio_fd)
3696 {
3697 struct uio_job_ring *job_ring = NULL;
3698 int i;
3699
3700- if (!uio_fd)
3701+ if (uio_fd == -1)
3702 return;
3703
3704 for (i = 0; i < MAX_SEC_JOB_RINGS; i++) {
3705@@ -347,7 +347,7 @@ free_job_ring(uint32_t uio_fd)
3706 job_ring->jr_id, job_ring->uio_fd);
3707 close(job_ring->uio_fd);
3708 g_uio_jr_num--;
3709- job_ring->uio_fd = 0;
3710+ job_ring->uio_fd = -1;
3711 if (job_ring->register_base_addr == NULL)
3712 return;
3713
3714@@ -370,7 +370,7 @@ uio_job_ring *config_job_ring(void)
3715 int i;
3716
3717 for (i = 0; i < MAX_SEC_JOB_RINGS; i++) {
3718- if (g_uio_job_ring[i].uio_fd == 0) {
3719+ if (g_uio_job_ring[i].uio_fd == -1) {
3720 job_ring = &g_uio_job_ring[i];
3721 g_uio_jr_num++;
3722 break;
3723@@ -389,7 +389,7 @@ uio_job_ring *config_job_ring(void)
3724
3725 /* Open device file */
3726 job_ring->uio_fd = open(uio_device_file_name, O_RDWR);
3727- SEC_ASSERT(job_ring->uio_fd > 0, NULL,
3728+ SEC_ASSERT(job_ring->uio_fd >= 0, NULL,
3729 "Failed to open UIO device file for job ring %d",
3730 job_ring->jr_id);
3731
3732@@ -488,12 +488,22 @@ sec_cleanup(void)
3733 /* I need to close the fd after shutdown UIO commands need to be
3734 * sent using the fd
3735 */
3736- if (job_ring->uio_fd != 0) {
3737+ if (job_ring->uio_fd != -1) {
3738 CAAM_JR_INFO(
3739 "Closed device file for job ring %d , fd = %d",
3740 job_ring->jr_id, job_ring->uio_fd);
3741 close(job_ring->uio_fd);
3742+ job_ring->uio_fd = -1;
3743 }
3744 }
3745 return 0;
3746 }
3747+
3748+void
3749+sec_uio_job_rings_init(void)
3750+{
3751+ int i;
3752+
3753+ for (i = 0; i < MAX_SEC_JOB_RINGS; i++)
3754+ g_uio_job_ring[i].uio_fd = -1;
3755+}
3756diff --git a/drivers/crypto/caam_jr/meson.build b/drivers/crypto/caam_jr/meson.build
3757index 50132ae..0dbfa2e 100644
3758--- a/drivers/crypto/caam_jr/meson.build
3759+++ b/drivers/crypto/caam_jr/meson.build
3760@@ -14,6 +14,11 @@ sources = files('caam_jr_capabilities.c',
3761
3762 allow_experimental_apis = true
3763
3764+# FIXME: temporary solution for Bugzilla 469
3765+if (toolchain == 'gcc' and cc.version().version_compare('>=10.0.0'))
3766+ cflags += '-fcommon'
3767+endif
3768+
3769 includes += include_directories('../../bus/dpaa/include/')
3770 includes += include_directories('../../common/dpaax/')
3771 includes += include_directories('../../common/dpaax/caamflib/')
3772diff --git a/drivers/crypto/ccp/ccp_dev.c b/drivers/crypto/ccp/ccp_dev.c
3773index 80fe6a4..7d98b2e 100644
3774--- a/drivers/crypto/ccp/ccp_dev.c
3775+++ b/drivers/crypto/ccp/ccp_dev.c
3776@@ -760,7 +760,7 @@ ccp_probe_device(const char *dirname, uint16_t domain,
3777 return 0;
3778 fail:
3779 CCP_LOG_ERR("CCP Device probe failed");
3780- if (uio_fd > 0)
3781+ if (uio_fd >= 0)
3782 close(uio_fd);
3783 if (ccp_dev)
3784 rte_free(ccp_dev);
3785diff --git a/drivers/crypto/dpaa2_sec/Makefile b/drivers/crypto/dpaa2_sec/Makefile
3786index 96b9c78..183e941 100644
3787--- a/drivers/crypto/dpaa2_sec/Makefile
3788+++ b/drivers/crypto/dpaa2_sec/Makefile
3789@@ -20,6 +20,13 @@ CFLAGS += -Wno-implicit-fallthrough
3790 endif
3791 endif
3792
3793+# FIXME: temporary solution for Bugzilla 469
3794+ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
3795+ifeq ($(shell test $(GCC_VERSION) -ge 100 && echo 1), 1)
3796+CFLAGS += -fcommon
3797+endif
3798+endif
3799+
3800 CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax
3801 CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax/caamflib
3802 CFLAGS += -I$(RTE_SDK)/drivers/crypto/dpaa2_sec/
3803diff --git a/drivers/crypto/dpaa2_sec/meson.build b/drivers/crypto/dpaa2_sec/meson.build
3804index ab9c8c8..3f1dfd6 100644
3805--- a/drivers/crypto/dpaa2_sec/meson.build
3806+++ b/drivers/crypto/dpaa2_sec/meson.build
3807@@ -12,4 +12,9 @@ sources = files('dpaa2_sec_dpseci.c',
3808
3809 allow_experimental_apis = true
3810
3811+# FIXME: temporary solution for Bugzilla 469
3812+if (toolchain == 'gcc' and cc.version().version_compare('>=10.0.0'))
3813+ cflags += '-fcommon'
3814+endif
3815+
3816 includes += include_directories('mc', '../../common/dpaax', '../../common/dpaax/caamflib')
3817diff --git a/drivers/crypto/dpaa_sec/Makefile b/drivers/crypto/dpaa_sec/Makefile
3818index fbfd775..b5a97b9 100644
3819--- a/drivers/crypto/dpaa_sec/Makefile
3820+++ b/drivers/crypto/dpaa_sec/Makefile
3821@@ -14,6 +14,13 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
3822 CFLAGS += -O3
3823 CFLAGS += $(WERROR_FLAGS)
3824
3825+# FIXME: temporary solution for Bugzilla 469
3826+ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
3827+ifeq ($(shell test $(GCC_VERSION) -ge 100 && echo 1), 1)
3828+CFLAGS += -fcommon
3829+endif
3830+endif
3831+
3832 CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa
3833 CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa/include
3834 CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa/base/qbman
3835diff --git a/drivers/crypto/dpaa_sec/meson.build b/drivers/crypto/dpaa_sec/meson.build
3836index 71de819..e819f9c 100644
3837--- a/drivers/crypto/dpaa_sec/meson.build
3838+++ b/drivers/crypto/dpaa_sec/meson.build
3839@@ -11,6 +11,11 @@ sources = files('dpaa_sec.c')
3840
3841 allow_experimental_apis = true
3842
3843+# FIXME: temporary solution for Bugzilla 469
3844+if (toolchain == 'gcc' and cc.version().version_compare('>=10.0.0'))
3845+ cflags += '-fcommon'
3846+endif
3847+
3848 includes += include_directories('../../bus/dpaa/include')
3849 includes += include_directories('../../common/dpaax')
3850 includes += include_directories('../../common/dpaax/caamflib/')
3851diff --git a/drivers/crypto/kasumi/kasumi_pmd_private.h b/drivers/crypto/kasumi/kasumi_pmd_private.h
3852index 7ac19c5..f0b83f2 100644
3853--- a/drivers/crypto/kasumi/kasumi_pmd_private.h
3854+++ b/drivers/crypto/kasumi/kasumi_pmd_private.h
3855@@ -11,7 +11,7 @@
3856 /**< KASUMI PMD device name */
3857
3858 /** KASUMI PMD LOGTYPE DRIVER */
3859-int kasumi_logtype_driver;
3860+extern int kasumi_logtype_driver;
3861
3862 #define KASUMI_LOG(level, fmt, ...) \
3863 rte_log(RTE_LOG_ ## level, kasumi_logtype_driver, \
3864@@ -72,6 +72,6 @@ kasumi_set_session_parameters(struct kasumi_session *sess,
3865
3866
3867 /** device specific operations function pointer structure */
3868-struct rte_cryptodev_ops *rte_kasumi_pmd_ops;
3869+extern struct rte_cryptodev_ops *rte_kasumi_pmd_ops;
3870
3871 #endif /* _KASUMI_PMD_PRIVATE_H_ */
3872diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi/rte_kasumi_pmd.c
3873index d0583ef..c87dca5 100644
3874--- a/drivers/crypto/kasumi/rte_kasumi_pmd.c
3875+++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c
3876@@ -17,6 +17,7 @@
3877 #define KASUMI_MAX_BURST 4
3878 #define BYTE_LEN 8
3879
3880+int kasumi_logtype_driver;
3881 static uint8_t cryptodev_driver_id;
3882
3883 /** Get xform chain order. */
3884diff --git a/drivers/crypto/mvsam/mrvl_pmd_private.h b/drivers/crypto/mvsam/mrvl_pmd_private.h
3885index 09702b9..e575330 100644
3886--- a/drivers/crypto/mvsam/mrvl_pmd_private.h
3887+++ b/drivers/crypto/mvsam/mrvl_pmd_private.h
3888@@ -13,7 +13,7 @@
3889 /**< Marvell PMD device name */
3890
3891 /** MRVL PMD LOGTYPE DRIVER */
3892-int mrvl_logtype_driver;
3893+extern int mrvl_logtype_driver;
3894
3895 #define MRVL_LOG(level, fmt, ...) \
3896 rte_log(RTE_LOG_ ## level, mrvl_logtype_driver, \
3897diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd.c b/drivers/crypto/mvsam/rte_mrvl_pmd.c
3898index 3c0fe21..63782ce 100644
3899--- a/drivers/crypto/mvsam/rte_mrvl_pmd.c
3900+++ b/drivers/crypto/mvsam/rte_mrvl_pmd.c
3901@@ -19,6 +19,7 @@
3902 #define MRVL_PMD_MAX_NB_SESS_ARG ("max_nb_sessions")
3903 #define MRVL_PMD_DEFAULT_MAX_NB_SESSIONS 2048
3904
3905+int mrvl_logtype_driver;
3906 static uint8_t cryptodev_driver_id;
3907
3908 struct mrvl_pmd_init_params {
3909diff --git a/drivers/crypto/nitrox/nitrox_csr.h b/drivers/crypto/nitrox/nitrox_csr.h
3910index 8cd92e3..de7a3c6 100644
3911--- a/drivers/crypto/nitrox/nitrox_csr.h
3912+++ b/drivers/crypto/nitrox/nitrox_csr.h
3913@@ -12,18 +12,18 @@
3914 #define NITROX_CSR_ADDR(bar_addr, offset) (bar_addr + (offset))
3915
3916 /* NPS packet registers */
3917-#define NPS_PKT_IN_INSTR_CTLX(_i) (0x10060 + ((_i) * 0x40000))
3918-#define NPS_PKT_IN_INSTR_BADDRX(_i) (0x10068 + ((_i) * 0x40000))
3919-#define NPS_PKT_IN_INSTR_RSIZEX(_i) (0x10070 + ((_i) * 0x40000))
3920-#define NPS_PKT_IN_DONE_CNTSX(_i) (0x10080 + ((_i) * 0x40000))
3921-#define NPS_PKT_IN_INSTR_BAOFF_DBELLX(_i) (0x10078 + ((_i) * 0x40000))
3922-#define NPS_PKT_IN_INT_LEVELSX(_i) (0x10088 + ((_i) * 0x40000))
3923-#define NPS_PKT_SLC_CTLX(_i) (0x10000 + ((_i) * 0x40000))
3924-#define NPS_PKT_SLC_CNTSX(_i) (0x10008 + ((_i) * 0x40000))
3925-#define NPS_PKT_SLC_INT_LEVELSX(_i) (0x10010 + ((_i) * 0x40000))
3926+#define NPS_PKT_IN_INSTR_CTLX(_i) (0x10060UL + ((_i) * 0x40000UL))
3927+#define NPS_PKT_IN_INSTR_BADDRX(_i) (0x10068UL + ((_i) * 0x40000UL))
3928+#define NPS_PKT_IN_INSTR_RSIZEX(_i) (0x10070UL + ((_i) * 0x40000UL))
3929+#define NPS_PKT_IN_DONE_CNTSX(_i) (0x10080UL + ((_i) * 0x40000UL))
3930+#define NPS_PKT_IN_INSTR_BAOFF_DBELLX(_i) (0x10078UL + ((_i) * 0x40000UL))
3931+#define NPS_PKT_IN_INT_LEVELSX(_i) (0x10088UL + ((_i) * 0x40000UL))
3932+#define NPS_PKT_SLC_CTLX(_i) (0x10000UL + ((_i) * 0x40000UL))
3933+#define NPS_PKT_SLC_CNTSX(_i) (0x10008UL + ((_i) * 0x40000UL))
3934+#define NPS_PKT_SLC_INT_LEVELSX(_i) (0x10010UL + ((_i) * 0x40000UL))
3935
3936 /* AQM Virtual Function Registers */
3937-#define AQMQ_QSZX(_i) (0x20008 + ((_i)*0x40000))
3938+#define AQMQ_QSZX(_i) (0x20008UL + ((_i) * 0x40000UL))
3939
3940 static inline uint64_t
3941 nitrox_read_csr(uint8_t *bar_addr, uint64_t offset)
3942diff --git a/drivers/crypto/nitrox/nitrox_sym.c b/drivers/crypto/nitrox/nitrox_sym.c
3943index 56410c4..d1b32fe 100644
3944--- a/drivers/crypto/nitrox/nitrox_sym.c
3945+++ b/drivers/crypto/nitrox/nitrox_sym.c
3946@@ -683,7 +683,8 @@ nitrox_sym_pmd_create(struct nitrox_device *ndev)
3947 struct rte_cryptodev *cdev;
3948
3949 rte_pci_device_name(&ndev->pdev->addr, name, sizeof(name));
3950- snprintf(name + strlen(name), RTE_CRYPTODEV_NAME_MAX_LEN, "_n5sym");
3951+ snprintf(name + strlen(name), RTE_CRYPTODEV_NAME_MAX_LEN - strlen(name),
3952+ "_n5sym");
3953 ndev->rte_sym_dev.driver = &nitrox_rte_sym_drv;
3954 ndev->rte_sym_dev.numa_node = ndev->pdev->device.numa_node;
3955 ndev->rte_sym_dev.devargs = NULL;
3956diff --git a/drivers/crypto/octeontx2/otx2_cryptodev.c b/drivers/crypto/octeontx2/otx2_cryptodev.c
3957index 7b8add1..417eda6 100644
3958--- a/drivers/crypto/octeontx2/otx2_cryptodev.c
3959+++ b/drivers/crypto/octeontx2/otx2_cryptodev.c
3960@@ -24,6 +24,8 @@
3961
3962 int otx2_cpt_logtype;
3963
3964+uint8_t otx2_cryptodev_driver_id;
3965+
3966 static struct rte_pci_id pci_id_cpt_table[] = {
3967 {
3968 RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM,
3969diff --git a/drivers/crypto/octeontx2/otx2_cryptodev.h b/drivers/crypto/octeontx2/otx2_cryptodev.h
3970index 8e0ebc2..c0aa661 100644
3971--- a/drivers/crypto/octeontx2/otx2_cryptodev.h
3972+++ b/drivers/crypto/octeontx2/otx2_cryptodev.h
3973@@ -38,6 +38,6 @@ extern int otx2_cpt_logtype;
3974 /*
3975 * Crypto device driver ID
3976 */
3977-uint8_t otx2_cryptodev_driver_id;
3978+extern uint8_t otx2_cryptodev_driver_id;
3979
3980 #endif /* _OTX2_CRYPTODEV_H_ */
3981diff --git a/drivers/crypto/octeontx2/otx2_cryptodev_ops.h b/drivers/crypto/octeontx2/otx2_cryptodev_ops.h
3982index a2724f7..f83e36b 100644
3983--- a/drivers/crypto/octeontx2/otx2_cryptodev_ops.h
3984+++ b/drivers/crypto/octeontx2/otx2_cryptodev_ops.h
3985@@ -16,6 +16,6 @@ enum otx2_cpt_egrp {
3986 OTX2_CPT_EGRP_AE = 2
3987 };
3988
3989-struct rte_cryptodev_ops otx2_cpt_ops;
3990+extern struct rte_cryptodev_ops otx2_cpt_ops;
3991
3992 #endif /* _OTX2_CRYPTODEV_OPS_H_ */
3993diff --git a/drivers/crypto/openssl/openssl_pmd_private.h b/drivers/crypto/openssl/openssl_pmd_private.h
3994index 43ac381..b2054b3 100644
3995--- a/drivers/crypto/openssl/openssl_pmd_private.h
3996+++ b/drivers/crypto/openssl/openssl_pmd_private.h
3997@@ -16,7 +16,7 @@
3998 /**< Open SSL Crypto PMD device name */
3999
4000 /** OPENSSL PMD LOGTYPE DRIVER */
4001-int openssl_logtype_driver;
4002+extern int openssl_logtype_driver;
4003 #define OPENSSL_LOG(level, fmt, ...) \
4004 rte_log(RTE_LOG_ ## level, openssl_logtype_driver, \
4005 "%s() line %u: " fmt "\n", __func__, __LINE__, \
4006diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
4007index 199097b..c294f60 100644
4008--- a/drivers/crypto/openssl/rte_openssl_pmd.c
4009+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
4010@@ -18,6 +18,7 @@
4011
4012 #define DES_BLOCK_SIZE 8
4013
4014+int openssl_logtype_driver;
4015 static uint8_t cryptodev_driver_id;
4016
4017 #if (OPENSSL_VERSION_NUMBER < 0x10100000L)
4018@@ -2037,6 +2038,26 @@ process_asym_op(struct openssl_qp *qp, struct rte_crypto_op *op,
4019 return retval;
4020 }
4021
4022+static void
4023+copy_plaintext(struct rte_mbuf *m_src, struct rte_mbuf *m_dst,
4024+ struct rte_crypto_op *op)
4025+{
4026+ uint8_t *p_src, *p_dst;
4027+
4028+ p_src = rte_pktmbuf_mtod(m_src, uint8_t *);
4029+ p_dst = rte_pktmbuf_mtod(m_dst, uint8_t *);
4030+
4031+ /**
4032+ * Copy the content between cipher offset and auth offset
4033+ * for generating correct digest.
4034+ */
4035+ if (op->sym->cipher.data.offset > op->sym->auth.data.offset)
4036+ memcpy(p_dst + op->sym->auth.data.offset,
4037+ p_src + op->sym->auth.data.offset,
4038+ op->sym->cipher.data.offset -
4039+ op->sym->auth.data.offset);
4040+}
4041+
4042 /** Process crypto operation for mbuf */
4043 static int
4044 process_op(struct openssl_qp *qp, struct rte_crypto_op *op,
4045@@ -2059,6 +2080,9 @@ process_op(struct openssl_qp *qp, struct rte_crypto_op *op,
4046 break;
4047 case OPENSSL_CHAIN_CIPHER_AUTH:
4048 process_openssl_cipher_op(op, sess, msrc, mdst);
4049+ /* OOP */
4050+ if (msrc != mdst)
4051+ copy_plaintext(msrc, mdst, op);
4052 process_openssl_auth_op(qp, op, sess, mdst, mdst);
4053 break;
4054 case OPENSSL_CHAIN_AUTH_CIPHER:
4055diff --git a/drivers/crypto/qat/qat_sym_capabilities.h b/drivers/crypto/qat/qat_sym_capabilities.h
4056index 028a56c..dbeea43 100644
4057--- a/drivers/crypto/qat/qat_sym_capabilities.h
4058+++ b/drivers/crypto/qat/qat_sym_capabilities.h
4059@@ -6,6 +6,111 @@
4060 #define _QAT_SYM_CAPABILITIES_H_
4061
4062 #define QAT_BASE_GEN1_SYM_CAPABILITIES \
4063+ { /* SHA1 */ \
4064+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4065+ {.sym = { \
4066+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
4067+ {.auth = { \
4068+ .algo = RTE_CRYPTO_AUTH_SHA1, \
4069+ .block_size = 64, \
4070+ .key_size = { \
4071+ .min = 0, \
4072+ .max = 0, \
4073+ .increment = 0 \
4074+ }, \
4075+ .digest_size = { \
4076+ .min = 1, \
4077+ .max = 20, \
4078+ .increment = 1 \
4079+ }, \
4080+ .iv_size = { 0 } \
4081+ }, } \
4082+ }, } \
4083+ }, \
4084+ { /* SHA224 */ \
4085+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4086+ {.sym = { \
4087+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
4088+ {.auth = { \
4089+ .algo = RTE_CRYPTO_AUTH_SHA224, \
4090+ .block_size = 64, \
4091+ .key_size = { \
4092+ .min = 0, \
4093+ .max = 0, \
4094+ .increment = 0 \
4095+ }, \
4096+ .digest_size = { \
4097+ .min = 1, \
4098+ .max = 28, \
4099+ .increment = 1 \
4100+ }, \
4101+ .iv_size = { 0 } \
4102+ }, } \
4103+ }, } \
4104+ }, \
4105+ { /* SHA256 */ \
4106+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4107+ {.sym = { \
4108+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
4109+ {.auth = { \
4110+ .algo = RTE_CRYPTO_AUTH_SHA256, \
4111+ .block_size = 64, \
4112+ .key_size = { \
4113+ .min = 0, \
4114+ .max = 0, \
4115+ .increment = 0 \
4116+ }, \
4117+ .digest_size = { \
4118+ .min = 1, \
4119+ .max = 32, \
4120+ .increment = 1 \
4121+ }, \
4122+ .iv_size = { 0 } \
4123+ }, } \
4124+ }, } \
4125+ }, \
4126+ { /* SHA384 */ \
4127+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4128+ {.sym = { \
4129+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
4130+ {.auth = { \
4131+ .algo = RTE_CRYPTO_AUTH_SHA384, \
4132+ .block_size = 128, \
4133+ .key_size = { \
4134+ .min = 0, \
4135+ .max = 0, \
4136+ .increment = 0 \
4137+ }, \
4138+ .digest_size = { \
4139+ .min = 1, \
4140+ .max = 48, \
4141+ .increment = 1 \
4142+ }, \
4143+ .iv_size = { 0 } \
4144+ }, } \
4145+ }, } \
4146+ }, \
4147+ { /* SHA512 */ \
4148+ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4149+ {.sym = { \
4150+ .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, \
4151+ {.auth = { \
4152+ .algo = RTE_CRYPTO_AUTH_SHA512, \
4153+ .block_size = 128, \
4154+ .key_size = { \
4155+ .min = 0, \
4156+ .max = 0, \
4157+ .increment = 0 \
4158+ }, \
4159+ .digest_size = { \
4160+ .min = 1, \
4161+ .max = 64, \
4162+ .increment = 1 \
4163+ }, \
4164+ .iv_size = { 0 } \
4165+ }, } \
4166+ }, } \
4167+ }, \
4168 { /* SHA1 HMAC */ \
4169 .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, \
4170 {.sym = { \
4171diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c
4172index 72290ba..695ba7e 100644
4173--- a/drivers/crypto/qat/qat_sym_session.c
4174+++ b/drivers/crypto/qat/qat_sym_session.c
4175@@ -19,6 +19,41 @@
4176 #include "qat_sym_session.h"
4177 #include "qat_sym_pmd.h"
4178
4179+/* SHA1 - 20 bytes - Initialiser state can be found in FIPS stds 180-2 */
4180+static const uint8_t sha1InitialState[] = {
4181+ 0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x89, 0x98, 0xba,
4182+ 0xdc, 0xfe, 0x10, 0x32, 0x54, 0x76, 0xc3, 0xd2, 0xe1, 0xf0};
4183+
4184+/* SHA 224 - 32 bytes - Initialiser state can be found in FIPS stds 180-2 */
4185+static const uint8_t sha224InitialState[] = {
4186+ 0xc1, 0x05, 0x9e, 0xd8, 0x36, 0x7c, 0xd5, 0x07, 0x30, 0x70, 0xdd,
4187+ 0x17, 0xf7, 0x0e, 0x59, 0x39, 0xff, 0xc0, 0x0b, 0x31, 0x68, 0x58,
4188+ 0x15, 0x11, 0x64, 0xf9, 0x8f, 0xa7, 0xbe, 0xfa, 0x4f, 0xa4};
4189+
4190+/* SHA 256 - 32 bytes - Initialiser state can be found in FIPS stds 180-2 */
4191+static const uint8_t sha256InitialState[] = {
4192+ 0x6a, 0x09, 0xe6, 0x67, 0xbb, 0x67, 0xae, 0x85, 0x3c, 0x6e, 0xf3,
4193+ 0x72, 0xa5, 0x4f, 0xf5, 0x3a, 0x51, 0x0e, 0x52, 0x7f, 0x9b, 0x05,
4194+ 0x68, 0x8c, 0x1f, 0x83, 0xd9, 0xab, 0x5b, 0xe0, 0xcd, 0x19};
4195+
4196+/* SHA 384 - 64 bytes - Initialiser state can be found in FIPS stds 180-2 */
4197+static const uint8_t sha384InitialState[] = {
4198+ 0xcb, 0xbb, 0x9d, 0x5d, 0xc1, 0x05, 0x9e, 0xd8, 0x62, 0x9a, 0x29,
4199+ 0x2a, 0x36, 0x7c, 0xd5, 0x07, 0x91, 0x59, 0x01, 0x5a, 0x30, 0x70,
4200+ 0xdd, 0x17, 0x15, 0x2f, 0xec, 0xd8, 0xf7, 0x0e, 0x59, 0x39, 0x67,
4201+ 0x33, 0x26, 0x67, 0xff, 0xc0, 0x0b, 0x31, 0x8e, 0xb4, 0x4a, 0x87,
4202+ 0x68, 0x58, 0x15, 0x11, 0xdb, 0x0c, 0x2e, 0x0d, 0x64, 0xf9, 0x8f,
4203+ 0xa7, 0x47, 0xb5, 0x48, 0x1d, 0xbe, 0xfa, 0x4f, 0xa4};
4204+
4205+/* SHA 512 - 64 bytes - Initialiser state can be found in FIPS stds 180-2 */
4206+static const uint8_t sha512InitialState[] = {
4207+ 0x6a, 0x09, 0xe6, 0x67, 0xf3, 0xbc, 0xc9, 0x08, 0xbb, 0x67, 0xae,
4208+ 0x85, 0x84, 0xca, 0xa7, 0x3b, 0x3c, 0x6e, 0xf3, 0x72, 0xfe, 0x94,
4209+ 0xf8, 0x2b, 0xa5, 0x4f, 0xf5, 0x3a, 0x5f, 0x1d, 0x36, 0xf1, 0x51,
4210+ 0x0e, 0x52, 0x7f, 0xad, 0xe6, 0x82, 0xd1, 0x9b, 0x05, 0x68, 0x8c,
4211+ 0x2b, 0x3e, 0x6c, 0x1f, 0x1f, 0x83, 0xd9, 0xab, 0xfb, 0x41, 0xbd,
4212+ 0x6b, 0x5b, 0xe0, 0xcd, 0x19, 0x13, 0x7e, 0x21, 0x79};
4213+
4214 /** Frees a context previously created
4215 * Depends on openssl libcrypto
4216 */
4217@@ -580,8 +615,29 @@ qat_sym_session_configure_auth(struct rte_cryptodev *dev,
4218 const uint8_t *key_data = auth_xform->key.data;
4219 uint8_t key_length = auth_xform->key.length;
4220 session->aes_cmac = 0;
4221+ session->auth_mode = ICP_QAT_HW_AUTH_MODE1;
4222
4223 switch (auth_xform->algo) {
4224+ case RTE_CRYPTO_AUTH_SHA1:
4225+ session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA1;
4226+ session->auth_mode = ICP_QAT_HW_AUTH_MODE0;
4227+ break;
4228+ case RTE_CRYPTO_AUTH_SHA224:
4229+ session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA224;
4230+ session->auth_mode = ICP_QAT_HW_AUTH_MODE0;
4231+ break;
4232+ case RTE_CRYPTO_AUTH_SHA256:
4233+ session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA256;
4234+ session->auth_mode = ICP_QAT_HW_AUTH_MODE0;
4235+ break;
4236+ case RTE_CRYPTO_AUTH_SHA384:
4237+ session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA384;
4238+ session->auth_mode = ICP_QAT_HW_AUTH_MODE0;
4239+ break;
4240+ case RTE_CRYPTO_AUTH_SHA512:
4241+ session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA512;
4242+ session->auth_mode = ICP_QAT_HW_AUTH_MODE0;
4243+ break;
4244 case RTE_CRYPTO_AUTH_SHA1_HMAC:
4245 session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_SHA1;
4246 break;
4247@@ -635,11 +691,6 @@ qat_sym_session_configure_auth(struct rte_cryptodev *dev,
4248 }
4249 session->qat_hash_alg = ICP_QAT_HW_AUTH_ALGO_ZUC_3G_128_EIA3;
4250 break;
4251- case RTE_CRYPTO_AUTH_SHA1:
4252- case RTE_CRYPTO_AUTH_SHA256:
4253- case RTE_CRYPTO_AUTH_SHA512:
4254- case RTE_CRYPTO_AUTH_SHA224:
4255- case RTE_CRYPTO_AUTH_SHA384:
4256 case RTE_CRYPTO_AUTH_MD5:
4257 case RTE_CRYPTO_AUTH_AES_CBC_MAC:
4258 QAT_LOG(ERR, "Crypto: Unsupported hash alg %u",
4259@@ -727,6 +778,8 @@ qat_sym_session_configure_aead(struct rte_cryptodev *dev,
4260 session->cipher_iv.offset = xform->aead.iv.offset;
4261 session->cipher_iv.length = xform->aead.iv.length;
4262
4263+ session->auth_mode = ICP_QAT_HW_AUTH_MODE1;
4264+
4265 switch (aead_xform->algo) {
4266 case RTE_CRYPTO_AEAD_AES_GCM:
4267 if (qat_sym_validate_aes_key(aead_xform->key.length,
4268@@ -1524,7 +1577,7 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4269 (struct icp_qat_fw_la_auth_req_params *)
4270 ((char *)&req_tmpl->serv_specif_rqpars +
4271 ICP_QAT_FW_HASH_REQUEST_PARAMETERS_OFFSET);
4272- uint16_t state1_size = 0, state2_size = 0;
4273+ uint16_t state1_size = 0, state2_size = 0, cd_extra_size = 0;
4274 uint16_t hash_offset, cd_size;
4275 uint32_t *aad_len = NULL;
4276 uint32_t wordIndex = 0;
4277@@ -1574,10 +1627,11 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4278 hash = (struct icp_qat_hw_auth_setup *)cdesc->cd_cur_ptr;
4279 hash->auth_config.reserved = 0;
4280 hash->auth_config.config =
4281- ICP_QAT_HW_AUTH_CONFIG_BUILD(ICP_QAT_HW_AUTH_MODE1,
4282+ ICP_QAT_HW_AUTH_CONFIG_BUILD(cdesc->auth_mode,
4283 cdesc->qat_hash_alg, digestsize);
4284
4285- if (cdesc->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2
4286+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0
4287+ || cdesc->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2
4288 || cdesc->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_KASUMI_F9
4289 || cdesc->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_ZUC_3G_128_EIA3
4290 || cdesc->qat_hash_alg == ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC
4291@@ -1600,6 +1654,15 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4292 */
4293 switch (cdesc->qat_hash_alg) {
4294 case ICP_QAT_HW_AUTH_ALGO_SHA1:
4295+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
4296+ /* Plain SHA-1 */
4297+ rte_memcpy(cdesc->cd_cur_ptr, sha1InitialState,
4298+ sizeof(sha1InitialState));
4299+ state1_size = qat_hash_get_state1_size(
4300+ cdesc->qat_hash_alg);
4301+ break;
4302+ }
4303+ /* SHA-1 HMAC */
4304 if (qat_sym_do_precomputes(ICP_QAT_HW_AUTH_ALGO_SHA1, authkey,
4305 authkeylen, cdesc->cd_cur_ptr, &state1_size,
4306 cdesc->aes_cmac)) {
4307@@ -1609,6 +1672,15 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4308 state2_size = RTE_ALIGN_CEIL(ICP_QAT_HW_SHA1_STATE2_SZ, 8);
4309 break;
4310 case ICP_QAT_HW_AUTH_ALGO_SHA224:
4311+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
4312+ /* Plain SHA-224 */
4313+ rte_memcpy(cdesc->cd_cur_ptr, sha224InitialState,
4314+ sizeof(sha224InitialState));
4315+ state1_size = qat_hash_get_state1_size(
4316+ cdesc->qat_hash_alg);
4317+ break;
4318+ }
4319+ /* SHA-224 HMAC */
4320 if (qat_sym_do_precomputes(ICP_QAT_HW_AUTH_ALGO_SHA224, authkey,
4321 authkeylen, cdesc->cd_cur_ptr, &state1_size,
4322 cdesc->aes_cmac)) {
4323@@ -1618,6 +1690,15 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4324 state2_size = ICP_QAT_HW_SHA224_STATE2_SZ;
4325 break;
4326 case ICP_QAT_HW_AUTH_ALGO_SHA256:
4327+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
4328+ /* Plain SHA-256 */
4329+ rte_memcpy(cdesc->cd_cur_ptr, sha256InitialState,
4330+ sizeof(sha256InitialState));
4331+ state1_size = qat_hash_get_state1_size(
4332+ cdesc->qat_hash_alg);
4333+ break;
4334+ }
4335+ /* SHA-256 HMAC */
4336 if (qat_sym_do_precomputes(ICP_QAT_HW_AUTH_ALGO_SHA256, authkey,
4337 authkeylen, cdesc->cd_cur_ptr, &state1_size,
4338 cdesc->aes_cmac)) {
4339@@ -1627,6 +1708,15 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4340 state2_size = ICP_QAT_HW_SHA256_STATE2_SZ;
4341 break;
4342 case ICP_QAT_HW_AUTH_ALGO_SHA384:
4343+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
4344+ /* Plain SHA-384 */
4345+ rte_memcpy(cdesc->cd_cur_ptr, sha384InitialState,
4346+ sizeof(sha384InitialState));
4347+ state1_size = qat_hash_get_state1_size(
4348+ cdesc->qat_hash_alg);
4349+ break;
4350+ }
4351+ /* SHA-384 HMAC */
4352 if (qat_sym_do_precomputes(ICP_QAT_HW_AUTH_ALGO_SHA384, authkey,
4353 authkeylen, cdesc->cd_cur_ptr, &state1_size,
4354 cdesc->aes_cmac)) {
4355@@ -1636,6 +1726,15 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4356 state2_size = ICP_QAT_HW_SHA384_STATE2_SZ;
4357 break;
4358 case ICP_QAT_HW_AUTH_ALGO_SHA512:
4359+ if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
4360+ /* Plain SHA-512 */
4361+ rte_memcpy(cdesc->cd_cur_ptr, sha512InitialState,
4362+ sizeof(sha512InitialState));
4363+ state1_size = qat_hash_get_state1_size(
4364+ cdesc->qat_hash_alg);
4365+ break;
4366+ }
4367+ /* SHA-512 HMAC */
4368 if (qat_sym_do_precomputes(ICP_QAT_HW_AUTH_ALGO_SHA512, authkey,
4369 authkeylen, cdesc->cd_cur_ptr, &state1_size,
4370 cdesc->aes_cmac)) {
4371@@ -1700,7 +1799,7 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4372 memcpy(cipherconfig->key, authkey, authkeylen);
4373 memset(cipherconfig->key + authkeylen,
4374 0, ICP_QAT_HW_SNOW_3G_UEA2_IV_SZ);
4375- cdesc->cd_cur_ptr += sizeof(struct icp_qat_hw_cipher_config) +
4376+ cd_extra_size += sizeof(struct icp_qat_hw_cipher_config) +
4377 authkeylen + ICP_QAT_HW_SNOW_3G_UEA2_IV_SZ;
4378 auth_param->hash_state_sz = ICP_QAT_HW_SNOW_3G_UEA2_IV_SZ >> 3;
4379 break;
4380@@ -1716,8 +1815,7 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4381 + ICP_QAT_HW_ZUC_3G_EEA3_IV_SZ);
4382
4383 memcpy(cdesc->cd_cur_ptr + state1_size, authkey, authkeylen);
4384- cdesc->cd_cur_ptr += state1_size + state2_size
4385- + ICP_QAT_HW_ZUC_3G_EEA3_IV_SZ;
4386+ cd_extra_size += ICP_QAT_HW_ZUC_3G_EEA3_IV_SZ;
4387 auth_param->hash_state_sz = ICP_QAT_HW_ZUC_3G_EEA3_IV_SZ >> 3;
4388 cdesc->min_qat_dev_gen = QAT_GEN2;
4389
4390@@ -1803,7 +1901,7 @@ int qat_sym_session_aead_create_cd_auth(struct qat_sym_session *cdesc,
4391 RTE_ALIGN_CEIL(hash_cd_ctrl->inner_state1_sz, 8))
4392 >> 3);
4393
4394- cdesc->cd_cur_ptr += state1_size + state2_size;
4395+ cdesc->cd_cur_ptr += state1_size + state2_size + cd_extra_size;
4396 cd_size = cdesc->cd_cur_ptr-(uint8_t *)&cdesc->cd;
4397
4398 cd_pars->u.s.content_desc_addr = cdesc->cd_paddr;
4399diff --git a/drivers/crypto/qat/qat_sym_session.h b/drivers/crypto/qat/qat_sym_session.h
4400index 98985d6..bcab5b2 100644
4401--- a/drivers/crypto/qat/qat_sym_session.h
4402+++ b/drivers/crypto/qat/qat_sym_session.h
4403@@ -62,6 +62,7 @@ struct qat_sym_session {
4404 enum icp_qat_hw_cipher_mode qat_mode;
4405 enum icp_qat_hw_auth_algo qat_hash_alg;
4406 enum icp_qat_hw_auth_op auth_op;
4407+ enum icp_qat_hw_auth_mode auth_mode;
4408 void *bpi_ctx;
4409 struct qat_sym_cd cd;
4410 uint8_t *cd_cur_ptr;
4411diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g/rte_snow3g_pmd.c
4412index 9d07e1a..2b1b90b 100644
4413--- a/drivers/crypto/snow3g/rte_snow3g_pmd.c
4414+++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c
4415@@ -16,6 +16,7 @@
4416 #define SNOW3G_MAX_BURST 8
4417 #define BYTE_LEN 8
4418
4419+int snow3g_logtype_driver;
4420 static uint8_t cryptodev_driver_id;
4421
4422 /** Get xform chain order. */
4423diff --git a/drivers/crypto/snow3g/snow3g_pmd_private.h b/drivers/crypto/snow3g/snow3g_pmd_private.h
4424index 1fe05eb..1070800 100644
4425--- a/drivers/crypto/snow3g/snow3g_pmd_private.h
4426+++ b/drivers/crypto/snow3g/snow3g_pmd_private.h
4427@@ -11,7 +11,7 @@
4428 /**< SNOW 3G PMD device name */
4429
4430 /** SNOW 3G PMD LOGTYPE DRIVER */
4431-int snow3g_logtype_driver;
4432+extern int snow3g_logtype_driver;
4433
4434 #define SNOW3G_LOG(level, fmt, ...) \
4435 rte_log(RTE_LOG_ ## level, snow3g_logtype_driver, \
4436diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_pmd.c
4437index 8e214cd..265aaba 100644
4438--- a/drivers/crypto/zuc/rte_zuc_pmd.c
4439+++ b/drivers/crypto/zuc/rte_zuc_pmd.c
4440@@ -14,6 +14,7 @@
4441 #define ZUC_MAX_BURST 4
4442 #define BYTE_LEN 8
4443
4444+int zuc_logtype_driver;
4445 static uint8_t cryptodev_driver_id;
4446
4447 /** Get xform chain order. */
4448diff --git a/drivers/crypto/zuc/zuc_pmd_private.h b/drivers/crypto/zuc/zuc_pmd_private.h
4449index 428efd4..dc492b1 100644
4450--- a/drivers/crypto/zuc/zuc_pmd_private.h
4451+++ b/drivers/crypto/zuc/zuc_pmd_private.h
4452@@ -8,10 +8,10 @@
4453 #include <sso_zuc.h>
4454
4455 #define CRYPTODEV_NAME_ZUC_PMD crypto_zuc
4456-/**< KASUMI PMD device name */
4457+/**< ZUC PMD device name */
4458
4459 /** ZUC PMD LOGTYPE DRIVER */
4460-int zuc_logtype_driver;
4461+extern int zuc_logtype_driver;
4462 #define ZUC_LOG(level, fmt, ...) \
4463 rte_log(RTE_LOG_ ## level, zuc_logtype_driver, \
4464 "%s()... line %u: " fmt "\n", __func__, __LINE__, \
4465diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c
4466index 1833d65..2be6e12 100644
4467--- a/drivers/event/dpaa2/dpaa2_eventdev.c
4468+++ b/drivers/event/dpaa2/dpaa2_eventdev.c
4469@@ -391,7 +391,7 @@ dpaa2_eventdev_info_get(struct rte_eventdev *dev,
4470 dev_info->max_event_priority_levels =
4471 DPAA2_EVENT_MAX_EVENT_PRIORITY_LEVELS;
4472 dev_info->max_event_ports = rte_fslmc_get_device_count(DPAA2_IO);
4473- /* we only support dpio upto number of cores*/
4474+ /* we only support dpio up to number of cores */
4475 if (dev_info->max_event_ports > rte_lcore_count())
4476 dev_info->max_event_ports = rte_lcore_count();
4477 dev_info->max_event_port_dequeue_depth =
4478diff --git a/drivers/event/dsw/dsw_event.c b/drivers/event/dsw/dsw_event.c
4479index eae53b2..0df9209 100644
4480--- a/drivers/event/dsw/dsw_event.c
4481+++ b/drivers/event/dsw/dsw_event.c
4482@@ -658,6 +658,9 @@ dsw_port_consider_migration(struct dsw_evdev *dsw,
4483 if (dsw->num_ports == 1)
4484 return;
4485
4486+ if (seen_events_len < DSW_MAX_EVENTS_RECORDED)
4487+ return;
4488+
4489 DSW_LOG_DP_PORT(DEBUG, source_port->id, "Considering migration.\n");
4490
4491 /* Randomize interval to avoid having all threads considering
4492@@ -930,11 +933,6 @@ dsw_port_ctl_process(struct dsw_evdev *dsw, struct dsw_port *port)
4493 {
4494 struct dsw_ctl_msg msg;
4495
4496- /* So any table loads happens before the ring dequeue, in the
4497- * case of a 'paus' message.
4498- */
4499- rte_smp_rmb();
4500-
4501 if (dsw_port_ctl_dequeue(port, &msg) == 0) {
4502 switch (msg.type) {
4503 case DSW_CTL_PAUS_REQ:
4504@@ -1099,7 +1097,7 @@ dsw_event_enqueue_burst_generic(struct dsw_port *source_port,
4505 DSW_LOG_DP_PORT(DEBUG, source_port->id, "%d non-release events "
4506 "accepted.\n", num_non_release);
4507
4508- return num_non_release;
4509+ return (num_non_release + num_release);
4510 }
4511
4512 uint16_t
4513@@ -1194,11 +1192,6 @@ static uint16_t
4514 dsw_port_dequeue_burst(struct dsw_port *port, struct rte_event *events,
4515 uint16_t num)
4516 {
4517- struct dsw_port *source_port = port;
4518- struct dsw_evdev *dsw = source_port->dsw;
4519-
4520- dsw_port_ctl_process(dsw, source_port);
4521-
4522 if (unlikely(port->in_buffer_len > 0)) {
4523 uint16_t dequeued = RTE_MIN(num, port->in_buffer_len);
4524
4525diff --git a/drivers/event/octeontx2/otx2_evdev_adptr.c b/drivers/event/octeontx2/otx2_evdev_adptr.c
4526index 233cba2..8bdcfa3 100644
4527--- a/drivers/event/octeontx2/otx2_evdev_adptr.c
4528+++ b/drivers/event/octeontx2/otx2_evdev_adptr.c
4529@@ -133,7 +133,7 @@ sso_rxq_disable(struct otx2_eth_dev *dev, uint16_t qid)
4530 aq = otx2_mbox_alloc_msg_nix_aq_enq(mbox);
4531 aq->qidx = qid;
4532 aq->ctype = NIX_AQ_CTYPE_CQ;
4533- aq->op = NIX_AQ_INSTOP_INIT;
4534+ aq->op = NIX_AQ_INSTOP_WRITE;
4535
4536 aq->cq.ena = 1;
4537 aq->cq.caching = 1;
4538@@ -144,7 +144,7 @@ sso_rxq_disable(struct otx2_eth_dev *dev, uint16_t qid)
4539
4540 rc = otx2_mbox_process(mbox);
4541 if (rc < 0) {
4542- otx2_err("Failed to init cq context");
4543+ otx2_err("Failed to enable cq context");
4544 goto fail;
4545 }
4546
4547diff --git a/drivers/event/octeontx2/otx2_evdev_stats.h b/drivers/event/octeontx2/otx2_evdev_stats.h
4548index 9d7c694..74fcec8 100644
4549--- a/drivers/event/octeontx2/otx2_evdev_stats.h
4550+++ b/drivers/event/octeontx2/otx2_evdev_stats.h
4551@@ -67,7 +67,7 @@ otx2_sso_xstats_get(const struct rte_eventdev *event_dev,
4552
4553 switch (mode) {
4554 case RTE_EVENT_DEV_XSTATS_DEVICE:
4555- break;
4556+ return 0;
4557 case RTE_EVENT_DEV_XSTATS_PORT:
4558 if (queue_port_id >= (signed int)dev->nb_event_ports)
4559 goto invalid_value;
4560diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
4561index d79fc31..a4fe684 100644
4562--- a/drivers/mempool/dpaa2/meson.build
4563+++ b/drivers/mempool/dpaa2/meson.build
4564@@ -9,5 +9,7 @@ endif
4565 deps += ['bus_fslmc']
4566 sources = files('dpaa2_hw_mempool.c')
4567
4568+install_headers('rte_dpaa2_mempool.h')
4569+
4570 # depends on fslmc bus which uses experimental API
4571 allow_experimental_apis = true
4572diff --git a/drivers/mempool/octeontx2/otx2_mempool_ops.c b/drivers/mempool/octeontx2/otx2_mempool_ops.c
4573index ea4b1c4..18bdb0b 100644
4574--- a/drivers/mempool/octeontx2/otx2_mempool_ops.c
4575+++ b/drivers/mempool/octeontx2/otx2_mempool_ops.c
4576@@ -637,10 +637,10 @@ static int
4577 otx2_npa_alloc(struct rte_mempool *mp)
4578 {
4579 uint32_t block_size, block_count;
4580+ uint64_t aura_handle = 0;
4581 struct otx2_npa_lf *lf;
4582 struct npa_aura_s aura;
4583 struct npa_pool_s pool;
4584- uint64_t aura_handle;
4585 int rc;
4586
4587 lf = otx2_npa_lf_obj_get();
4588diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c
4589index cd747b6..1abe96c 100644
4590--- a/drivers/net/avp/avp_ethdev.c
4591+++ b/drivers/net/avp/avp_ethdev.c
4592@@ -1694,7 +1694,7 @@ avp_xmit_scattered_pkts(void *tx_queue,
4593 uint16_t nb_pkts)
4594 {
4595 struct rte_avp_desc *avp_bufs[(AVP_MAX_TX_BURST *
4596- RTE_AVP_MAX_MBUF_SEGMENTS)];
4597+ RTE_AVP_MAX_MBUF_SEGMENTS)] = {};
4598 struct avp_queue *txq = (struct avp_queue *)tx_queue;
4599 struct rte_avp_desc *tx_bufs[AVP_MAX_TX_BURST];
4600 struct avp_dev *avp = txq->avp;
4601diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
4602index 93735a2..404d58a 100644
4603--- a/drivers/net/bnxt/bnxt.h
4604+++ b/drivers/net/bnxt/bnxt.h
4605@@ -470,6 +470,11 @@ struct bnxt_error_recovery_info {
4606 uint32_t last_reset_counter;
4607 };
4608
4609+/* Frequency for the FUNC_DRV_IF_CHANGE retry in milliseconds */
4610+#define BNXT_IF_CHANGE_RETRY_INTERVAL 50
4611+/* Maximum retry count for FUNC_DRV_IF_CHANGE */
4612+#define BNXT_IF_CHANGE_RETRY_COUNT 40
4613+
4614 /* address space location of register */
4615 #define BNXT_FW_STATUS_REG_TYPE_MASK 3
4616 /* register is located in PCIe config space */
4617@@ -494,7 +499,6 @@ struct bnxt {
4618 void *bar0;
4619
4620 struct rte_eth_dev *eth_dev;
4621- struct rte_eth_rss_conf rss_conf;
4622 struct rte_pci_device *pdev;
4623 void *doorbell_base;
4624
4625@@ -523,6 +527,7 @@ struct bnxt {
4626 #define BNXT_FLAG_FW_CAP_ONE_STEP_TX_TS BIT(22)
4627 #define BNXT_FLAG_ADV_FLOW_MGMT BIT(23)
4628 #define BNXT_FLAG_NPAR_PF BIT(24)
4629+#define BNXT_FLAG_DFLT_MAC_SET BIT(26)
4630 #define BNXT_PF(bp) (!((bp)->flags & BNXT_FLAG_VF))
4631 #define BNXT_VF(bp) ((bp)->flags & BNXT_FLAG_VF)
4632 #define BNXT_NPAR(bp) ((bp)->flags & BNXT_FLAG_NPAR_PF)
4633@@ -535,6 +540,7 @@ struct bnxt {
4634 #define BNXT_STINGRAY(bp) ((bp)->flags & BNXT_FLAG_STINGRAY)
4635 #define BNXT_HAS_NQ(bp) BNXT_CHIP_THOR(bp)
4636 #define BNXT_HAS_RING_GRPS(bp) (!BNXT_CHIP_THOR(bp))
4637+#define BNXT_HAS_DFLT_MAC_SET(bp) ((bp)->flags & BNXT_FLAG_DFLT_MAC_SET)
4638
4639 uint32_t fw_cap;
4640 #define BNXT_FW_CAP_HOT_RESET BIT(0)
4641@@ -617,7 +623,6 @@ struct bnxt {
4642 uint8_t max_q;
4643
4644 uint16_t fw_fid;
4645- uint8_t dflt_mac_addr[RTE_ETHER_ADDR_LEN];
4646 uint16_t max_rsscos_ctx;
4647 uint16_t max_cp_rings;
4648 uint16_t max_tx_rings;
4649@@ -625,10 +630,10 @@ struct bnxt {
4650 #define MAX_STINGRAY_RINGS 128U
4651 /* For sake of symmetry, max Tx rings == max Rx rings, one stat ctx for each */
4652 #define BNXT_MAX_RX_RINGS(bp) \
4653- (BNXT_STINGRAY(bp) ? RTE_MIN(RTE_MIN(bp->max_rx_rings, \
4654+ (BNXT_STINGRAY(bp) ? RTE_MIN(RTE_MIN(bp->max_rx_rings / 2U, \
4655 MAX_STINGRAY_RINGS), \
4656 bp->max_stat_ctx / 2U) : \
4657- RTE_MIN(bp->max_rx_rings, \
4658+ RTE_MIN(bp->max_rx_rings / 2U, \
4659 bp->max_stat_ctx / 2U))
4660 #define BNXT_MAX_TX_RINGS(bp) \
4661 (RTE_MIN((bp)->max_tx_rings, BNXT_MAX_RX_RINGS(bp)))
4662diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
4663index dedb012..f1bd575 100644
4664--- a/drivers/net/bnxt/bnxt_ethdev.c
4665+++ b/drivers/net/bnxt/bnxt_ethdev.c
4666@@ -833,7 +833,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
4667 struct bnxt *bp = eth_dev->data->dev_private;
4668 uint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads;
4669 int vlan_mask = 0;
4670- int rc;
4671+ int rc, retry_cnt = BNXT_IF_CHANGE_RETRY_COUNT;
4672
4673 if (!eth_dev->data->nb_tx_queues || !eth_dev->data->nb_rx_queues) {
4674 PMD_DRV_LOG(ERR, "Queues are not configured yet!\n");
4675@@ -846,14 +846,23 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
4676 bp->rx_cp_nr_rings, RTE_ETHDEV_QUEUE_STAT_CNTRS);
4677 }
4678
4679- rc = bnxt_hwrm_if_change(bp, 1);
4680- if (!rc) {
4681- if (bp->flags & BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE) {
4682- rc = bnxt_handle_if_change_status(bp);
4683- if (rc)
4684- return rc;
4685- }
4686+ do {
4687+ rc = bnxt_hwrm_if_change(bp, true);
4688+ if (rc == 0 || rc != -EAGAIN)
4689+ break;
4690+
4691+ rte_delay_ms(BNXT_IF_CHANGE_RETRY_INTERVAL);
4692+ } while (retry_cnt--);
4693+
4694+ if (rc)
4695+ return rc;
4696+
4697+ if (bp->flags & BNXT_FLAG_IF_CHANGE_HOT_FW_RESET_DONE) {
4698+ rc = bnxt_handle_if_change_status(bp);
4699+ if (rc)
4700+ return rc;
4701 }
4702+
4703 bnxt_enable_int(bp);
4704
4705 rc = bnxt_init_chip(bp);
4706@@ -882,10 +891,10 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
4707 return 0;
4708
4709 error:
4710- bnxt_hwrm_if_change(bp, 0);
4711 bnxt_shutdown_nic(bp);
4712 bnxt_free_tx_mbufs(bp);
4713 bnxt_free_rx_mbufs(bp);
4714+ bnxt_hwrm_if_change(bp, false);
4715 eth_dev->data->dev_started = 0;
4716 return rc;
4717 }
4718@@ -956,7 +965,7 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
4719 /* Process any remaining notifications in default completion queue */
4720 bnxt_int_handler(eth_dev);
4721 bnxt_shutdown_nic(bp);
4722- bnxt_hwrm_if_change(bp, 0);
4723+ bnxt_hwrm_if_change(bp, false);
4724 bp->rx_cosq_cnt = 0;
4725 }
4726
4727@@ -1431,7 +1440,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,
4728 }
4729
4730 bp->flags |= BNXT_FLAG_UPDATE_HASH;
4731- memcpy(&bp->rss_conf, rss_conf, sizeof(*rss_conf));
4732+ memcpy(&eth_dev->data->dev_conf.rx_adv_conf.rss_conf,
4733+ rss_conf,
4734+ sizeof(*rss_conf));
4735
4736 /* Update the default RSS VNIC(s) */
4737 vnic = &bp->vnic_info[0];
4738@@ -1508,7 +1519,7 @@ static int bnxt_rss_hash_conf_get_op(struct rte_eth_dev *eth_dev,
4739 }
4740 if (hash_types) {
4741 PMD_DRV_LOG(ERR,
4742- "Unknwon RSS config from firmware (%08x), RSS disabled",
4743+ "Unknown RSS config from firmware (%08x), RSS disabled",
4744 vnic->hash_type);
4745 return -ENOTSUP;
4746 }
4747@@ -1840,6 +1851,11 @@ static int bnxt_vlan_filter_set_op(struct rte_eth_dev *eth_dev,
4748 if (rc)
4749 return rc;
4750
4751+ if (!eth_dev->data->dev_started) {
4752+ PMD_DRV_LOG(ERR, "port must be started before setting vlan\n");
4753+ return -EINVAL;
4754+ }
4755+
4756 /* These operations apply to ALL existing MAC/VLAN filters */
4757 if (on)
4758 return bnxt_add_vlan_filter(bp, vlan_id);
4759@@ -1926,6 +1942,8 @@ static int bnxt_free_one_vnic(struct bnxt *bp, uint16_t vnic_id)
4760 rte_free(vnic->fw_grp_ids);
4761 vnic->fw_grp_ids = NULL;
4762
4763+ vnic->rx_queue_cnt = 0;
4764+
4765 return 0;
4766 }
4767
4768@@ -2155,10 +2173,11 @@ bnxt_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size)
4769 uint8_t fw_major = (bp->fw_ver >> 24) & 0xff;
4770 uint8_t fw_minor = (bp->fw_ver >> 16) & 0xff;
4771 uint8_t fw_updt = (bp->fw_ver >> 8) & 0xff;
4772+ uint8_t fw_rsvd = bp->fw_ver & 0xff;
4773 int ret;
4774
4775- ret = snprintf(fw_version, fw_size, "%d.%d.%d",
4776- fw_major, fw_minor, fw_updt);
4777+ ret = snprintf(fw_version, fw_size, "%d.%d.%d.%d",
4778+ fw_major, fw_minor, fw_updt, fw_rsvd);
4779
4780 ret += 1; /* add the size of '\0' */
4781 if (fw_size < (uint32_t)ret)
4782@@ -4592,7 +4611,7 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
4783 return -ENOMEM;
4784 }
4785
4786- if (bnxt_check_zero_bytes(bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN)) {
4787+ if (!BNXT_HAS_DFLT_MAC_SET(bp)) {
4788 if (BNXT_PF(bp))
4789 return -EINVAL;
4790
4791@@ -4605,14 +4624,11 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
4792 bp->mac_addr[3], bp->mac_addr[4], bp->mac_addr[5]);
4793
4794 rc = bnxt_hwrm_set_mac(bp);
4795- if (!rc)
4796- memcpy(&bp->eth_dev->data->mac_addrs[0], bp->mac_addr,
4797- RTE_ETHER_ADDR_LEN);
4798- return rc;
4799+ if (rc)
4800+ return rc;
4801 }
4802
4803 /* Copy the permanent MAC from the FUNC_QCAPS response */
4804- memcpy(bp->mac_addr, bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN);
4805 memcpy(&eth_dev->data->mac_addrs[0], bp->mac_addr, RTE_ETHER_ADDR_LEN);
4806
4807 return rc;
4808@@ -4623,7 +4639,7 @@ static int bnxt_restore_dflt_mac(struct bnxt *bp)
4809 int rc = 0;
4810
4811 /* MAC is already configured in FW */
4812- if (!bnxt_check_zero_bytes(bp->dflt_mac_addr, RTE_ETHER_ADDR_LEN))
4813+ if (BNXT_HAS_DFLT_MAC_SET(bp))
4814 return 0;
4815
4816 /* Restore the old MAC configured */
4817diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
4818index 7408412..33f352f 100644
4819--- a/drivers/net/bnxt/bnxt_hwrm.c
4820+++ b/drivers/net/bnxt/bnxt_hwrm.c
4821@@ -164,8 +164,9 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
4822 rte_cpu_to_le_16(req->req_type) == HWRM_VER_GET)
4823 return -ETIMEDOUT;
4824
4825- PMD_DRV_LOG(ERR, "Error(timeout) sending msg 0x%04x\n",
4826- req->req_type);
4827+ PMD_DRV_LOG(ERR,
4828+ "Error(timeout) sending msg 0x%04x, seq_id %d\n",
4829+ req->req_type, req->seq_id);
4830 return -ETIMEDOUT;
4831 }
4832 return 0;
4833@@ -221,6 +222,8 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
4834 rc = -EINVAL; \
4835 else if (rc == HWRM_ERR_CODE_CMD_NOT_SUPPORTED) \
4836 rc = -ENOTSUP; \
4837+ else if (rc == HWRM_ERR_CODE_HOT_RESET_PROGRESS) \
4838+ rc = -EAGAIN; \
4839 else if (rc > 0) \
4840 rc = -EIO; \
4841 return rc; \
4842@@ -249,6 +252,8 @@ static int bnxt_hwrm_send_message(struct bnxt *bp, void *msg,
4843 rc = -EINVAL; \
4844 else if (rc == HWRM_ERR_CODE_CMD_NOT_SUPPORTED) \
4845 rc = -ENOTSUP; \
4846+ else if (rc == HWRM_ERR_CODE_HOT_RESET_PROGRESS) \
4847+ rc = -EAGAIN; \
4848 else if (rc > 0) \
4849 rc = -EIO; \
4850 return rc; \
4851@@ -641,7 +646,12 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
4852 }
4853
4854 bp->fw_fid = rte_le_to_cpu_32(resp->fid);
4855- memcpy(bp->dflt_mac_addr, &resp->mac_address, RTE_ETHER_ADDR_LEN);
4856+ if (!bnxt_check_zero_bytes(resp->mac_address, RTE_ETHER_ADDR_LEN)) {
4857+ bp->flags |= BNXT_FLAG_DFLT_MAC_SET;
4858+ memcpy(bp->mac_addr, &resp->mac_address, RTE_ETHER_ADDR_LEN);
4859+ } else {
4860+ bp->flags &= ~BNXT_FLAG_DFLT_MAC_SET;
4861+ }
4862 bp->max_rsscos_ctx = rte_le_to_cpu_16(resp->max_rsscos_ctx);
4863 bp->max_cp_rings = rte_le_to_cpu_16(resp->max_cmpl_rings);
4864 bp->max_tx_rings = rte_le_to_cpu_16(resp->max_tx_rings);
4865@@ -2366,13 +2376,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
4866 if (BNXT_HAS_RING_GRPS(bp))
4867 bp->grp_info[queue_index].rx_fw_ring_id =
4868 INVALID_HW_RING_ID;
4869- memset(rxr->rx_desc_ring, 0,
4870- rxr->rx_ring_struct->ring_size *
4871- sizeof(*rxr->rx_desc_ring));
4872- memset(rxr->rx_buf_ring, 0,
4873- rxr->rx_ring_struct->ring_size *
4874- sizeof(*rxr->rx_buf_ring));
4875- rxr->rx_prod = 0;
4876 }
4877 ring = rxr->ag_ring_struct;
4878 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
4879@@ -2380,11 +2383,6 @@ void bnxt_free_hwrm_rx_ring(struct bnxt *bp, int queue_index)
4880 BNXT_CHIP_THOR(bp) ?
4881 HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG :
4882 HWRM_RING_FREE_INPUT_RING_TYPE_RX);
4883- ring->fw_ring_id = INVALID_HW_RING_ID;
4884- memset(rxr->ag_buf_ring, 0,
4885- rxr->ag_ring_struct->ring_size *
4886- sizeof(*rxr->ag_buf_ring));
4887- rxr->ag_prod = 0;
4888 if (BNXT_HAS_RING_GRPS(bp))
4889 bp->grp_info[queue_index].ag_fw_ring_id =
4890 INVALID_HW_RING_ID;
4891@@ -4868,7 +4866,6 @@ int bnxt_hwrm_set_mac(struct bnxt *bp)
4892
4893 HWRM_CHECK_RESULT();
4894
4895- memcpy(bp->dflt_mac_addr, bp->mac_addr, RTE_ETHER_ADDR_LEN);
4896 HWRM_UNLOCK();
4897
4898 return rc;
4899diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
4900index d6e4e8a..1999cd7 100644
4901--- a/drivers/net/bnxt/bnxt_ring.c
4902+++ b/drivers/net/bnxt/bnxt_ring.c
4903@@ -598,7 +598,7 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
4904
4905 if (rxq->rx_started) {
4906 if (bnxt_init_one_rx_ring(rxq)) {
4907- RTE_LOG(ERR, PMD,
4908+ PMD_DRV_LOG(ERR,
4909 "bnxt_init_one_rx_ring failed!\n");
4910 bnxt_rx_queue_release_op(rxq);
4911 rc = -ENOMEM;
4912diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
4913index 457ebed..e42308a 100644
4914--- a/drivers/net/bnxt/bnxt_rxq.c
4915+++ b/drivers/net/bnxt/bnxt_rxq.c
4916@@ -168,10 +168,8 @@ out:
4917 if (dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG) {
4918 struct rte_eth_rss_conf *rss = &dev_conf->rx_adv_conf.rss_conf;
4919
4920- if (bp->flags & BNXT_FLAG_UPDATE_HASH) {
4921- rss = &bp->rss_conf;
4922+ if (bp->flags & BNXT_FLAG_UPDATE_HASH)
4923 bp->flags &= ~BNXT_FLAG_UPDATE_HASH;
4924- }
4925
4926 for (i = 0; i < bp->nr_vnics; i++) {
4927 vnic = &bp->vnic_info[i];
4928diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
4929index 7338a81..fa3b4a6 100644
4930--- a/drivers/net/bnxt/bnxt_rxr.c
4931+++ b/drivers/net/bnxt/bnxt_rxr.c
4932@@ -853,11 +853,13 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)
4933
4934 prod = rxr->rx_prod;
4935 for (i = 0; i < ring->ring_size; i++) {
4936- if (bnxt_alloc_rx_data(rxq, rxr, prod) != 0) {
4937- PMD_DRV_LOG(WARNING,
4938- "init'ed rx ring %d with %d/%d mbufs only\n",
4939- rxq->queue_id, i, ring->ring_size);
4940- break;
4941+ if (unlikely(!rxr->rx_buf_ring[i].mbuf)) {
4942+ if (bnxt_alloc_rx_data(rxq, rxr, prod) != 0) {
4943+ PMD_DRV_LOG(WARNING,
4944+ "init'ed rx ring %d with %d/%d mbufs only\n",
4945+ rxq->queue_id, i, ring->ring_size);
4946+ break;
4947+ }
4948 }
4949 rxr->rx_prod = prod;
4950 prod = RING_NEXT(rxr->rx_ring_struct, prod);
4951@@ -869,11 +871,13 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)
4952 prod = rxr->ag_prod;
4953
4954 for (i = 0; i < ring->ring_size; i++) {
4955- if (bnxt_alloc_ag_data(rxq, rxr, prod) != 0) {
4956- PMD_DRV_LOG(WARNING,
4957- "init'ed AG ring %d with %d/%d mbufs only\n",
4958- rxq->queue_id, i, ring->ring_size);
4959- break;
4960+ if (unlikely(!rxr->ag_buf_ring[i].mbuf)) {
4961+ if (bnxt_alloc_ag_data(rxq, rxr, prod) != 0) {
4962+ PMD_DRV_LOG(WARNING,
4963+ "init'ed AG ring %d with %d/%d mbufs only\n",
4964+ rxq->queue_id, i, ring->ring_size);
4965+ break;
4966+ }
4967 }
4968 rxr->ag_prod = prod;
4969 prod = RING_NEXT(rxr->ag_ring_struct, prod);
4970@@ -884,11 +888,13 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)
4971 unsigned int max_aggs = BNXT_TPA_MAX_AGGS(rxq->bp);
4972
4973 for (i = 0; i < max_aggs; i++) {
4974- rxr->tpa_info[i].mbuf =
4975- __bnxt_alloc_rx_data(rxq->mb_pool);
4976- if (!rxr->tpa_info[i].mbuf) {
4977- rte_atomic64_inc(&rxq->rx_mbuf_alloc_fail);
4978- return -ENOMEM;
4979+ if (unlikely(!rxr->tpa_info[i].mbuf)) {
4980+ rxr->tpa_info[i].mbuf =
4981+ __bnxt_alloc_rx_data(rxq->mb_pool);
4982+ if (!rxr->tpa_info[i].mbuf) {
4983+ rte_atomic64_inc(&rxq->rx_mbuf_alloc_fail);
4984+ return -ENOMEM;
4985+ }
4986 }
4987 }
4988 }
4989diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
4990index 3145730..8b4c396 100644
4991--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
4992+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
4993@@ -233,8 +233,13 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
4994 /* Return no more than RTE_BNXT_MAX_RX_BURST per call. */
4995 nb_pkts = RTE_MIN(nb_pkts, RTE_BNXT_MAX_RX_BURST);
4996
4997- /* Make nb_pkts an integer multiple of RTE_BNXT_DESCS_PER_LOOP */
4998+ /*
4999+ * Make nb_pkts an integer multiple of RTE_BNXT_DESCS_PER_LOOP.
5000+ * nb_pkts < RTE_BNXT_DESCS_PER_LOOP, just return no packet
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches