summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.ci/linux-build.sh9
-rw-r--r--.gitignore3
-rw-r--r--.travis.yml12
-rw-r--r--ABI_VERSION1
-rw-r--r--MAINTAINERS18
-rw-r--r--Makefile1
-rw-r--r--VERSION2
-rw-r--r--app/test-crypto-perf/cperf_ops.c117
-rw-r--r--app/test-crypto-perf/cperf_options.h15
-rw-r--r--app/test-crypto-perf/cperf_options_parsing.c73
-rw-r--r--app/test-crypto-perf/cperf_test_common.c1
-rw-r--r--app/test-crypto-perf/cperf_test_throughput.c24
-rw-r--r--app/test-crypto-perf/cperf_test_vectors.c55
-rw-r--r--app/test-crypto-perf/cperf_test_verify.c14
-rw-r--r--app/test-crypto-perf/main.c3
-rw-r--r--app/test-crypto-perf/meson.build2
-rw-r--r--app/test-eventdev/test_perf_common.c10
-rw-r--r--app/test-eventdev/test_pipeline_common.c17
-rw-r--r--app/test-pmd/cmdline.c54
-rw-r--r--app/test-pmd/config.c88
-rw-r--r--app/test-pmd/parameters.c7
-rw-r--r--app/test-pmd/testpmd.c10
-rw-r--r--app/test-pmd/testpmd.h19
-rw-r--r--app/test-pmd/txonly.c2
-rw-r--r--app/test/meson.build1
-rw-r--r--app/test/test_cfgfile.c32
-rw-r--r--app/test/test_cryptodev_aes_test_vectors.h2
-rw-r--r--app/test/test_event_crypto_adapter.c29
-rw-r--r--app/test/test_rcu_qsbr.c7
-rw-r--r--app/test/test_rib6.c1
-rw-r--r--app/test/test_service_cores.c2
-rw-r--r--app/test/test_thash.c33
-rwxr-xr-xbuildtools/check-experimental-syms.sh6
-rw-r--r--buildtools/meson.build3
-rw-r--r--config/arm/arm64_armada_linux_gcc1
-rw-r--r--config/arm/arm64_armv8_linux_gcc1
-rw-r--r--config/arm/arm64_bluefield_linux_gcc1
-rw-r--r--config/arm/arm64_dpaa_linux_gcc1
-rw-r--r--config/arm/arm64_emag_linux_gcc16
-rw-r--r--config/arm/arm64_n1sdp_linux_gcc17
-rw-r--r--config/arm/arm64_octeontx2_linux_gcc1
-rw-r--r--config/arm/arm64_thunderx2_linux_gcc1
-rw-r--r--config/arm/arm64_thunderx_linux_gcc1
-rw-r--r--config/arm/meson.build21
-rw-r--r--config/common_base5
l---------config/defconfig_arm64-emag-linux-gcc1
-rw-r--r--config/defconfig_arm64-emag-linuxapp-gcc11
l---------config/defconfig_arm64-n1sdp-linux-gcc1
-rw-r--r--config/defconfig_arm64-n1sdp-linuxapp-gcc14
-rw-r--r--config/meson.build7
-rwxr-xr-xdevtools/check-abi-version.sh54
-rwxr-xr-xdevtools/check-git-log.sh18
-rwxr-xr-xdevtools/test-build.sh17
-rwxr-xr-xdevtools/test-meson-builds.sh29
-rwxr-xr-xdevtools/test-null.sh6
-rwxr-xr-xdevtools/update-abi.sh46
-rwxr-xr-xdevtools/update_version_map_abi.py175
-rw-r--r--doc/guides/contributing/abi_versioning.rst17
-rw-r--r--doc/guides/contributing/coding_style.rst8
-rw-r--r--doc/guides/contributing/patches.rst20
-rw-r--r--doc/guides/cryptodevs/ccp.rst32
-rw-r--r--doc/guides/cryptodevs/features/openssl.ini1
-rw-r--r--doc/guides/cryptodevs/mvsam.rst1
-rw-r--r--doc/guides/eventdevs/octeontx.rst7
-rw-r--r--doc/guides/freebsd_gsg/install_from_ports.rst62
-rw-r--r--doc/guides/linux_gsg/build_dpdk.rst139
-rw-r--r--doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst58
-rw-r--r--doc/guides/linux_gsg/sys_reqs.rst68
-rw-r--r--doc/guides/nics/avp.rst2
-rw-r--r--doc/guides/nics/features/bnxt.ini3
-rw-r--r--doc/guides/nics/ice.rst32
-rw-r--r--doc/guides/nics/kni.rst1
-rw-r--r--doc/guides/nics/mlx5.rst75
-rw-r--r--doc/guides/nics/octeontx.rst7
-rw-r--r--doc/guides/nics/qede.rst27
-rw-r--r--doc/guides/nics/tap.rst7
-rw-r--r--doc/guides/nics/vhost.rst31
-rw-r--r--doc/guides/nics/virtio.rst124
-rw-r--r--doc/guides/prog_guide/env_abstraction_layer.rst5
-rw-r--r--doc/guides/prog_guide/generic_segmentation_offload_lib.rst1
-rw-r--r--doc/guides/prog_guide/img/sched_hier_per_port.pngbin58973 -> 0 bytes
-rw-r--r--doc/guides/prog_guide/img/sched_hier_per_port.svg492
-rw-r--r--doc/guides/prog_guide/kernel_nic_interface.rst15
-rw-r--r--doc/guides/prog_guide/qos_framework.rst110
-rw-r--r--doc/guides/rel_notes/deprecation.rst22
-rw-r--r--doc/guides/rel_notes/index.rst1
-rw-r--r--doc/guides/rel_notes/release_16_07.rst1
-rw-r--r--doc/guides/rel_notes/release_19_11.rst487
-rw-r--r--doc/guides/rel_notes/release_20_02.rst139
-rw-r--r--doc/guides/sample_app_ug/flow_filtering.rst1
-rw-r--r--doc/guides/sample_app_ug/ip_pipeline.rst24
-rw-r--r--doc/guides/sample_app_ug/l2_forward_event.rst2
-rw-r--r--doc/guides/sample_app_ug/qos_scheduler.rst92
-rw-r--r--doc/guides/sample_app_ug/vm_power_management.rst23
-rw-r--r--doc/guides/testpmd_app_ug/testpmd_funcs.rst15
-rw-r--r--doc/guides/tools/cryptoperf.rst10
-rw-r--r--drivers/baseband/fpga_lte_fec/Makefile3
-rw-r--r--drivers/baseband/fpga_lte_fec/rte_pmd_bbdev_fpga_lte_fec_version.map8
-rw-r--r--drivers/baseband/null/Makefile3
-rw-r--r--drivers/baseband/null/rte_pmd_bbdev_null_version.map2
-rw-r--r--drivers/baseband/turbo_sw/Makefile3
-rw-r--r--drivers/baseband/turbo_sw/rte_pmd_bbdev_turbo_sw_version.map2
-rw-r--r--drivers/bus/dpaa/Makefile2
-rw-r--r--drivers/bus/dpaa/base/fman/fman.c2
-rw-r--r--drivers/bus/dpaa/base/fman/netcfg_layer.c2
-rw-r--r--drivers/bus/dpaa/meson.build2
-rw-r--r--drivers/bus/dpaa/rte_bus_dpaa_version.map111
-rw-r--r--drivers/bus/dpaa/rte_dpaa_bus.h2
-rw-r--r--drivers/bus/fslmc/Makefile3
-rw-r--r--drivers/bus/fslmc/mc/dpci.c1
-rw-r--r--drivers/bus/fslmc/mc/dpcon.c1
-rw-r--r--drivers/bus/fslmc/mc/fsl_dpci.h1
-rw-r--r--drivers/bus/fslmc/mc/fsl_dpcon.h1
-rw-r--r--drivers/bus/fslmc/meson.build2
-rw-r--r--drivers/bus/fslmc/portal/dpaa2_hw_dpio.c2
-rw-r--r--drivers/bus/fslmc/portal/dpaa2_hw_dpio.h2
-rw-r--r--drivers/bus/fslmc/portal/dpaa2_hw_pvt.h2
-rw-r--r--drivers/bus/fslmc/qbman/include/fsl_qbman_base.h2
-rw-r--r--drivers/bus/fslmc/qbman/qbman_portal.c2
-rw-r--r--drivers/bus/fslmc/qbman/qbman_portal.h2
-rw-r--r--drivers/bus/fslmc/qbman/qbman_sys.h2
-rw-r--r--drivers/bus/fslmc/rte_bus_fslmc_version.map152
-rw-r--r--drivers/bus/fslmc/rte_fslmc.h2
-rw-r--r--drivers/bus/ifpga/Makefile3
-rw-r--r--drivers/bus/ifpga/meson.build2
-rw-r--r--drivers/bus/ifpga/rte_bus_ifpga_version.map14
-rw-r--r--drivers/bus/pci/Makefile1
-rw-r--r--drivers/bus/pci/meson.build2
-rw-r--r--drivers/bus/pci/pci_common.c1
-rw-r--r--drivers/bus/pci/rte_bus_pci_version.map2
-rw-r--r--drivers/bus/vdev/Makefile3
-rw-r--r--drivers/bus/vdev/meson.build2
-rw-r--r--drivers/bus/vdev/rte_bus_vdev_version.map12
-rw-r--r--drivers/bus/vmbus/Makefile1
-rw-r--r--drivers/bus/vmbus/meson.build2
-rw-r--r--drivers/bus/vmbus/rte_bus_vmbus_version.map12
-rw-r--r--drivers/common/cpt/Makefile2
-rw-r--r--drivers/common/cpt/rte_common_cpt_version.map9
-rw-r--r--drivers/common/dpaax/Makefile3
-rw-r--r--drivers/common/dpaax/rte_common_dpaax_version.map14
-rw-r--r--drivers/common/mvep/Makefile3
-rw-r--r--drivers/common/mvep/rte_common_mvep_version.map6
-rw-r--r--drivers/common/octeontx/Makefile2
-rw-r--r--drivers/common/octeontx/octeontx_mbox.c112
-rw-r--r--drivers/common/octeontx/octeontx_mbox.h13
-rw-r--r--drivers/common/octeontx/rte_common_octeontx_version.map9
-rw-r--r--drivers/common/octeontx2/Makefile2
-rw-r--r--drivers/common/octeontx2/rte_common_octeontx2_version.map16
-rw-r--r--drivers/common/qat/Makefile2
-rw-r--r--drivers/compress/isal/Makefile3
-rw-r--r--drivers/compress/isal/rte_pmd_isal_version.map2
-rw-r--r--drivers/compress/octeontx/Makefile3
-rw-r--r--drivers/compress/octeontx/rte_pmd_octeontx_compress_version.map2
-rw-r--r--drivers/compress/qat/rte_pmd_qat_version.map2
-rw-r--r--drivers/compress/zlib/Makefile3
-rw-r--r--drivers/compress/zlib/rte_pmd_zlib_version.map2
-rw-r--r--drivers/crypto/aesni_gcm/Makefile3
-rw-r--r--drivers/crypto/aesni_gcm/rte_pmd_aesni_gcm_version.map2
-rw-r--r--drivers/crypto/aesni_mb/Makefile3
-rw-r--r--drivers/crypto/aesni_mb/rte_pmd_aesni_mb_version.map2
-rw-r--r--drivers/crypto/armv8/Makefile3
-rw-r--r--drivers/crypto/armv8/rte_pmd_armv8_version.map2
-rw-r--r--drivers/crypto/caam_jr/Makefile3
-rw-r--r--drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map3
-rw-r--r--drivers/crypto/ccp/Makefile3
-rw-r--r--drivers/crypto/ccp/ccp_crypto.c24
-rw-r--r--drivers/crypto/ccp/ccp_crypto.h7
-rw-r--r--drivers/crypto/ccp/ccp_dev.h2
-rw-r--r--drivers/crypto/ccp/ccp_pmd_ops.c28
-rw-r--r--drivers/crypto/ccp/ccp_pmd_private.h6
-rw-r--r--drivers/crypto/ccp/rte_ccp_pmd.c57
-rw-r--r--drivers/crypto/ccp/rte_pmd_ccp_version.map3
-rw-r--r--drivers/crypto/dpaa2_sec/Makefile3
-rw-r--r--drivers/crypto/dpaa2_sec/meson.build2
-rw-r--r--drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map10
-rw-r--r--drivers/crypto/dpaa_sec/Makefile3
-rw-r--r--drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map10
-rw-r--r--drivers/crypto/kasumi/Makefile3
-rw-r--r--drivers/crypto/kasumi/rte_pmd_kasumi_version.map2
-rw-r--r--drivers/crypto/mvsam/Makefile3
-rw-r--r--drivers/crypto/mvsam/rte_pmd_mvsam_version.map2
-rw-r--r--drivers/crypto/nitrox/Makefile3
-rw-r--r--drivers/crypto/nitrox/rte_pmd_nitrox_version.map2
-rw-r--r--drivers/crypto/null/Makefile3
-rw-r--r--drivers/crypto/null/rte_pmd_null_crypto_version.map2
-rw-r--r--drivers/crypto/octeontx/Makefile3
-rw-r--r--drivers/crypto/octeontx/rte_pmd_octeontx_crypto_version.map3
-rw-r--r--drivers/crypto/octeontx2/Makefile3
-rw-r--r--drivers/crypto/octeontx2/rte_pmd_octeontx2_crypto_version.map3
-rw-r--r--drivers/crypto/openssl/Makefile3
-rw-r--r--drivers/crypto/openssl/rte_openssl_pmd.c84
-rw-r--r--drivers/crypto/openssl/rte_pmd_openssl_version.map2
-rw-r--r--drivers/crypto/scheduler/Makefile3
-rw-r--r--drivers/crypto/scheduler/rte_pmd_crypto_scheduler_version.map19
-rw-r--r--drivers/crypto/snow3g/Makefile3
-rw-r--r--drivers/crypto/snow3g/rte_pmd_snow3g_version.map2
-rw-r--r--drivers/crypto/virtio/Makefile2
-rw-r--r--drivers/crypto/virtio/rte_pmd_virtio_crypto_version.map2
-rw-r--r--drivers/crypto/zuc/Makefile3
-rw-r--r--drivers/crypto/zuc/rte_pmd_zuc_version.map2
-rw-r--r--drivers/event/dpaa/Makefile2
-rw-r--r--drivers/event/dpaa/dpaa_eventdev.c2
-rw-r--r--drivers/event/dpaa/rte_pmd_dpaa_event_version.map3
-rw-r--r--drivers/event/dpaa2/Makefile4
-rw-r--r--drivers/event/dpaa2/meson.build2
-rw-r--r--drivers/event/dpaa2/rte_pmd_dpaa2_event_version.map2
-rw-r--r--drivers/event/dsw/Makefile2
-rw-r--r--drivers/event/dsw/rte_pmd_dsw_event_version.map2
-rw-r--r--drivers/event/octeontx/Makefile2
-rw-r--r--drivers/event/octeontx/rte_pmd_octeontx_event_version.map2
-rw-r--r--drivers/event/octeontx/ssovf_evdev.c5
-rw-r--r--drivers/event/octeontx/ssovf_probe.c7
-rw-r--r--drivers/event/octeontx/ssovf_worker.h17
-rw-r--r--drivers/event/octeontx/timvf_evdev.c12
-rw-r--r--drivers/event/octeontx/timvf_evdev.h8
-rw-r--r--drivers/event/octeontx/timvf_probe.c65
-rw-r--r--drivers/event/octeontx2/Makefile2
-rw-r--r--drivers/event/octeontx2/otx2_evdev.h6
-rw-r--r--drivers/event/octeontx2/otx2_evdev_adptr.c84
-rw-r--r--drivers/event/octeontx2/otx2_tim_evdev.c39
-rw-r--r--drivers/event/octeontx2/otx2_tim_evdev.h8
-rw-r--r--drivers/event/octeontx2/otx2_tim_worker.c19
-rw-r--r--drivers/event/octeontx2/otx2_tim_worker.h217
-rw-r--r--drivers/event/octeontx2/rte_pmd_octeontx2_event_version.map3
-rw-r--r--drivers/event/opdl/Makefile3
-rw-r--r--drivers/event/opdl/rte_pmd_opdl_event_version.map2
-rw-r--r--drivers/event/skeleton/Makefile2
-rw-r--r--drivers/event/skeleton/rte_pmd_skeleton_event_version.map3
-rw-r--r--drivers/event/sw/Makefile3
-rw-r--r--drivers/event/sw/rte_pmd_sw_event_version.map2
-rw-r--r--drivers/mempool/bucket/Makefile2
-rw-r--r--drivers/mempool/bucket/rte_mempool_bucket_version.map3
-rw-r--r--drivers/mempool/dpaa/Makefile3
-rw-r--r--drivers/mempool/dpaa/rte_mempool_dpaa_version.map2
-rw-r--r--drivers/mempool/dpaa2/Makefile3
-rw-r--r--drivers/mempool/dpaa2/dpaa2_hw_mempool.c2
-rw-r--r--drivers/mempool/dpaa2/dpaa2_hw_mempool.h2
-rw-r--r--drivers/mempool/dpaa2/meson.build2
-rw-r--r--drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map12
-rw-r--r--drivers/mempool/octeontx/Makefile2
-rw-r--r--drivers/mempool/octeontx/octeontx_fpavf.c87
-rw-r--r--drivers/mempool/octeontx/rte_mempool_octeontx_version.map2
-rw-r--r--drivers/mempool/octeontx2/Makefile2
-rw-r--r--drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map4
-rw-r--r--drivers/mempool/ring/Makefile2
-rw-r--r--drivers/mempool/ring/rte_mempool_ring_version.map3
-rw-r--r--drivers/mempool/stack/Makefile2
-rw-r--r--drivers/mempool/stack/rte_mempool_stack_version.map3
-rw-r--r--drivers/meson.build22
-rw-r--r--drivers/net/af_packet/Makefile2
-rw-r--r--drivers/net/af_packet/rte_pmd_af_packet_version.map3
-rw-r--r--drivers/net/af_xdp/Makefile2
-rw-r--r--drivers/net/af_xdp/rte_pmd_af_xdp_version.map2
-rw-r--r--drivers/net/ark/Makefile2
-rw-r--r--drivers/net/ark/rte_pmd_ark_version.map5
-rw-r--r--drivers/net/atlantic/Makefile2
-rw-r--r--drivers/net/atlantic/rte_pmd_atlantic_version.map4
-rw-r--r--drivers/net/avp/Makefile2
-rw-r--r--drivers/net/avp/rte_pmd_avp_version.map2
-rw-r--r--drivers/net/axgbe/Makefile2
-rw-r--r--drivers/net/axgbe/rte_pmd_axgbe_version.map2
-rw-r--r--drivers/net/bnx2x/Makefile2
-rw-r--r--drivers/net/bnx2x/rte_pmd_bnx2x_version.map3
-rw-r--r--drivers/net/bnxt/Makefile2
-rw-r--r--drivers/net/bnxt/bnxt_ethdev.c96
-rw-r--r--drivers/net/bnxt/bnxt_flow.c8
-rw-r--r--drivers/net/bnxt/bnxt_hwrm.c13
-rw-r--r--drivers/net/bnxt/bnxt_rxq.c1
-rw-r--r--drivers/net/bnxt/bnxt_vnic.c9
-rw-r--r--drivers/net/bnxt/meson.build1
-rw-r--r--drivers/net/bnxt/rte_pmd_bnxt_version.map4
-rw-r--r--drivers/net/bonding/Makefile2
-rw-r--r--drivers/net/bonding/meson.build1
-rw-r--r--drivers/net/bonding/rte_pmd_bond_version.map47
-rw-r--r--drivers/net/cxgbe/Makefile2
-rw-r--r--drivers/net/cxgbe/rte_pmd_cxgbe_version.map3
-rw-r--r--drivers/net/dpaa/Makefile2
-rw-r--r--drivers/net/dpaa/dpaa_ethdev.h2
-rw-r--r--drivers/net/dpaa/rte_pmd_dpaa_version.map11
-rw-r--r--drivers/net/dpaa2/Makefile5
-rw-r--r--drivers/net/dpaa2/base/dpaa2_hw_dpni.c2
-rw-r--r--drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h2
-rw-r--r--drivers/net/dpaa2/mc/dpdmux.c2
-rw-r--r--drivers/net/dpaa2/mc/dpni.c2
-rw-r--r--drivers/net/dpaa2/mc/fsl_dpdmux.h2
-rw-r--r--drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h2
-rw-r--r--drivers/net/dpaa2/mc/fsl_dpni.h2
-rw-r--r--drivers/net/dpaa2/meson.build2
-rw-r--r--drivers/net/dpaa2/rte_pmd_dpaa2.h2
-rw-r--r--drivers/net/dpaa2/rte_pmd_dpaa2_version.map12
-rw-r--r--drivers/net/e1000/Makefile2
-rw-r--r--drivers/net/e1000/em_ethdev.c16
-rw-r--r--drivers/net/e1000/igb_ethdev.c2
-rw-r--r--drivers/net/e1000/rte_pmd_e1000_version.map3
-rw-r--r--drivers/net/ena/Makefile2
-rw-r--r--drivers/net/ena/rte_pmd_ena_version.map3
-rw-r--r--drivers/net/enetc/Makefile2
-rw-r--r--drivers/net/enetc/rte_pmd_enetc_version.map3
-rw-r--r--drivers/net/enic/Makefile2
-rw-r--r--drivers/net/enic/rte_pmd_enic_version.map3
-rw-r--r--drivers/net/failsafe/Makefile2
-rw-r--r--drivers/net/failsafe/rte_pmd_failsafe_version.map3
-rw-r--r--drivers/net/fm10k/Makefile2
-rw-r--r--drivers/net/fm10k/fm10k_rxtx.c2
-rw-r--r--drivers/net/fm10k/rte_pmd_fm10k_version.map3
-rw-r--r--drivers/net/hinic/Makefile2
-rw-r--r--drivers/net/hinic/hinic_pmd_ethdev.c10
-rw-r--r--drivers/net/hinic/rte_pmd_hinic_version.map3
-rw-r--r--drivers/net/hns3/Makefile2
-rw-r--r--drivers/net/hns3/hns3_ethdev.c5
-rw-r--r--drivers/net/hns3/hns3_ethdev.h1
-rw-r--r--drivers/net/hns3/hns3_ethdev_vf.c22
-rw-r--r--drivers/net/hns3/hns3_mbx.c4
-rw-r--r--drivers/net/hns3/hns3_mbx.h6
-rw-r--r--drivers/net/hns3/hns3_rss.c4
-rw-r--r--drivers/net/hns3/hns3_rxtx.c26
-rw-r--r--drivers/net/hns3/rte_pmd_hns3_version.map4
-rw-r--r--drivers/net/i40e/Makefile2
-rw-r--r--drivers/net/i40e/meson.build2
-rw-r--r--drivers/net/i40e/rte_pmd_i40e_version.map65
-rw-r--r--drivers/net/iavf/Makefile2
-rw-r--r--drivers/net/iavf/iavf_ethdev.c2
-rw-r--r--drivers/net/iavf/iavf_rxtx.c1
-rw-r--r--drivers/net/iavf/rte_pmd_iavf_version.map3
-rw-r--r--drivers/net/ice/Makefile2
-rw-r--r--drivers/net/ice/ice_ethdev.c12
-rw-r--r--drivers/net/ice/ice_ethdev.h1
-rw-r--r--drivers/net/ice/ice_fdir_filter.c187
-rw-r--r--drivers/net/ice/ice_generic_flow.c21
-rw-r--r--drivers/net/ice/ice_generic_flow.h7
-rw-r--r--drivers/net/ice/ice_hash.c32
-rw-r--r--drivers/net/ice/ice_rxtx.c2
-rw-r--r--drivers/net/ice/ice_rxtx_vec_common.h7
-rw-r--r--drivers/net/ice/rte_pmd_ice_version.map3
-rw-r--r--drivers/net/ifc/Makefile2
-rw-r--r--drivers/net/ifc/ifcvf_vdpa.c8
-rw-r--r--drivers/net/ifc/rte_pmd_ifc_version.map3
-rw-r--r--drivers/net/ipn3ke/Makefile2
-rw-r--r--drivers/net/ipn3ke/meson.build4
-rw-r--r--drivers/net/ipn3ke/rte_pmd_ipn3ke_version.map5
-rw-r--r--drivers/net/ixgbe/Makefile2
-rw-r--r--drivers/net/ixgbe/ixgbe_ethdev.c17
-rw-r--r--drivers/net/ixgbe/ixgbe_ethdev.h1
-rw-r--r--drivers/net/ixgbe/meson.build2
-rw-r--r--drivers/net/ixgbe/rte_pmd_ixgbe.c1
-rw-r--r--drivers/net/ixgbe/rte_pmd_ixgbe_version.map62
-rw-r--r--drivers/net/kni/Makefile2
-rw-r--r--drivers/net/kni/rte_eth_kni.c6
-rw-r--r--drivers/net/kni/rte_pmd_kni_version.map3
-rw-r--r--drivers/net/liquidio/Makefile2
-rw-r--r--drivers/net/liquidio/rte_pmd_liquidio_version.map3
-rw-r--r--drivers/net/memif/Makefile2
-rw-r--r--drivers/net/memif/rte_pmd_memif_version.map5
-rw-r--r--drivers/net/mlx4/Makefile2
-rw-r--r--drivers/net/mlx4/rte_pmd_mlx4_version.map3
-rw-r--r--drivers/net/mlx5/Makefile2
-rw-r--r--drivers/net/mlx5/meson.build6
-rw-r--r--drivers/net/mlx5/mlx5.c68
-rw-r--r--drivers/net/mlx5/mlx5_defs.h11
-rw-r--r--drivers/net/mlx5/mlx5_ethdev.c4
-rw-r--r--drivers/net/mlx5/mlx5_flow.c33
-rw-r--r--drivers/net/mlx5/mlx5_flow_dv.c74
-rw-r--r--drivers/net/mlx5/mlx5_glue.c14
-rw-r--r--drivers/net/mlx5/mlx5_glue.h3
-rw-r--r--drivers/net/mlx5/mlx5_prm.h3
-rw-r--r--drivers/net/mlx5/mlx5_rxq.c8
-rw-r--r--drivers/net/mlx5/mlx5_rxtx.c118
-rw-r--r--drivers/net/mlx5/mlx5_rxtx.h1
-rw-r--r--drivers/net/mlx5/mlx5_txq.c10
-rw-r--r--drivers/net/mlx5/rte_pmd_mlx5_version.map2
-rw-r--r--drivers/net/mvneta/Makefile3
-rw-r--r--drivers/net/mvneta/rte_pmd_mvneta_version.map2
-rw-r--r--drivers/net/mvpp2/Makefile3
-rw-r--r--drivers/net/mvpp2/rte_pmd_mvpp2_version.map2
-rw-r--r--drivers/net/netvsc/Makefile2
-rw-r--r--drivers/net/netvsc/hn_ethdev.c17
-rw-r--r--drivers/net/netvsc/meson.build1
-rw-r--r--drivers/net/netvsc/rte_pmd_netvsc_version.map4
-rw-r--r--drivers/net/nfb/Makefile2
-rw-r--r--drivers/net/nfb/rte_pmd_nfb_version.map3
-rw-r--r--drivers/net/nfp/Makefile2
-rw-r--r--drivers/net/nfp/nfp_net.c28
-rw-r--r--drivers/net/nfp/nfp_net_ctrl.h28
-rw-r--r--drivers/net/nfp/nfp_net_logs.h28
-rw-r--r--drivers/net/nfp/nfp_net_pmd.h28
-rw-r--r--drivers/net/nfp/rte_pmd_nfp_version.map2
-rw-r--r--drivers/net/null/Makefile2
-rw-r--r--drivers/net/null/meson.build1
-rw-r--r--drivers/net/null/rte_pmd_null_version.map3
-rw-r--r--drivers/net/octeontx/Makefile2
-rw-r--r--drivers/net/octeontx/base/octeontx_bgx.h3
-rw-r--r--drivers/net/octeontx/base/octeontx_pkivf.c83
-rw-r--r--drivers/net/octeontx/base/octeontx_pkivf.h249
-rw-r--r--drivers/net/octeontx/base/octeontx_pkovf.c37
-rw-r--r--drivers/net/octeontx/base/octeontx_pkovf.h3
-rw-r--r--drivers/net/octeontx/octeontx_ethdev.c15
-rw-r--r--drivers/net/octeontx/octeontx_ethdev.h1
-rw-r--r--drivers/net/octeontx/rte_pmd_octeontx_version.map10
-rw-r--r--drivers/net/octeontx2/Makefile2
-rw-r--r--drivers/net/octeontx2/otx2_ethdev.c6
-rw-r--r--drivers/net/octeontx2/otx2_ethdev.h1
-rw-r--r--drivers/net/octeontx2/otx2_lookup.c7
-rw-r--r--drivers/net/octeontx2/rte_pmd_octeontx2_version.map3
-rw-r--r--drivers/net/pcap/Makefile2
-rw-r--r--drivers/net/pcap/rte_eth_pcap.c16
-rw-r--r--drivers/net/pcap/rte_pmd_pcap_version.map3
-rw-r--r--drivers/net/pfe/Makefile4
-rw-r--r--drivers/net/pfe/base/cbus.h2
-rw-r--r--drivers/net/pfe/base/cbus/bmu.h2
-rw-r--r--drivers/net/pfe/base/cbus/class_csr.h2
-rw-r--r--drivers/net/pfe/base/cbus/emac_mtip.h2
-rw-r--r--drivers/net/pfe/base/cbus/gpi.h2
-rw-r--r--drivers/net/pfe/base/cbus/hif.h2
-rw-r--r--drivers/net/pfe/base/cbus/hif_nocpy.h2
-rw-r--r--drivers/net/pfe/base/cbus/tmu_csr.h2
-rw-r--r--drivers/net/pfe/base/cbus/util_csr.h2
-rw-r--r--drivers/net/pfe/base/pfe.h2
-rw-r--r--drivers/net/pfe/pfe_eth.h2
-rw-r--r--drivers/net/pfe/pfe_ethdev.c2
-rw-r--r--drivers/net/pfe/pfe_hal.c2
-rw-r--r--drivers/net/pfe/pfe_hif.c2
-rw-r--r--drivers/net/pfe/pfe_hif.h2
-rw-r--r--drivers/net/pfe/pfe_hif_lib.c2
-rw-r--r--drivers/net/pfe/pfe_hif_lib.h2
-rw-r--r--drivers/net/pfe/pfe_logs.h2
-rw-r--r--drivers/net/pfe/pfe_mod.h2
-rw-r--r--drivers/net/pfe/rte_pmd_pfe_version.map3
-rw-r--r--drivers/net/qede/Makefile2
-rw-r--r--drivers/net/qede/rte_pmd_qede_version.map3
-rw-r--r--drivers/net/ring/Makefile2
-rw-r--r--drivers/net/ring/meson.build1
-rw-r--r--drivers/net/ring/rte_pmd_ring_version.map10
-rw-r--r--drivers/net/sfc/Makefile2
-rw-r--r--drivers/net/sfc/rte_pmd_sfc_version.map3
-rw-r--r--drivers/net/softnic/Makefile2
-rw-r--r--drivers/net/softnic/rte_pmd_softnic_version.map2
-rw-r--r--drivers/net/szedata2/Makefile2
-rw-r--r--drivers/net/szedata2/rte_pmd_szedata2_version.map2
-rw-r--r--drivers/net/tap/Makefile2
-rw-r--r--drivers/net/tap/rte_pmd_tap_version.map3
-rw-r--r--drivers/net/thunderx/Makefile2
-rw-r--r--drivers/net/thunderx/rte_pmd_thunderx_version.map3
-rw-r--r--drivers/net/vdev_netvsc/Makefile1
-rw-r--r--drivers/net/vdev_netvsc/rte_pmd_vdev_netvsc_version.map3
-rw-r--r--drivers/net/vhost/Makefile2
-rw-r--r--drivers/net/vhost/meson.build1
-rw-r--r--drivers/net/vhost/rte_pmd_vhost_version.map9
-rw-r--r--drivers/net/virtio/Makefile2
-rw-r--r--drivers/net/virtio/rte_pmd_virtio_version.map3
-rw-r--r--drivers/net/virtio/virtio_user/virtio_user_dev.c6
-rw-r--r--drivers/net/vmxnet3/Makefile2
-rw-r--r--drivers/net/vmxnet3/rte_pmd_vmxnet3_version.map3
-rw-r--r--drivers/raw/dpaa2_cmdif/Makefile2
-rw-r--r--drivers/raw/dpaa2_cmdif/dpaa2_cmdif.c2
-rw-r--r--drivers/raw/dpaa2_cmdif/meson.build2
-rw-r--r--drivers/raw/dpaa2_cmdif/rte_rawdev_dpaa2_cmdif_version.map3
-rw-r--r--drivers/raw/dpaa2_qdma/Makefile2
-rw-r--r--drivers/raw/dpaa2_qdma/meson.build2
-rw-r--r--drivers/raw/dpaa2_qdma/rte_rawdev_dpaa2_qdma_version.map4
-rw-r--r--drivers/raw/ifpga/Makefile2
-rw-r--r--drivers/raw/ifpga/base/opae_at24_eeprom.c1
-rw-r--r--drivers/raw/ifpga/ifpga_rawdev.c8
-rw-r--r--drivers/raw/ifpga/meson.build4
-rw-r--r--drivers/raw/ifpga/rte_rawdev_ifpga_version.map3
-rw-r--r--drivers/raw/ioat/Makefile3
-rw-r--r--drivers/raw/ioat/rte_rawdev_ioat_version.map3
-rw-r--r--drivers/raw/ntb/Makefile2
-rw-r--r--drivers/raw/ntb/rte_rawdev_ntb_version.map5
-rw-r--r--drivers/raw/octeontx2_dma/Makefile2
-rw-r--r--drivers/raw/octeontx2_dma/rte_rawdev_octeontx2_dma_version.map3
-rw-r--r--drivers/raw/skeleton/Makefile2
-rw-r--r--drivers/raw/skeleton/rte_rawdev_skeleton_version.map3
-rw-r--r--examples/bbdev_app/Makefile4
-rw-r--r--examples/bond/Makefile4
-rw-r--r--examples/cmdline/Makefile4
-rw-r--r--examples/distributor/Makefile4
-rw-r--r--examples/eventdev_pipeline/Makefile4
-rw-r--r--examples/fips_validation/Makefile4
-rw-r--r--examples/fips_validation/fips_validation_gcm.c16
-rw-r--r--examples/fips_validation/main.c58
-rw-r--r--examples/flow_classify/Makefile4
-rw-r--r--examples/flow_filtering/Makefile4
-rw-r--r--examples/helloworld/Makefile4
-rw-r--r--examples/ioat/Makefile10
-rw-r--r--examples/ioat/ioatfwd.c14
-rw-r--r--examples/ip_fragmentation/Makefile4
-rw-r--r--examples/ip_pipeline/Makefile4
-rw-r--r--examples/ip_reassembly/Makefile4
-rw-r--r--examples/ipsec-secgw/Makefile4
-rw-r--r--examples/ipsec-secgw/ep0.cfg8
-rw-r--r--examples/ipsec-secgw/ep1.cfg12
-rw-r--r--examples/ipsec-secgw/test/bypass_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/common_defs_secgw.sh1
-rw-r--r--examples/ipsec-secgw/test/data_rxtx.sh1
-rw-r--r--examples/ipsec-secgw/test/linux_test4.sh1
-rw-r--r--examples/ipsec-secgw/test/linux_test6.sh1
-rwxr-xr-xexamples/ipsec-secgw/test/pkttest.py1
-rwxr-xr-xexamples/ipsec-secgw/test/pkttest.sh1
-rwxr-xr-xexamples/ipsec-secgw/test/run_test.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_3descbc_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_3descbc_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_3descbc_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_3descbc_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_3descbc_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aescbc_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aescbc_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aescbc_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aescbc_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aescbc_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesctr_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesctr_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesctr_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesctr_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesctr_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_inline_crypto_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_inline_crypto_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/trs_aesgcm_old_defs.sh1
-rwxr-xr-xexamples/ipsec-secgw/test/trs_ipv6opts.py1
-rw-r--r--examples/ipsec-secgw/test/tun_3descbc_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_3descbc_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_3descbc_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_3descbc_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_3descbc_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aescbc_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aescbc_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aescbc_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aescbc_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aescbc_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesctr_sha1_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesctr_sha1_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesctr_sha1_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesctr_sha1_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesctr_sha1_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_common_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_esn_atom_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_esn_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_inline_crypto_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_inline_crypto_old_defs.sh1
-rw-r--r--examples/ipsec-secgw/test/tun_aesgcm_old_defs.sh1
-rw-r--r--examples/ipv4_multicast/Makefile4
-rw-r--r--examples/kni/Makefile4
-rw-r--r--examples/l2fwd-cat/Makefile4
-rw-r--r--examples/l2fwd-crypto/Makefile4
-rw-r--r--examples/l2fwd-event/Makefile4
-rw-r--r--examples/l2fwd-event/l2fwd_common.c10
-rw-r--r--examples/l2fwd-event/l2fwd_event.c7
-rw-r--r--examples/l2fwd-event/l2fwd_poll.c4
-rw-r--r--examples/l2fwd-event/main.c10
-rw-r--r--examples/l2fwd-jobstats/Makefile4
-rw-r--r--examples/l2fwd-keepalive/Makefile4
-rw-r--r--examples/l2fwd/Makefile4
-rw-r--r--examples/l3fwd-acl/Makefile4
-rw-r--r--examples/l3fwd-power/Makefile4
-rw-r--r--examples/l3fwd/Makefile4
-rw-r--r--examples/link_status_interrupt/Makefile4
-rw-r--r--examples/multi_process/client_server_mp/mp_client/client.c18
-rw-r--r--examples/multi_process/client_server_mp/mp_server/args.c40
-rw-r--r--examples/multi_process/client_server_mp/mp_server/args.h2
-rw-r--r--examples/multi_process/client_server_mp/mp_server/init.c7
-rw-r--r--examples/ntb/Makefile10
-rw-r--r--examples/ntb/ntb_fwd.c1
-rw-r--r--examples/packet_ordering/Makefile4
-rw-r--r--examples/ptpclient/Makefile4
-rw-r--r--examples/qos_meter/Makefile4
-rw-r--r--examples/qos_sched/Makefile4
-rw-r--r--examples/rxtx_callbacks/Makefile4
-rw-r--r--examples/service_cores/Makefile4
-rw-r--r--examples/skeleton/Makefile4
-rw-r--r--examples/tep_termination/Makefile4
-rw-r--r--examples/timer/Makefile4
-rw-r--r--examples/vdpa/Makefile4
-rw-r--r--examples/vhost/Makefile4
-rw-r--r--examples/vhost_blk/Makefile10
-rw-r--r--examples/vhost_blk/vhost_blk.c1
-rw-r--r--examples/vhost_crypto/Makefile4
-rw-r--r--examples/vmdq/Makefile4
-rw-r--r--examples/vmdq_dcb/Makefile4
-rw-r--r--kernel/freebsd/meson.build7
-rw-r--r--kernel/linux/kni/compat.h9
-rw-r--r--kernel/linux/kni/kni_dev.h32
-rw-r--r--kernel/linux/kni/kni_misc.c39
-rw-r--r--kernel/linux/kni/kni_net.c62
-rw-r--r--lib/librte_acl/Makefile2
-rw-r--r--lib/librte_acl/meson.build1
-rw-r--r--lib/librte_acl/rte_acl_version.map2
-rw-r--r--lib/librte_bbdev/Makefile3
-rw-r--r--lib/librte_bitratestats/Makefile2
-rw-r--r--lib/librte_bitratestats/meson.build1
-rw-r--r--lib/librte_bitratestats/rte_bitratestats_version.map2
-rw-r--r--lib/librte_bpf/Makefile2
-rw-r--r--lib/librte_bpf/bpf_jit_arm64.c2
-rw-r--r--lib/librte_cfgfile/Makefile2
-rw-r--r--lib/librte_cfgfile/meson.build1
-rw-r--r--lib/librte_cfgfile/rte_cfgfile_version.map34
-rw-r--r--lib/librte_cmdline/Makefile2
-rw-r--r--lib/librte_cmdline/meson.build1
-rw-r--r--lib/librte_cmdline/rte_cmdline_version.map10
-rw-r--r--lib/librte_compressdev/Makefile3
-rw-r--r--lib/librte_cryptodev/Makefile3
-rw-r--r--lib/librte_cryptodev/meson.build1
-rw-r--r--lib/librte_cryptodev/rte_cryptodev_version.map102
-rw-r--r--lib/librte_distributor/Makefile4
-rw-r--r--lib/librte_distributor/distributor_private.h10
-rw-r--r--lib/librte_distributor/meson.build2
-rw-r--r--lib/librte_distributor/rte_distributor.c98
-rw-r--r--lib/librte_distributor/rte_distributor_single.c (renamed from lib/librte_distributor/rte_distributor_v20.c)73
-rw-r--r--lib/librte_distributor/rte_distributor_single.h (renamed from lib/librte_distributor/rte_distributor_v20.h)26
-rw-r--r--lib/librte_distributor/rte_distributor_v1705.h61
-rw-r--r--lib/librte_distributor/rte_distributor_version.map16
-rw-r--r--lib/librte_eal/common/eal_common_log.c2
-rw-r--r--lib/librte_eal/common/eal_common_proc.c4
-rw-r--r--lib/librte_eal/common/eal_common_uuid.c26
-rw-r--r--lib/librte_eal/common/eal_hugepages.h2
-rw-r--r--lib/librte_eal/common/include/rte_bus.h2
-rw-r--r--lib/librte_eal/common/include/rte_dev.h2
-rw-r--r--lib/librte_eal/common/include/rte_memory.h5
-rw-r--r--lib/librte_eal/common/include/rte_uuid.h26
-rw-r--r--lib/librte_eal/common/malloc_elem.c9
-rw-r--r--lib/librte_eal/common/meson.build3
-rw-r--r--lib/librte_eal/common/rte_malloc.c3
-rw-r--r--lib/librte_eal/common/rte_reciprocal.c34
-rw-r--r--lib/librte_eal/freebsd/eal/Makefile2
-rw-r--r--lib/librte_eal/linux/eal/Makefile2
-rw-r--r--lib/librte_eal/linux/eal/eal.c11
-rw-r--r--lib/librte_eal/linux/eal/eal_interrupts.c5
-rw-r--r--lib/librte_eal/linux/eal/eal_vfio.c4
-rw-r--r--lib/librte_eal/linux/eal/include/rte_kni_common.h7
-rw-r--r--lib/librte_eal/meson.build1
-rw-r--r--lib/librte_eal/rte_eal_version.map322
-rw-r--r--lib/librte_eal/windows/eal/include/sys/queue.h28
-rw-r--r--lib/librte_efd/Makefile2
-rw-r--r--lib/librte_efd/rte_efd.c2
-rw-r--r--lib/librte_efd/rte_efd_version.map2
-rw-r--r--lib/librte_ethdev/Makefile2
-rw-r--r--lib/librte_ethdev/meson.build1
-rw-r--r--lib/librte_ethdev/rte_ethdev.c10
-rw-r--r--lib/librte_ethdev/rte_ethdev_version.map160
-rw-r--r--lib/librte_ethdev/rte_flow.c1
-rw-r--r--lib/librte_eventdev/Makefile3
-rw-r--r--lib/librte_eventdev/meson.build1
-rw-r--r--lib/librte_eventdev/rte_eventdev_version.map130
-rw-r--r--lib/librte_fib/Makefile2
-rw-r--r--lib/librte_fib/dir24_8.h1
-rw-r--r--lib/librte_fib/rte_fib6.c1
-rw-r--r--lib/librte_fib/trie.c1
-rw-r--r--lib/librte_fib/trie.h1
-rw-r--r--lib/librte_flow_classify/Makefile2
-rw-r--r--lib/librte_gro/Makefile2
-rw-r--r--lib/librte_gro/rte_gro_version.map2
-rw-r--r--lib/librte_gso/Makefile2
-rw-r--r--lib/librte_gso/rte_gso_version.map2
-rw-r--r--lib/librte_hash/Makefile2
-rw-r--r--lib/librte_hash/meson.build1
-rw-r--r--lib/librte_hash/rte_hash_version.map43
-rw-r--r--lib/librte_ip_frag/Makefile2
-rw-r--r--lib/librte_ip_frag/rte_ip_frag_version.map10
-rw-r--r--lib/librte_ipsec/Makefile2
-rw-r--r--lib/librte_ipsec/meson.build1
-rw-r--r--lib/librte_jobstats/Makefile2
-rw-r--r--lib/librte_jobstats/rte_jobstats_version.map10
-rw-r--r--lib/librte_kni/Makefile2
-rw-r--r--lib/librte_kni/meson.build1
-rw-r--r--lib/librte_kni/rte_kni.c5
-rw-r--r--lib/librte_kni/rte_kni_version.map2
-rw-r--r--lib/librte_kvargs/Makefile2
-rw-r--r--lib/librte_kvargs/meson.build1
-rw-r--r--lib/librte_kvargs/rte_kvargs_version.map4
-rw-r--r--lib/librte_latencystats/Makefile2
-rw-r--r--lib/librte_latencystats/rte_latencystats_version.map2
-rw-r--r--lib/librte_lpm/Makefile2
-rw-r--r--lib/librte_lpm/meson.build1
-rw-r--r--lib/librte_lpm/rte_lpm.c1010
-rw-r--r--lib/librte_lpm/rte_lpm.h88
-rw-r--r--lib/librte_lpm/rte_lpm6.c140
-rw-r--r--lib/librte_lpm/rte_lpm6.h25
-rw-r--r--lib/librte_lpm/rte_lpm_version.map35
-rw-r--r--lib/librte_mbuf/Makefile2
-rw-r--r--lib/librte_mbuf/meson.build1
-rw-r--r--lib/librte_mbuf/rte_mbuf.c4
-rw-r--r--lib/librte_mbuf/rte_mbuf.h1
-rw-r--r--lib/librte_mbuf/rte_mbuf_version.map49
-rw-r--r--lib/librte_member/Makefile2
-rw-r--r--lib/librte_member/rte_member_version.map2
-rw-r--r--lib/librte_mempool/Makefile2
-rw-r--r--lib/librte_mempool/meson.build1
-rw-r--r--lib/librte_mempool/rte_mempool.c22
-rw-r--r--lib/librte_mempool/rte_mempool_version.map44
-rw-r--r--lib/librte_meter/Makefile2
-rw-r--r--lib/librte_meter/meson.build1
-rw-r--r--lib/librte_meter/rte_meter_version.map11
-rw-r--r--lib/librte_metrics/Makefile2
-rw-r--r--lib/librte_metrics/rte_metrics_version.map2
-rw-r--r--lib/librte_net/Makefile2
-rw-r--r--lib/librte_net/meson.build1
-rw-r--r--lib/librte_net/rte_net_version.map23
-rw-r--r--lib/librte_pci/Makefile2
-rw-r--r--lib/librte_pci/meson.build2
-rw-r--r--lib/librte_pci/rte_pci_version.map2
-rw-r--r--lib/librte_pdump/Makefile2
-rw-r--r--lib/librte_pdump/meson.build1
-rw-r--r--lib/librte_pdump/rte_pdump_version.map2
-rw-r--r--lib/librte_pipeline/Makefile2
-rw-r--r--lib/librte_pipeline/meson.build1
-rw-r--r--lib/librte_pipeline/rte_pipeline_version.map34
-rw-r--r--lib/librte_port/Makefile2
-rw-r--r--lib/librte_port/meson.build1
-rw-r--r--lib/librte_port/rte_port_kni.c35
-rw-r--r--lib/librte_port/rte_port_kni.h35
-rw-r--r--lib/librte_port/rte_port_version.map64
-rw-r--r--lib/librte_power/Makefile2
-rw-r--r--lib/librte_power/guest_channel.c2
-rw-r--r--lib/librte_power/power_acpi_cpufreq.c7
-rw-r--r--lib/librte_power/power_pstate_cpufreq.c9
-rw-r--r--lib/librte_power/rte_power.h2
-rw-r--r--lib/librte_power/rte_power_version.map24
-rw-r--r--lib/librte_rawdev/Makefile3
-rw-r--r--lib/librte_rawdev/rte_rawdev_version.map4
-rw-r--r--lib/librte_rcu/Makefile2
-rw-r--r--lib/librte_reorder/Makefile2
-rw-r--r--lib/librte_reorder/rte_reorder_version.map8
-rw-r--r--lib/librte_rib/Makefile2
-rw-r--r--lib/librte_ring/Makefile2
-rw-r--r--lib/librte_ring/meson.build1
-rw-r--r--lib/librte_ring/rte_ring_version.map10
-rw-r--r--lib/librte_sched/Makefile2
-rw-r--r--lib/librte_sched/meson.build1
-rw-r--r--lib/librte_sched/rte_sched_version.map14
-rw-r--r--lib/librte_security/Makefile3
-rw-r--r--lib/librte_security/meson.build1
-rw-r--r--lib/librte_security/rte_security_version.map2
-rw-r--r--lib/librte_stack/Makefile2
-rw-r--r--lib/librte_stack/meson.build1
-rw-r--r--lib/librte_table/Makefile2
-rw-r--r--lib/librte_table/meson.build1
-rw-r--r--lib/librte_table/rte_table_version.map2
-rw-r--r--lib/librte_telemetry/Makefile2
-rw-r--r--lib/librte_timer/Makefile2
-rw-r--r--lib/librte_timer/rte_timer.c100
-rw-r--r--lib/librte_timer/rte_timer.h15
-rw-r--r--lib/librte_timer/rte_timer_version.map12
-rw-r--r--lib/librte_vhost/Makefile2
-rw-r--r--lib/librte_vhost/meson.build1
-rw-r--r--lib/librte_vhost/rte_vhost_version.map52
-rw-r--r--lib/librte_vhost/socket.c2
-rw-r--r--lib/meson.build17
-rw-r--r--license/exceptions.txt1
-rw-r--r--meson.build1
-rw-r--r--meson_options.txt4
-rw-r--r--mk/machine/emag/rte.vars.mk32
-rw-r--r--mk/machine/n1sdp/rte.vars.mk34
-rw-r--r--mk/rte.app.mk4
-rw-r--r--mk/rte.lib.mk14
-rwxr-xr-xusertools/dpdk-devbind.py5
-rwxr-xr-xusertools/dpdk-telemetry-client.py2
760 files changed, 5814 insertions, 5176 deletions
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index 6075c44..ccc3a7c 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -23,10 +23,19 @@ if [ "$BUILD_DOCS" = "1" ]; then
OPTS="$OPTS -Denable_docs=true"
fi
+if [ "$BUILD_32BIT" = "1" ]; then
+ OPTS="$OPTS -Dc_args=-m32 -Dc_link_args=-m32"
+ export PKG_CONFIG_LIBDIR="/usr/lib32/pkgconfig"
+fi
+
OPTS="$OPTS --default-library=$DEF_LIB"
meson build --werror -Dexamples=all $OPTS
ninja -C build
+if [ "$AARCH64" != "1" ]; then
+ devtools/test-null.sh
+fi
+
if [ "$RUN_TESTS" = "1" ]; then
sudo meson test -C build --suite fast-tests -t 3
fi
diff --git a/.gitignore b/.gitignore
index 5eda2c3..9741ba0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,6 @@ TAGS
# ignore default build directory, and directories from test-meson-builds.sh
build
build-*
+# ignore other build directory patterns
+*-gcc*
+*-clang*
diff --git a/.travis.yml b/.travis.yml
index 3d6ef29..8f90d06 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,12 +17,16 @@ addons:
aarch64_packages: &aarch64_packages
- *required_packages
- - [gcc-aarch64-linux-gnu, libc6-dev-arm64-cross]
+ - [gcc-aarch64-linux-gnu, libc6-dev-arm64-cross, pkg-config-aarch64-linux-gnu]
extra_packages: &extra_packages
- *required_packages
- [libbsd-dev, libpcap-dev, libcrypto++-dev, libjansson4]
+build_32b_packages: &build_32b_packages
+ - *required_packages
+ - [gcc-multilib]
+
doc_packages: &doc_packages
- [doxygen, graphviz, python3-sphinx]
@@ -37,6 +41,12 @@ env:
matrix:
include:
+ - env: DEF_LIB="static" BUILD_32BIT=1
+ compiler: gcc
+ addons:
+ apt:
+ packages:
+ - *build_32b_packages
- env: DEF_LIB="static" OPTS="-Denable_kmods=false" AARCH64=1
compiler: gcc
addons:
diff --git a/ABI_VERSION b/ABI_VERSION
new file mode 100644
index 0000000..2e73f8d
--- /dev/null
+++ b/ABI_VERSION
@@ -0,0 +1 @@
+20.1
diff --git a/MAINTAINERS b/MAINTAINERS
index f2fdb93..9b5c80f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -37,8 +37,8 @@ M: Ajit Khaparde <ajit.khaparde@broadcom.com>
T: git://dpdk.org/next/dpdk-next-net-brcm
Next-net-intel Tree
-M: Qi Zhang <qi.z.zhang@intel.com>
M: Xiaolong Ye <xiaolong.ye@intel.com>
+M: Qi Zhang <qi.z.zhang@intel.com>
T: git://dpdk.org/next/dpdk-next-net-intel
Next-net-mrvl Tree
@@ -143,8 +143,11 @@ M: Neil Horman <nhorman@tuxdriver.com>
F: lib/librte_eal/common/include/rte_compat.h
F: lib/librte_eal/common/include/rte_function_versioning.h
F: doc/guides/rel_notes/deprecation.rst
-F: devtools/validate-abi.sh
+F: devtools/check-abi-version.sh
F: devtools/check-symbol-change.sh
+F: devtools/update-abi.sh
+F: devtools/update_version_map_abi.py
+F: devtools/validate-abi.sh
F: buildtools/check-experimental-syms.sh
F: buildtools/map-list-symbol.sh
@@ -597,7 +600,7 @@ F: doc/guides/nics/liquidio.rst
F: doc/guides/nics/features/liquidio.ini
Cavium OCTEON TX
-M: Jerin Jacob <jerinj@marvell.com>
+M: Harman Kalra <hkalra@marvell.com>
T: git://dpdk.org/next/dpdk-next-net-mrvl
F: drivers/common/octeontx/
F: drivers/mempool/octeontx/
@@ -771,7 +774,8 @@ F: doc/guides/nics/nfb.rst
F: doc/guides/nics/features/nfb.ini
Netronome nfp
-M: Alejandro Lucero <alejandro.lucero@netronome.com>
+M: Heinrich Kuhn <heinrich.kuhn@netronome.com>
+M: Jan Gutter <jan.gutter@netronome.com>
F: drivers/net/nfp/
F: doc/guides/nics/nfp.rst
F: doc/guides/nics/features/nfp*.ini
@@ -868,7 +872,7 @@ F: doc/guides/nics/virtio.rst
F: doc/guides/nics/features/virtio*.ini
Wind River AVP
-M: Allain Legacy <allain.legacy@windriver.com>
+M: Steven Webster <steven.webster@windriver.com>
M: Matt Peters <matt.peters@windriver.com>
F: drivers/net/avp/
F: doc/guides/nics/avp.rst
@@ -937,7 +941,7 @@ F: doc/guides/cryptodevs/ccp.rst
F: doc/guides/cryptodevs/features/ccp.ini
ARMv8 Crypto
-M: Jerin Jacob <jerinj@marvell.com>
+M: Ruifeng Wang <ruifeng.wang@arm.com>
F: drivers/crypto/armv8/
F: doc/guides/cryptodevs/armv8.rst
F: doc/guides/cryptodevs/features/armv8.ini
@@ -1142,6 +1146,7 @@ Rawdev Drivers
Intel FPGA
M: Rosen Xu <rosen.xu@intel.com>
M: Tianfei zhang <tianfei.zhang@intel.com>
+T: git://dpdk.org/next/dpdk-next-net-intel
F: drivers/raw/ifpga/
F: doc/guides/rawdevs/ifpga.rst
@@ -1526,6 +1531,7 @@ M: John McNamara <john.mcnamara@intel.com>
F: examples/performance-thread/
F: doc/guides/sample_app_ug/performance_thread.rst
+M: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
F: examples/ptpclient/
M: Bruce Richardson <bruce.richardson@intel.com>
diff --git a/Makefile b/Makefile
index 6cd70a0..571277a 100644
--- a/Makefile
+++ b/Makefile
@@ -2,4 +2,3 @@
# Copyright(c) 2010-2014 Intel Corporation
.error Error please compile using GNU Make (gmake)
-
diff --git a/VERSION b/VERSION
index 1f0a8d2..6dd1fc4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-19.11.0-rc2
+20.02.0-rc0
diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-perf/cperf_ops.c
index f59568b..97584ce 100644
--- a/app/test-crypto-perf/cperf_ops.c
+++ b/app/test-crypto-perf/cperf_ops.c
@@ -7,6 +7,44 @@
#include "cperf_ops.h"
#include "cperf_test_vectors.h"
+#ifdef RTE_LIBRTE_SECURITY
+static int
+cperf_set_ops_security(struct rte_crypto_op **ops,
+ uint32_t src_buf_offset __rte_unused,
+ uint32_t dst_buf_offset __rte_unused,
+ uint16_t nb_ops, struct rte_cryptodev_sym_session *sess,
+ const struct cperf_options *options __rte_unused,
+ const struct cperf_test_vector *test_vector __rte_unused,
+ uint16_t iv_offset __rte_unused,
+ uint32_t *imix_idx __rte_unused)
+{
+ uint16_t i;
+
+ for (i = 0; i < nb_ops; i++) {
+ struct rte_crypto_sym_op *sym_op = ops[i]->sym;
+ struct rte_security_session *sec_sess =
+ (struct rte_security_session *)sess;
+
+ ops[i]->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;
+ rte_security_attach_session(ops[i], sec_sess);
+ sym_op->m_src = (struct rte_mbuf *)((uint8_t *)ops[i] +
+ src_buf_offset);
+ sym_op->m_src->buf_len = options->segment_sz;
+ sym_op->m_src->data_len = options->test_buffer_size;
+ sym_op->m_src->pkt_len = sym_op->m_src->data_len;
+
+ /* Set dest mbuf to NULL if out-of-place (dst_buf_offset = 0) */
+ if (dst_buf_offset == 0)
+ sym_op->m_dst = NULL;
+ else
+ sym_op->m_dst = (struct rte_mbuf *)((uint8_t *)ops[i] +
+ dst_buf_offset);
+ }
+
+ return 0;
+}
+#endif
+
static int
cperf_set_ops_null_cipher(struct rte_crypto_op **ops,
uint32_t src_buf_offset, uint32_t dst_buf_offset,
@@ -480,6 +518,78 @@ cperf_create_session(struct rte_mempool *sess_mp,
struct rte_crypto_sym_xform aead_xform;
struct rte_cryptodev_sym_session *sess = NULL;
+#ifdef RTE_LIBRTE_SECURITY
+ /*
+ * security only
+ */
+ if (options->op_type == CPERF_PDCP) {
+ /* Setup Cipher Parameters */
+ cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ cipher_xform.next = NULL;
+ cipher_xform.cipher.algo = options->cipher_algo;
+ cipher_xform.cipher.op = options->cipher_op;
+ cipher_xform.cipher.iv.offset = iv_offset;
+
+ /* cipher different than null */
+ if (options->cipher_algo != RTE_CRYPTO_CIPHER_NULL) {
+ cipher_xform.cipher.key.data = test_vector->cipher_key.data;
+ cipher_xform.cipher.key.length = test_vector->cipher_key.length;
+ cipher_xform.cipher.iv.length = test_vector->cipher_iv.length;
+ } else {
+ cipher_xform.cipher.key.data = NULL;
+ cipher_xform.cipher.key.length = 0;
+ cipher_xform.cipher.iv.length = 0;
+ }
+
+ /* Setup Auth Parameters */
+ if (options->auth_algo != 0) {
+ auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ auth_xform.next = NULL;
+ auth_xform.auth.algo = options->auth_algo;
+ auth_xform.auth.op = options->auth_op;
+ auth_xform.auth.iv.offset = iv_offset +
+ cipher_xform.cipher.iv.length;
+
+ /* auth different than null */
+ if (options->auth_algo != RTE_CRYPTO_AUTH_NULL) {
+ auth_xform.auth.digest_length = options->digest_sz;
+ auth_xform.auth.key.length = test_vector->auth_key.length;
+ auth_xform.auth.key.data = test_vector->auth_key.data;
+ auth_xform.auth.iv.length = test_vector->auth_iv.length;
+ } else {
+ auth_xform.auth.digest_length = 0;
+ auth_xform.auth.key.length = 0;
+ auth_xform.auth.key.data = NULL;
+ auth_xform.auth.iv.length = 0;
+ }
+
+ cipher_xform.next = &auth_xform;
+ } else {
+ cipher_xform.next = NULL;
+ }
+
+ struct rte_security_session_conf sess_conf = {
+ .action_type = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
+ .protocol = RTE_SECURITY_PROTOCOL_PDCP,
+ {.pdcp = {
+ .bearer = 0x16,
+ .domain = options->pdcp_domain,
+ .pkt_dir = 0,
+ .sn_size = options->pdcp_sn_sz,
+ .hfn = 0x1,
+ .hfn_threshold = 0x70C0A,
+ } },
+ .crypto_xform = &cipher_xform
+ };
+
+ struct rte_security_ctx *ctx = (struct rte_security_ctx *)
+ rte_cryptodev_get_sec_ctx(dev_id);
+
+ /* Create security session */
+ return (void *)rte_security_session_create(ctx,
+ &sess_conf, sess_mp);
+ }
+#endif
sess = rte_cryptodev_sym_session_create(sess_mp);
/*
* cipher only
@@ -657,6 +767,11 @@ cperf_get_op_functions(const struct cperf_options *options,
op_fns->populate_ops = cperf_set_ops_cipher;
return 0;
}
-
+#ifdef RTE_LIBRTE_SECURITY
+ if (options->op_type == CPERF_PDCP) {
+ op_fns->populate_ops = cperf_set_ops_security;
+ return 0;
+ }
+#endif
return -1;
}
diff --git a/app/test-crypto-perf/cperf_options.h b/app/test-crypto-perf/cperf_options.h
index f5bf03c..1ed0a77 100644
--- a/app/test-crypto-perf/cperf_options.h
+++ b/app/test-crypto-perf/cperf_options.h
@@ -7,6 +7,9 @@
#include <rte_crypto.h>
#include <rte_cryptodev.h>
+#ifdef RTE_LIBRTE_SECURITY
+#include <rte_security.h>
+#endif
#define CPERF_PTEST_TYPE ("ptest")
#define CPERF_SILENT ("silent")
@@ -44,6 +47,11 @@
#define CPERF_DIGEST_SZ ("digest-sz")
+#ifdef RTE_LIBRTE_SECURITY
+#define CPERF_PDCP_SN_SZ ("pdcp-sn-sz")
+#define CPERF_PDCP_DOMAIN ("pdcp-domain")
+#endif
+
#define CPERF_CSV ("csv-friendly")
/* benchmark-specific options */
@@ -66,7 +74,8 @@ enum cperf_op_type {
CPERF_AUTH_ONLY,
CPERF_CIPHER_THEN_AUTH,
CPERF_AUTH_THEN_CIPHER,
- CPERF_AEAD
+ CPERF_AEAD,
+ CPERF_PDCP
};
extern const char *cperf_op_type_strs[];
@@ -110,6 +119,10 @@ struct cperf_options {
uint16_t digest_sz;
+#ifdef RTE_LIBRTE_SECURITY
+ uint16_t pdcp_sn_sz;
+ enum rte_security_pdcp_domain pdcp_domain;
+#endif
char device_type[RTE_CRYPTODEV_NAME_MAX_LEN];
enum cperf_op_type op_type;
diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c
index eba4cf7..f43c5be 100644
--- a/app/test-crypto-perf/cperf_options_parsing.c
+++ b/app/test-crypto-perf/cperf_options_parsing.c
@@ -442,6 +442,10 @@ parse_op_type(struct cperf_options *opts, const char *arg)
{
cperf_op_type_strs[CPERF_AEAD],
CPERF_AEAD
+ },
+ {
+ cperf_op_type_strs[CPERF_PDCP],
+ CPERF_PDCP
}
};
@@ -616,6 +620,63 @@ parse_digest_sz(struct cperf_options *opts, const char *arg)
return parse_uint16_t(&opts->digest_sz, arg);
}
+#ifdef RTE_LIBRTE_SECURITY
+static int
+parse_pdcp_sn_sz(struct cperf_options *opts, const char *arg)
+{
+ uint32_t val = 0;
+ int ret = parse_uint32_t(&val, arg);
+
+ if (ret < 0)
+ return ret;
+
+ if (val != RTE_SECURITY_PDCP_SN_SIZE_5 &&
+ val != RTE_SECURITY_PDCP_SN_SIZE_7 &&
+ val != RTE_SECURITY_PDCP_SN_SIZE_12 &&
+ val != RTE_SECURITY_PDCP_SN_SIZE_15 &&
+ val != RTE_SECURITY_PDCP_SN_SIZE_18) {
+ printf("\nInvalid pdcp SN size: %u\n", val);
+ return -ERANGE;
+ }
+ opts->pdcp_sn_sz = val;
+
+ return 0;
+}
+
+const char *cperf_pdcp_domain_strs[] = {
+ [RTE_SECURITY_PDCP_MODE_CONTROL] = "control",
+ [RTE_SECURITY_PDCP_MODE_DATA] = "data"
+};
+
+static int
+parse_pdcp_domain(struct cperf_options *opts, const char *arg)
+{
+ struct name_id_map pdcp_domain_namemap[] = {
+ {
+ cperf_pdcp_domain_strs
+ [RTE_SECURITY_PDCP_MODE_CONTROL],
+ RTE_SECURITY_PDCP_MODE_CONTROL },
+ {
+ cperf_pdcp_domain_strs
+ [RTE_SECURITY_PDCP_MODE_DATA],
+ RTE_SECURITY_PDCP_MODE_DATA
+ }
+ };
+
+ int id = get_str_key_id_mapping(pdcp_domain_namemap,
+ RTE_DIM(pdcp_domain_namemap), arg);
+ if (id < 0) {
+ RTE_LOG(ERR, USER1, "invalid pdcp domain specified"
+ "\n");
+ return -1;
+ }
+
+ opts->pdcp_domain = (enum rte_security_pdcp_domain)id;
+
+ return 0;
+}
+#endif
+
static int
parse_auth_iv_sz(struct cperf_options *opts, const char *arg)
{
@@ -756,6 +817,10 @@ static struct option lgopts[] = {
{ CPERF_DIGEST_SZ, required_argument, 0, 0 },
+#ifdef RTE_LIBRTE_SECURITY
+ { CPERF_PDCP_SN_SZ, required_argument, 0, 0 },
+ { CPERF_PDCP_DOMAIN, required_argument, 0, 0 },
+#endif
{ CPERF_CSV, no_argument, 0, 0},
{ CPERF_PMDCC_DELAY_MS, required_argument, 0, 0 },
@@ -822,6 +887,10 @@ cperf_options_default(struct cperf_options *opts)
opts->digest_sz = 12;
opts->pmdcc_delay = 0;
+#ifdef RTE_LIBRTE_SECURITY
+ opts->pdcp_sn_sz = 12;
+ opts->pdcp_domain = RTE_SECURITY_PDCP_MODE_CONTROL;
+#endif
}
static int
@@ -857,6 +926,10 @@ cperf_opts_parse_long(int opt_idx, struct cperf_options *opts)
{ CPERF_AEAD_IV_SZ, parse_aead_iv_sz },
{ CPERF_AEAD_AAD_SZ, parse_aead_aad_sz },
{ CPERF_DIGEST_SZ, parse_digest_sz },
+#ifdef RTE_LIBRTE_SECURITY
+ { CPERF_PDCP_SN_SZ, parse_pdcp_sn_sz },
+ { CPERF_PDCP_DOMAIN, parse_pdcp_domain },
+#endif
{ CPERF_CSV, parse_csv_friendly},
{ CPERF_PMDCC_DELAY_MS, parse_pmd_cyclecount_delay_ms},
};
diff --git a/app/test-crypto-perf/cperf_test_common.c b/app/test-crypto-perf/cperf_test_common.c
index e803dc1..85603ee 100644
--- a/app/test-crypto-perf/cperf_test_common.c
+++ b/app/test-crypto-perf/cperf_test_common.c
@@ -30,6 +30,7 @@ fill_single_seg_mbuf(struct rte_mbuf *m, struct rte_mempool *mp,
mbuf_offset + mbuf_hdr_size;
m->buf_len = segment_sz;
m->data_len = data_len;
+ m->pkt_len = data_len;
/* Use headroom specified for the buffer */
m->data_off = headroom;
diff --git a/app/test-crypto-perf/cperf_test_throughput.c b/app/test-crypto-perf/cperf_test_throughput.c
index 972d520..35c5102 100644
--- a/app/test-crypto-perf/cperf_test_throughput.c
+++ b/app/test-crypto-perf/cperf_test_throughput.c
@@ -32,17 +32,27 @@ struct cperf_throughput_ctx {
static void
cperf_throughput_test_free(struct cperf_throughput_ctx *ctx)
{
- if (ctx) {
- if (ctx->sess) {
+ if (!ctx)
+ return;
+ if (ctx->sess) {
+#ifdef RTE_LIBRTE_SECURITY
+ if (ctx->options->op_type == CPERF_PDCP) {
+ struct rte_security_ctx *sec_ctx =
+ (struct rte_security_ctx *)
+ rte_cryptodev_get_sec_ctx(ctx->dev_id);
+ rte_security_session_destroy(sec_ctx,
+ (struct rte_security_session *)ctx->sess);
+ } else
+#endif
+ {
rte_cryptodev_sym_session_clear(ctx->dev_id, ctx->sess);
rte_cryptodev_sym_session_free(ctx->sess);
}
-
- if (ctx->pool)
- rte_mempool_free(ctx->pool);
-
- rte_free(ctx);
}
+ if (ctx->pool)
+ rte_mempool_free(ctx->pool);
+
+ rte_free(ctx);
}
void *
diff --git a/app/test-crypto-perf/cperf_test_vectors.c b/app/test-crypto-perf/cperf_test_vectors.c
index 1af9524..4164165 100644
--- a/app/test-crypto-perf/cperf_test_vectors.c
+++ b/app/test-crypto-perf/cperf_test_vectors.c
@@ -412,6 +412,61 @@ cperf_test_vector_get_dummy(struct cperf_options *options)
t_vec->plaintext.data = plaintext;
t_vec->plaintext.length = options->max_buffer_size;
+ if (options->op_type == CPERF_PDCP) {
+ if (options->cipher_algo == RTE_CRYPTO_CIPHER_NULL) {
+ t_vec->cipher_key.length = 0;
+ t_vec->ciphertext.data = plaintext;
+ t_vec->cipher_key.data = NULL;
+ } else {
+ t_vec->cipher_key.length = options->cipher_key_sz;
+ t_vec->ciphertext.data = ciphertext;
+ t_vec->cipher_key.data = cipher_key;
+ }
+
+ /* Init IV data ptr */
+ t_vec->cipher_iv.data = NULL;
+
+ if (options->cipher_iv_sz != 0) {
+ /* Set IV parameters */
+ t_vec->cipher_iv.data = rte_malloc(NULL,
+ options->cipher_iv_sz, 16);
+ if (t_vec->cipher_iv.data == NULL) {
+ rte_free(t_vec);
+ return NULL;
+ }
+ memcpy(t_vec->cipher_iv.data, iv, options->cipher_iv_sz);
+ }
+ t_vec->ciphertext.length = options->max_buffer_size;
+ t_vec->cipher_iv.length = options->cipher_iv_sz;
+ t_vec->data.cipher_offset = 0;
+ t_vec->data.cipher_length = options->max_buffer_size;
+ if (options->auth_algo == RTE_CRYPTO_AUTH_NULL) {
+ t_vec->auth_key.length = 0;
+ t_vec->auth_key.data = NULL;
+ t_vec->digest.data = NULL;
+ t_vec->digest.length = 0;
+ } else {
+ t_vec->auth_key.length = options->auth_key_sz;
+ t_vec->auth_key.data = auth_key;
+
+ t_vec->digest.data = rte_malloc(NULL,
+ options->digest_sz,
+ 16);
+ if (t_vec->digest.data == NULL) {
+ rte_free(t_vec->cipher_iv.data);
+ rte_free(t_vec);
+ return NULL;
+ }
+ t_vec->digest.phys_addr =
+ rte_malloc_virt2iova(t_vec->digest.data);
+ t_vec->digest.length = options->digest_sz;
+ memcpy(t_vec->digest.data, digest,
+ options->digest_sz);
+ }
+ t_vec->data.auth_offset = 0;
+ t_vec->data.auth_length = options->max_buffer_size;
+ }
+
if (options->op_type == CPERF_CIPHER_ONLY ||
options->op_type == CPERF_CIPHER_THEN_AUTH ||
options->op_type == CPERF_AUTH_THEN_CIPHER) {
diff --git a/app/test-crypto-perf/cperf_test_verify.c b/app/test-crypto-perf/cperf_test_verify.c
index bbdf37d..833bc9a 100644
--- a/app/test-crypto-perf/cperf_test_verify.c
+++ b/app/test-crypto-perf/cperf_test_verify.c
@@ -203,11 +203,19 @@ cperf_mbuf_set(struct rte_mbuf *mbuf,
{
uint32_t segment_sz = options->segment_sz;
uint8_t *mbuf_data;
- uint8_t *test_data =
- (options->cipher_op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?
+ uint8_t *test_data;
+ uint32_t remaining_bytes = options->max_buffer_size;
+
+ if (options->op_type == CPERF_AEAD) {
+ test_data = (options->aead_op == RTE_CRYPTO_AEAD_OP_ENCRYPT) ?
test_vector->plaintext.data :
test_vector->ciphertext.data;
- uint32_t remaining_bytes = options->max_buffer_size;
+ } else {
+ test_data =
+ (options->cipher_op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) ?
+ test_vector->plaintext.data :
+ test_vector->ciphertext.data;
+ }
while (remaining_bytes) {
mbuf_data = rte_pktmbuf_mtod(mbuf, uint8_t *);
diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
index 2109e70..52a1860 100644
--- a/app/test-crypto-perf/main.c
+++ b/app/test-crypto-perf/main.c
@@ -38,7 +38,8 @@ const char *cperf_op_type_strs[] = {
[CPERF_AUTH_ONLY] = "auth-only",
[CPERF_CIPHER_THEN_AUTH] = "cipher-then-auth",
[CPERF_AUTH_THEN_CIPHER] = "auth-then-cipher",
- [CPERF_AEAD] = "aead"
+ [CPERF_AEAD] = "aead",
+ [CPERF_PDCP] = "pdcp"
};
const struct cperf_test cperf_testmap[] = {
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index d735b18..0674396 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -12,4 +12,4 @@ sources = files('cperf_ops.c',
'cperf_test_vectors.c',
'cperf_test_verify.c',
'main.c')
-deps += ['cryptodev']
+deps += ['cryptodev', 'security']
diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c
index e7cf75a..b3af4bf 100644
--- a/app/test-eventdev/test_perf_common.c
+++ b/app/test-eventdev/test_perf_common.c
@@ -133,8 +133,9 @@ perf_event_timer_producer(void *arg)
fflush(stdout);
rte_delay_ms(1000);
printf("%s(): lcore %d Average event timer arm latency = %.3f us\n",
- __func__, rte_lcore_id(), (float)(arm_latency / count) /
- (rte_get_timer_hz() / 1000000));
+ __func__, rte_lcore_id(),
+ count ? (float)(arm_latency / count) /
+ (rte_get_timer_hz() / 1000000) : 0);
return 0;
}
@@ -194,8 +195,9 @@ perf_event_timer_producer_burst(void *arg)
fflush(stdout);
rte_delay_ms(1000);
printf("%s(): lcore %d Average event timer arm latency = %.3f us\n",
- __func__, rte_lcore_id(), (float)(arm_latency / count) /
- (rte_get_timer_hz() / 1000000));
+ __func__, rte_lcore_id(),
+ count ? (float)(arm_latency / count) /
+ (rte_get_timer_hz() / 1000000) : 0);
return 0;
}
diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c
index 160461f..fa91bf2 100644
--- a/app/test-eventdev/test_pipeline_common.c
+++ b/app/test-eventdev/test_pipeline_common.c
@@ -196,7 +196,12 @@ pipeline_ethdev_setup(struct evt_test *test, struct evt_options *opt)
struct rte_eth_conf local_port_conf = port_conf;
uint32_t caps = 0;
- rte_event_eth_tx_adapter_caps_get(opt->dev_id, i, &caps);
+ ret = rte_event_eth_tx_adapter_caps_get(opt->dev_id, i, &caps);
+ if (ret != 0) {
+ evt_err("failed to get event tx adapter[%d] caps", i);
+ return ret;
+ }
+
if (!(caps & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT))
t->internal_port = 0;
@@ -424,7 +429,7 @@ int
pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt)
{
struct test_pipeline *t = evt_test_priv(test);
- int i;
+ int i, ret;
if (!opt->mbuf_sz)
opt->mbuf_sz = RTE_MBUF_DEFAULT_BUF_SIZE;
@@ -437,7 +442,13 @@ pipeline_mempool_setup(struct evt_test *test, struct evt_options *opt)
uint16_t data_size = 0;
memset(&dev_info, 0, sizeof(dev_info));
- rte_eth_dev_info_get(i, &dev_info);
+ ret = rte_eth_dev_info_get(i, &dev_info);
+ if (ret != 0) {
+ evt_err("Error during getting device (port %u) info: %s\n",
+ i, strerror(-ret));
+ return ret;
+ }
+
if (dev_info.rx_desc_lim.nb_mtu_seg_max != UINT16_MAX &&
dev_info.rx_desc_lim.nb_mtu_seg_max != 0) {
data_size = opt->max_pkt_sz /
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 9f3e0b2..2d74df8 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -241,6 +241,9 @@ static void cmd_help_long_parsed(void *parsed_result,
"show port (port_id) rxq|txq (queue_id) desc (desc_id) status"
" Show status of rx|tx descriptor.\n\n"
+
+ "show port (port_id) macs|mcast_macs"
+ " Display list of mac addresses added to port.\n\n"
);
}
@@ -19171,6 +19174,56 @@ cmdline_parse_inst_t cmd_set_port_ptypes = {
},
};
+/* *** display mac addresses added to a port *** */
+struct cmd_showport_macs_result {
+ cmdline_fixed_string_t cmd_show;
+ cmdline_fixed_string_t cmd_port;
+ cmdline_fixed_string_t cmd_keyword;
+ portid_t cmd_pid;
+};
+
+static void
+cmd_showport_macs_parsed(void *parsed_result,
+ __attribute__((unused)) struct cmdline *cl,
+ __attribute__((unused)) void *data)
+{
+ struct cmd_showport_macs_result *res = parsed_result;
+
+ if (port_id_is_invalid(res->cmd_pid, ENABLED_WARN))
+ return;
+
+ if (!strcmp(res->cmd_keyword, "macs"))
+ show_macs(res->cmd_pid);
+ else if (!strcmp(res->cmd_keyword, "mcast_macs"))
+ show_mcast_macs(res->cmd_pid);
+}
+
+cmdline_parse_token_string_t cmd_showport_macs_show =
+ TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result,
+ cmd_show, "show");
+cmdline_parse_token_string_t cmd_showport_macs_port =
+ TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result,
+ cmd_port, "port");
+cmdline_parse_token_num_t cmd_showport_macs_pid =
+ TOKEN_NUM_INITIALIZER(struct cmd_showport_macs_result,
+ cmd_pid, UINT16);
+cmdline_parse_token_string_t cmd_showport_macs_keyword =
+ TOKEN_STRING_INITIALIZER(struct cmd_showport_macs_result,
+ cmd_keyword, "macs#mcast_macs");
+
+cmdline_parse_inst_t cmd_showport_macs = {
+ .f = cmd_showport_macs_parsed,
+ .data = NULL,
+ .help_str = "show port <port_id> macs|mcast_macs",
+ .tokens = {
+ (void *)&cmd_showport_macs_show,
+ (void *)&cmd_showport_macs_port,
+ (void *)&cmd_showport_macs_pid,
+ (void *)&cmd_showport_macs_keyword,
+ NULL,
+ },
+};
+
/* ******************************************************************************** */
/* list of instructions */
@@ -19289,6 +19342,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_setup_rxtx_queue,
(cmdline_parse_inst_t *)&cmd_config_rss_reta,
(cmdline_parse_inst_t *)&cmd_showport_reta,
+ (cmdline_parse_inst_t *)&cmd_showport_macs,
(cmdline_parse_inst_t *)&cmd_config_burst,
(cmdline_parse_inst_t *)&cmd_config_thresh,
(cmdline_parse_inst_t *)&cmd_config_threshold,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index d599682..9da1ffb 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -3708,6 +3708,14 @@ mcast_addr_pool_extend(struct rte_port *port)
}
static void
+mcast_addr_pool_append(struct rte_port *port, struct rte_ether_addr *mc_addr)
+{
+ if (mcast_addr_pool_extend(port) != 0)
+ return;
+ rte_ether_addr_copy(mc_addr, &port->mc_addr_pool[port->mc_addr_nb - 1]);
+}
+
+static void
mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx)
{
port->mc_addr_nb--;
@@ -3725,7 +3733,7 @@ mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx)
sizeof(struct rte_ether_addr) * (port->mc_addr_nb - addr_idx));
}
-static void
+static int
eth_port_multicast_addr_list_set(portid_t port_id)
{
struct rte_port *port;
@@ -3734,10 +3742,11 @@ eth_port_multicast_addr_list_set(portid_t port_id)
port = &ports[port_id];
diag = rte_eth_dev_set_mc_addr_list(port_id, port->mc_addr_pool,
port->mc_addr_nb);
- if (diag == 0)
- return;
- printf("rte_eth_dev_set_mc_addr_list(port=%d, nb=%u) failed. diag=%d\n",
- port->mc_addr_nb, port_id, -diag);
+ if (diag < 0)
+ printf("rte_eth_dev_set_mc_addr_list(port=%d, nb=%u) failed. diag=%d\n",
+ port_id, port->mc_addr_nb, diag);
+
+ return diag;
}
void
@@ -3762,10 +3771,10 @@ mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr)
}
}
- if (mcast_addr_pool_extend(port) != 0)
- return;
- rte_ether_addr_copy(mc_addr, &port->mc_addr_pool[i]);
- eth_port_multicast_addr_list_set(port_id);
+ mcast_addr_pool_append(port, mc_addr);
+ if (eth_port_multicast_addr_list_set(port_id) < 0)
+ /* Rollback on failure, remove the address from the pool */
+ mcast_addr_pool_remove(port, i);
}
void
@@ -3792,7 +3801,9 @@ mcast_addr_remove(portid_t port_id, struct rte_ether_addr *mc_addr)
}
mcast_addr_pool_remove(port, i);
- eth_port_multicast_addr_list_set(port_id);
+ if (eth_port_multicast_addr_list_set(port_id) < 0)
+ /* Rollback on failure, add the address back into the pool */
+ mcast_addr_pool_append(port, mc_addr);
}
void
@@ -3965,3 +3976,60 @@ port_queue_region_info_display(portid_t port_id, void *buf)
printf("\n\n");
}
+
+void
+show_macs(portid_t port_id)
+{
+ char buf[RTE_ETHER_ADDR_FMT_SIZE];
+ struct rte_eth_dev_info dev_info;
+ struct rte_ether_addr *addr;
+ uint32_t i, num_macs = 0;
+ struct rte_eth_dev *dev;
+
+ dev = &rte_eth_devices[port_id];
+
+ rte_eth_dev_info_get(port_id, &dev_info);
+
+ for (i = 0; i < dev_info.max_mac_addrs; i++) {
+ addr = &dev->data->mac_addrs[i];
+
+ /* skip zero address */
+ if (rte_is_zero_ether_addr(addr))
+ continue;
+
+ num_macs++;
+ }
+
+ printf("Number of MAC address added: %d\n", num_macs);
+
+ for (i = 0; i < dev_info.max_mac_addrs; i++) {
+ addr = &dev->data->mac_addrs[i];
+
+ /* skip zero address */
+ if (rte_is_zero_ether_addr(addr))
+ continue;
+
+ rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, addr);
+ printf(" %s\n", buf);
+ }
+}
+
+void
+show_mcast_macs(portid_t port_id)
+{
+ char buf[RTE_ETHER_ADDR_FMT_SIZE];
+ struct rte_ether_addr *addr;
+ struct rte_port *port;
+ uint32_t i;
+
+ port = &ports[port_id];
+
+ printf("Number of Multicast MAC address added: %d\n", port->mc_addr_nb);
+
+ for (i = 0; i < port->mc_addr_nb; i++) {
+ addr = &port->mc_addr_pool[i];
+
+ rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, addr);
+ printf(" %s\n", buf);
+ }
+}
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index deca7a6..2e7a504 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -1363,12 +1363,19 @@ launch_args_parse(int argc, char** argv)
break;
default:
usage(argv[0]);
+ printf("Invalid option: %s\n", argv[optind]);
rte_exit(EXIT_FAILURE,
"Command line is incomplete or incorrect\n");
break;
}
}
+ if (optind != argc) {
+ usage(argv[0]);
+ printf("Invalid parameter: %s\n", argv[optind]);
+ rte_exit(EXIT_FAILURE, "Command line is incorrect\n");
+ }
+
/* Set offload configuration from command line parameters. */
rx_mode.offloads = rx_offloads;
tx_mode.offloads = tx_offloads;
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 446da36..b374682 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -979,7 +979,7 @@ check_socket_id(const unsigned int socket_id)
queueid_t
get_allowed_max_nb_rxq(portid_t *pid)
{
- queueid_t allowed_max_rxq = MAX_QUEUE_ID;
+ queueid_t allowed_max_rxq = RTE_MAX_QUEUES_PER_PORT;
bool max_rxq_valid = false;
portid_t pi;
struct rte_eth_dev_info dev_info;
@@ -1029,7 +1029,7 @@ check_nb_rxq(queueid_t rxq)
queueid_t
get_allowed_max_nb_txq(portid_t *pid)
{
- queueid_t allowed_max_txq = MAX_QUEUE_ID;
+ queueid_t allowed_max_txq = RTE_MAX_QUEUES_PER_PORT;
bool max_txq_valid = false;
portid_t pi;
struct rte_eth_dev_info dev_info;
@@ -1079,7 +1079,7 @@ check_nb_txq(queueid_t txq)
queueid_t
get_allowed_max_nb_hairpinq(portid_t *pid)
{
- queueid_t allowed_max_hairpinq = MAX_QUEUE_ID;
+ queueid_t allowed_max_hairpinq = RTE_MAX_QUEUES_PER_PORT;
portid_t pi;
struct rte_eth_hairpin_cap cap;
@@ -2557,6 +2557,9 @@ detach_port_device(portid_t port_id)
printf("Removing a device...\n");
+ if (port_id_is_invalid(port_id, ENABLED_WARN))
+ return;
+
dev = rte_eth_devices[port_id].device;
if (dev == NULL) {
printf("Device already removed\n");
@@ -2616,6 +2619,7 @@ detach_device(char *identifier)
if (ports[port_id].port_status != RTE_PORT_CLOSED) {
if (ports[port_id].port_status != RTE_PORT_STOPPED) {
printf("Port %u not stopped\n", port_id);
+ rte_eth_iterator_cleanup(&iterator);
return;
}
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 90694a3..857a11f 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -58,8 +58,6 @@ typedef uint16_t portid_t;
typedef uint16_t queueid_t;
typedef uint16_t streamid_t;
-#define MAX_QUEUE_ID ((1 << (sizeof(queueid_t) * 8)) - 1)
-
#if defined RTE_LIBRTE_PMD_SOFTNIC
#define SOFTNIC 1
#else
@@ -179,22 +177,22 @@ struct rte_port {
uint8_t need_reconfig_queues; /**< need reconfiguring queues or not */
uint8_t rss_flag; /**< enable rss or not */
uint8_t dcb_flag; /**< enable dcb */
- uint16_t nb_rx_desc[MAX_QUEUE_ID+1]; /**< per queue rx desc number */
- uint16_t nb_tx_desc[MAX_QUEUE_ID+1]; /**< per queue tx desc number */
- struct rte_eth_rxconf rx_conf[MAX_QUEUE_ID+1]; /**< per queue rx configuration */
- struct rte_eth_txconf tx_conf[MAX_QUEUE_ID+1]; /**< per queue tx configuration */
+ uint16_t nb_rx_desc[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue rx desc number */
+ uint16_t nb_tx_desc[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue tx desc number */
+ struct rte_eth_rxconf rx_conf[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue rx configuration */
+ struct rte_eth_txconf tx_conf[RTE_MAX_QUEUES_PER_PORT+1]; /**< per queue tx configuration */
struct rte_ether_addr *mc_addr_pool; /**< pool of multicast addrs */
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
uint8_t slave_flag; /**< bonding slave port */
struct port_flow *flow_list; /**< Associated flows. */
- const struct rte_eth_rxtx_callback *rx_dump_cb[MAX_QUEUE_ID+1];
- const struct rte_eth_rxtx_callback *tx_dump_cb[MAX_QUEUE_ID+1];
+ const struct rte_eth_rxtx_callback *rx_dump_cb[RTE_MAX_QUEUES_PER_PORT+1];
+ const struct rte_eth_rxtx_callback *tx_dump_cb[RTE_MAX_QUEUES_PER_PORT+1];
#ifdef SOFTNIC
struct softnic_port softport; /**< softnic params */
#endif
/**< metadata value to insert in Tx packets. */
uint32_t tx_metadata;
- const struct rte_eth_rxtx_callback *tx_set_md_cb[MAX_QUEUE_ID+1];
+ const struct rte_eth_rxtx_callback *tx_set_md_cb[RTE_MAX_QUEUES_PER_PORT+1];
};
/**
@@ -837,6 +835,9 @@ int eth_link_get_nowait_print_err(uint16_t port_id, struct rte_eth_link *link);
int eth_macaddr_get_print_err(uint16_t port_id,
struct rte_ether_addr *mac_addr);
+/* Functions to display the set of MAC addresses added to a port*/
+void show_macs(portid_t port_id);
+void show_mcast_macs(portid_t port_id);
/* Functions to manage the set of filtered Multicast MAC addresses */
void mcast_addr_add(portid_t port_id, struct rte_ether_addr *mc_addr);
diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c
index 539043c..3caf281 100644
--- a/app/test-pmd/txonly.c
+++ b/app/test-pmd/txonly.c
@@ -159,7 +159,7 @@ pkt_burst_prepare(struct rte_mbuf *pkt, struct rte_mempool *mbp,
uint8_t i;
if (unlikely(tx_pkt_split == TX_PKT_SPLIT_RND))
- nb_segs = random() % tx_pkt_nb_segs + 1;
+ nb_segs = rte_rand() % tx_pkt_nb_segs + 1;
else
nb_segs = tx_pkt_nb_segs;
diff --git a/app/test/meson.build b/app/test/meson.build
index ff59c31..fb49d80 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -459,4 +459,3 @@ foreach arg : dump_test_names
is_parallel : false,
suite : 'debug-tests')
endforeach
-
diff --git a/app/test/test_cfgfile.c b/app/test/test_cfgfile.c
index 37435b3..2f596af 100644
--- a/app/test/test_cfgfile.c
+++ b/app/test/test_cfgfile.c
@@ -1,33 +1,5 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2017 Wind River Systems Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2017 Wind River Systems, Inc.
*/
#include <stdio.h>
diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h
index 9afa3ae..8307fcf 100644
--- a/app/test/test_cryptodev_aes_test_vectors.h
+++ b/app/test/test_cryptodev_aes_test_vectors.h
@@ -1773,6 +1773,7 @@ static const struct blockcipher_test_case aes_chain_test_cases[] = {
BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR |
BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX |
BLOCKCIPHER_TEST_TARGET_PMD_NITROX |
+ BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX2
},
{
@@ -2248,6 +2249,7 @@ static const struct blockcipher_test_case aes_cipheronly_test_cases[] = {
BLOCKCIPHER_TEST_TARGET_PMD_DPAA_SEC |
BLOCKCIPHER_TEST_TARGET_PMD_CAAM_JR |
BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX |
+ BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
BLOCKCIPHER_TEST_TARGET_PMD_OCTEONTX2
},
{
diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c
index 652e458..8d42462 100644
--- a/app/test/test_event_crypto_adapter.c
+++ b/app/test/test_event_crypto_adapter.c
@@ -171,6 +171,7 @@ test_op_forward_mode(uint8_t session_less)
struct rte_event ev;
uint32_t cap;
int ret;
+ uint8_t cipher_key[17];
memset(&m_data, 0, sizeof(m_data));
@@ -186,6 +187,11 @@ test_op_forward_mode(uint8_t session_less)
cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+ cipher_xform.cipher.key.data = cipher_key;
+ cipher_xform.cipher.key.length = 16;
+ cipher_xform.cipher.iv.offset = IV_OFFSET;
+ cipher_xform.cipher.iv.length = 16;
+
op = rte_crypto_op_alloc(params.op_mpool,
RTE_CRYPTO_OP_TYPE_SYMMETRIC);
TEST_ASSERT_NOT_NULL(op,
@@ -296,6 +302,10 @@ test_sessionless_with_op_forward_mode(void)
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) &&
!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
map_adapter_service_core();
+ else {
+ if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD))
+ return TEST_SKIPPED;
+ }
TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID),
"Failed to start event crypto adapter");
@@ -317,6 +327,10 @@ test_session_with_op_forward_mode(void)
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) &&
!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
map_adapter_service_core();
+ else {
+ if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD))
+ return TEST_SKIPPED;
+ }
TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID
), "Failed to start event crypto adapter");
@@ -364,6 +378,7 @@ test_op_new_mode(uint8_t session_less)
struct rte_mbuf *m;
uint32_t cap;
int ret;
+ uint8_t cipher_key[17];
memset(&m_data, 0, sizeof(m_data));
@@ -379,6 +394,11 @@ test_op_new_mode(uint8_t session_less)
cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+ cipher_xform.cipher.key.data = cipher_key;
+ cipher_xform.cipher.key.length = 16;
+ cipher_xform.cipher.iv.offset = IV_OFFSET;
+ cipher_xform.cipher.iv.length = 16;
+
op = rte_crypto_op_alloc(params.op_mpool,
RTE_CRYPTO_OP_TYPE_SYMMETRIC);
TEST_ASSERT_NOT_NULL(op, "Failed to allocate crypto_op!\n");
@@ -446,6 +466,10 @@ test_sessionless_with_op_new_mode(void)
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) &&
!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
map_adapter_service_core();
+ else {
+ if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
+ return TEST_SKIPPED;
+ }
/* start the event crypto adapter */
TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID),
@@ -468,6 +492,10 @@ test_session_with_op_new_mode(void)
if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) &&
!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
map_adapter_service_core();
+ else {
+ if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW))
+ return TEST_SKIPPED;
+ }
TEST_ASSERT_SUCCESS(rte_event_crypto_adapter_start(TEST_ADAPTER_ID),
"Failed to start event crypto adapter");
@@ -877,6 +905,7 @@ crypto_teardown(void)
params.session_mpool = NULL;
}
if (params.session_priv_mpool != NULL) {
+ rte_mempool_avail_count(params.session_priv_mpool);
rte_mempool_free(params.session_priv_mpool);
params.session_priv_mpool = NULL;
}
diff --git a/app/test/test_rcu_qsbr.c b/app/test/test_rcu_qsbr.c
index 85d80e0..b60dc50 100644
--- a/app/test/test_rcu_qsbr.c
+++ b/app/test/test_rcu_qsbr.c
@@ -9,6 +9,7 @@
#include <rte_hash_crc.h>
#include <rte_malloc.h>
#include <rte_cycles.h>
+#include <rte_random.h>
#include <unistd.h>
#include "test.h"
@@ -168,6 +169,7 @@ test_rcu_qsbr_thread_unregister(void)
{
unsigned int num_threads[3] = {1, RTE_MAX_LCORE, 1};
unsigned int i, j;
+ unsigned int skip_thread_id;
uint64_t token;
int ret;
@@ -227,10 +229,11 @@ test_rcu_qsbr_thread_unregister(void)
token = rte_rcu_qsbr_start(t[0]);
TEST_RCU_QSBR_RETURN_IF_ERROR(
(token != (TEST_RCU_QSBR_CNT_INIT + 1)), "QSBR Start");
+ skip_thread_id = rte_rand() % RTE_MAX_LCORE;
/* Update quiescent state counter */
for (i = 0; i < num_threads[j]; i++) {
/* Skip one update */
- if (i == (RTE_MAX_LCORE - 10))
+ if ((j == 1) && (i == skip_thread_id))
continue;
rte_rcu_qsbr_quiescent(t[0],
(j == 2) ? (RTE_MAX_LCORE - 1) : i);
@@ -242,7 +245,7 @@ test_rcu_qsbr_thread_unregister(void)
TEST_RCU_QSBR_RETURN_IF_ERROR((ret == 0),
"Non-blocking QSBR check");
/* Update the previously skipped thread */
- rte_rcu_qsbr_quiescent(t[0], RTE_MAX_LCORE - 10);
+ rte_rcu_qsbr_quiescent(t[0], skip_thread_id);
}
/* Validate the updates */
diff --git a/app/test/test_rib6.c b/app/test/test_rib6.c
index a86e465..c77df11 100644
--- a/app/test/test_rib6.c
+++ b/app/test/test_rib6.c
@@ -370,4 +370,3 @@ test_slow_rib6(void)
REGISTER_TEST_COMMAND(rib6_autotest, test_rib6);
REGISTER_TEST_COMMAND(rib6_slow_autotest, test_slow_rib6);
-
diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c
index 9fe38f5..a922c7d 100644
--- a/app/test/test_service_cores.c
+++ b/app/test/test_service_cores.c
@@ -483,7 +483,7 @@ service_lcore_en_dis_able(void)
int ret = rte_eal_remote_launch(service_remote_launch_func, NULL,
slcore_id);
TEST_ASSERT_EQUAL(0, ret, "Ex-service core remote launch failed.");
- rte_eal_mp_wait_lcore();
+ rte_eal_wait_lcore(slcore_id);
TEST_ASSERT_EQUAL(1, service_remote_launch_flag,
"Ex-service core function call had no effect.");
diff --git a/app/test/test_thash.c b/app/test/test_thash.c
index 5a6912c..a6aadd1 100644
--- a/app/test/test_thash.c
+++ b/app/test/test_thash.c
@@ -1,34 +1,5 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Vladimir Medvedkin <medvedkinv@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2015-2019 Vladimir Medvedkin <medvedkinv@gmail.com>
*/
#include <rte_common.h>
diff --git a/buildtools/check-experimental-syms.sh b/buildtools/check-experimental-syms.sh
index 145dd70..f3603e5 100755
--- a/buildtools/check-experimental-syms.sh
+++ b/buildtools/check-experimental-syms.sh
@@ -23,10 +23,10 @@ trap 'rm -f "$DUMPFILE"' EXIT
objdump -t $OBJFILE >$DUMPFILE
ret=0
-for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE`
+for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
do
- if grep -q "\.text.*$SYM$" $DUMPFILE &&
- ! grep -q "\.text\.experimental.*$SYM$" $DUMPFILE
+ if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
+ ! grep -q "\.text\.experimental.*[[:space:]]$SYM$" $DUMPFILE
then
cat >&2 <<- END_OF_MESSAGE
$SYM is not flagged as experimental
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 8d0b9e0..6ef2c57 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -14,3 +14,6 @@ if python3.found()
else
map_to_def_cmd = ['meson', 'runpython', files('map_to_def.py')]
endif
+
+# stable ABI always starts with "DPDK_"
+is_experimental_cmd = [find_program('grep', 'findstr'), '^DPDK_']
diff --git a/config/arm/arm64_armada_linux_gcc b/config/arm/arm64_armada_linux_gcc
index 6e6d56f..fa40c03 100644
--- a/config/arm/arm64_armada_linux_gcc
+++ b/config/arm/arm64_armada_linux_gcc
@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-ar'
as = 'aarch64-linux-gnu-as'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_armv8_linux_gcc b/config/arm/arm64_armv8_linux_gcc
index 67dd9a9..88f0ff9 100644
--- a/config/arm/arm64_armv8_linux_gcc
+++ b/config/arm/arm64_armv8_linux_gcc
@@ -3,6 +3,7 @@ c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-gcc-ar'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_bluefield_linux_gcc b/config/arm/arm64_bluefield_linux_gcc
index 304c407..86797d2 100644
--- a/config/arm/arm64_bluefield_linux_gcc
+++ b/config/arm/arm64_bluefield_linux_gcc
@@ -3,6 +3,7 @@ c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-gcc-ar'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_dpaa_linux_gcc b/config/arm/arm64_dpaa_linux_gcc
index f4b85a8..1a46821 100644
--- a/config/arm/arm64_dpaa_linux_gcc
+++ b/config/arm/arm64_dpaa_linux_gcc
@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-ar'
as = 'aarch64-linux-gnu-as'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_emag_linux_gcc b/config/arm/arm64_emag_linux_gcc
new file mode 100644
index 0000000..8edcd3e
--- /dev/null
+++ b/config/arm/arm64_emag_linux_gcc
@@ -0,0 +1,16 @@
+[binaries]
+c = 'aarch64-linux-gnu-gcc'
+cpp = 'aarch64-linux-gnu-cpp'
+ar = 'aarch64-linux-gnu-gcc-ar'
+strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
+pcap-config = ''
+
+[host_machine]
+system = 'linux'
+cpu_family = 'aarch64'
+cpu = 'armv8-a'
+endian = 'little'
+
+[properties]
+implementor_id = '0x50'
diff --git a/config/arm/arm64_n1sdp_linux_gcc b/config/arm/arm64_n1sdp_linux_gcc
new file mode 100644
index 0000000..022e063
--- /dev/null
+++ b/config/arm/arm64_n1sdp_linux_gcc
@@ -0,0 +1,17 @@
+[binaries]
+c = 'aarch64-linux-gnu-gcc'
+cpp = 'aarch64-linux-gnu-cpp'
+ar = 'aarch64-linux-gnu-gcc-ar'
+strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
+pcap-config = ''
+
+[host_machine]
+system = 'linux'
+cpu_family = 'aarch64'
+cpu = 'armv8-a'
+endian = 'little'
+
+[properties]
+implementor_id = '0x41'
+implementor_pn = '0xd0c'
diff --git a/config/arm/arm64_octeontx2_linux_gcc b/config/arm/arm64_octeontx2_linux_gcc
index e2c0b8f..365bd7c 100644
--- a/config/arm/arm64_octeontx2_linux_gcc
+++ b/config/arm/arm64_octeontx2_linux_gcc
@@ -3,6 +3,7 @@ c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-gcc-ar'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_thunderx2_linux_gcc b/config/arm/arm64_thunderx2_linux_gcc
index 0dc2756..2b41acc 100644
--- a/config/arm/arm64_thunderx2_linux_gcc
+++ b/config/arm/arm64_thunderx2_linux_gcc
@@ -3,6 +3,7 @@ c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-gcc-ar'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/arm64_thunderx_linux_gcc b/config/arm/arm64_thunderx_linux_gcc
index 14b8019..6572ab6 100644
--- a/config/arm/arm64_thunderx_linux_gcc
+++ b/config/arm/arm64_thunderx_linux_gcc
@@ -3,6 +3,7 @@ c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-cpp'
ar = 'aarch64-linux-gnu-gcc-ar'
strip = 'aarch64-linux-gnu-strip'
+pkgconfig = 'aarch64-linux-gnu-pkg-config'
pcap-config = ''
[host_machine]
diff --git a/config/arm/meson.build b/config/arm/meson.build
index 46dff3a..60f7b05 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -50,6 +50,11 @@ flags_dpaa = [
['RTE_MAX_NUMA_NODES', 1],
['RTE_MAX_LCORE', 16],
['RTE_LIBRTE_DPAA2_USE_PHYS_IOVA', false]]
+flags_emag = [
+ ['RTE_MACHINE', '"emag"'],
+ ['RTE_CACHE_LINE_SIZE', 64],
+ ['RTE_MAX_NUMA_NODES', 1],
+ ['RTE_MAX_LCORE', 32]]
flags_armada = [
['RTE_MACHINE', '"armv8a"'],
['RTE_CACHE_LINE_SIZE', 64],
@@ -57,6 +62,12 @@ flags_armada = [
['RTE_MAX_LCORE', 16]]
flags_default_extra = []
+flags_n1sdp_extra = [
+ ['RTE_MACHINE', '"n1sdp"'],
+ ['RTE_MAX_NUMA_NODES', 1],
+ ['RTE_MAX_LCORE', 4],
+ ['RTE_EAL_NUMA_AWARE_HUGEPAGES', false],
+ ['RTE_LIBRTE_VHOST_NUMA', false]]
flags_thunderx_extra = [
['RTE_MACHINE', '"thunderx"'],
['RTE_USE_C11_MEM_MODEL', false]]
@@ -83,7 +94,9 @@ machine_args_generic = [
['0xd07', ['-mcpu=cortex-a57']],
['0xd08', ['-mcpu=cortex-a72']],
['0xd09', ['-mcpu=cortex-a73']],
- ['0xd0a', ['-mcpu=cortex-a75']]]
+ ['0xd0a', ['-mcpu=cortex-a75']],
+ ['0xd0b', ['-mcpu=cortex-a76']],
+ ['0xd0c', ['-march=armv8.2-a+crc+crypto', '-mcpu=neoverse-n1'], flags_n1sdp_extra]]
machine_args_cavium = [
['default', ['-march=armv8-a+crc+crypto','-mcpu=thunderx']],
@@ -94,6 +107,10 @@ machine_args_cavium = [
['0xaf', ['-march=armv8.1-a+crc+crypto','-mcpu=thunderx2t99'], flags_thunderx2_extra],
['0xb2', ['-march=armv8.2-a+crc+crypto+lse','-mcpu=octeontx2'], flags_octeontx2_extra]]
+machine_args_emag = [
+ ['default', ['-march=armv8-a+crc+crypto', '-mtune=emag']],
+ ['native', ['-march=native']]]
+
## Arm implementer ID (ARM DDI 0487C.a, Section G7.2.106, Page G7-5321)
impl_generic = ['Generic armv8', flags_generic, machine_args_generic]
impl_0x41 = ['Arm', flags_arm, machine_args_generic]
@@ -103,7 +120,7 @@ impl_0x44 = ['DEC', flags_generic, machine_args_generic]
impl_0x49 = ['Infineon', flags_generic, machine_args_generic]
impl_0x4d = ['Motorola', flags_generic, machine_args_generic]
impl_0x4e = ['NVIDIA', flags_generic, machine_args_generic]
-impl_0x50 = ['AppliedMicro', flags_generic, machine_args_generic]
+impl_0x50 = ['Ampere Computing', flags_emag, machine_args_emag]
impl_0x51 = ['Qualcomm', flags_generic, machine_args_generic]
impl_0x53 = ['Samsung', flags_generic, machine_args_generic]
impl_0x56 = ['Marvell ARMADA', flags_armada, machine_args_generic]
diff --git a/config/common_base b/config/common_base
index 7c015f9..7dec7ed 100644
--- a/config/common_base
+++ b/config/common_base
@@ -65,11 +65,6 @@ CONFIG_RTE_BUILD_SHARED_LIB=n
CONFIG_RTE_NEXT_ABI=y
#
-# Major ABI to overwrite library specific LIBABIVER
-#
-CONFIG_RTE_MAJOR_ABI=
-
-#
# Machine's cache line size
#
CONFIG_RTE_CACHE_LINE_SIZE=64
diff --git a/config/defconfig_arm64-emag-linux-gcc b/config/defconfig_arm64-emag-linux-gcc
new file mode 120000
index 0000000..21894a3
--- /dev/null
+++ b/config/defconfig_arm64-emag-linux-gcc
@@ -0,0 +1 @@
+defconfig_arm64-emag-linuxapp-gcc \ No newline at end of file
diff --git a/config/defconfig_arm64-emag-linuxapp-gcc b/config/defconfig_arm64-emag-linuxapp-gcc
new file mode 100644
index 0000000..1db654c
--- /dev/null
+++ b/config/defconfig_arm64-emag-linuxapp-gcc
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Ampere Computing
+#
+
+#include "defconfig_arm64-armv8a-linux-gcc"
+
+CONFIG_RTE_MACHINE="emag"
+
+CONFIG_RTE_CACHE_LINE_SIZE=64
+CONFIG_RTE_MAX_NUMA_NODES=1
+CONFIG_RTE_MAX_LCORE=32
diff --git a/config/defconfig_arm64-n1sdp-linux-gcc b/config/defconfig_arm64-n1sdp-linux-gcc
new file mode 120000
index 0000000..103bbea
--- /dev/null
+++ b/config/defconfig_arm64-n1sdp-linux-gcc
@@ -0,0 +1 @@
+defconfig_arm64-n1sdp-linuxapp-gcc \ No newline at end of file
diff --git a/config/defconfig_arm64-n1sdp-linuxapp-gcc b/config/defconfig_arm64-n1sdp-linuxapp-gcc
new file mode 100644
index 0000000..f913809
--- /dev/null
+++ b/config/defconfig_arm64-n1sdp-linuxapp-gcc
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Arm Ltd.
+#
+
+#include "defconfig_arm64-armv8a-linux-gcc"
+
+CONFIG_RTE_MACHINE="n1sdp"
+CONFIG_RTE_MAX_LCORE=4
+CONFIG_RTE_MAX_NUMA_NODES=1
+CONFIG_RTE_CACHE_LINE_SIZE=64
+
+# Doesn't support NUMA
+CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n
+CONFIG_RTE_LIBRTE_VHOST_NUMA=n
diff --git a/config/meson.build b/config/meson.build
index 2b1cb92..364a8d7 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -18,6 +18,11 @@ endforeach
# depending on the configuration options
pver = meson.project_version().split('.')
major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))
+abi_version = run_command(find_program('cat', 'more'),
+ abi_version_file).stdout().strip()
+# experimental libraries are versioned as 0.majorminor versions, e.g. 0.201
+ever = abi_version.split('.')
+experimental_abi_version = '0.@0@@1@'.format(ever.get(0), ever.get(1))
# extract all version information into the build configuration
dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())
@@ -37,7 +42,7 @@ endif
pmd_subdir_opt = get_option('drivers_install_subdir')
if pmd_subdir_opt.contains('<VERSION>')
- pmd_subdir_opt = major_version.join(pmd_subdir_opt.split('<VERSION>'))
+ pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))
endif
driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)
eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
diff --git a/devtools/check-abi-version.sh b/devtools/check-abi-version.sh
new file mode 100755
index 0000000..9a3d135
--- /dev/null
+++ b/devtools/check-abi-version.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+# Check whether library symbols have correct
+# version (provided ABI number or provided ABI
+# number + 1 or EXPERIMENTAL).
+# Args:
+# $1: path of the library .so file
+# $2: ABI major version number to check
+# (defaults to ABI_VERSION file value)
+
+if [ -z "$1" ]; then
+ echo "Script checks whether library symbols have"
+ echo "correct version (ABI_VER/ABI_VER+1/EXPERIMENTAL)"
+ echo "Usage:"
+ echo " $0 SO_FILE_PATH [ABI_VER]"
+ exit 1
+fi
+
+LIB="$1"
+DEFAULT_ABI=$(cat "$(dirname \
+ $(readlink -f $0))/../ABI_VERSION" | \
+ cut -d'.' -f 1)
+ABIVER="DPDK_${2-$DEFAULT_ABI}"
+NEXT_ABIVER="DPDK_$((${2-$DEFAULT_ABI}+1))"
+
+ret=0
+
+# get output of objdump
+OBJ_DUMP_OUTPUT=`objdump -TC --section=.text ${LIB} 2>&1 | grep ".text"`
+
+# there may not be any .text sections in the .so file, in which case exit early
+echo "${OBJ_DUMP_OUTPUT}" | grep "not found in any input file" -q
+if [ "$?" -eq 0 ]; then
+ exit 0
+fi
+
+# we have symbols, so let's see if the versions are correct
+for SYM in $(echo "${OBJ_DUMP_OUTPUT}" | awk '{print $(NF-1) "-" $NF}')
+do
+ version=$(echo $SYM | cut -d'-' -f 1)
+ symbol=$(echo $SYM | cut -d'-' -f 2)
+ case $version in (*"$ABIVER"*|*"$NEXT_ABIVER"*|"EXPERIMENTAL")
+ ;;
+ (*)
+ echo "Warning: symbol $symbol ($version) should be annotated " \
+ "as ABI version $ABIVER / $NEXT_ABIVER, or EXPERIMENTAL."
+ ret=1
+ ;;
+ esac
+done
+
+exit $ret
diff --git a/devtools/check-git-log.sh b/devtools/check-git-log.sh
index a763ccf..f9d0550 100755
--- a/devtools/check-git-log.sh
+++ b/devtools/check-git-log.sh
@@ -161,6 +161,24 @@ bad=$(echo "$tags" |
sed 's,^.,\t&,')
[ -z "$bad" ] || printf "Wrong tag:\n$bad\n"
+# check missing Coverity issue: tag
+bad=$(for commit in $commits; do
+ body=$(git log --format='%b' -1 $commit)
+ echo "$body" | grep -qi coverity || continue
+ echo "$body" | grep -q '^Coverity issue:' && continue
+ git log --format='\t%s' -1 $commit
+done)
+[ -z "$bad" ] || printf "Missing 'Coverity issue:' tag:\n$bad\n"
+
+# check missing Bugzilla ID: tag
+bad=$(for commit in $commits; do
+ body=$(git log --format='%b' -1 $commit)
+ echo "$body" | grep -qi bugzilla || continue
+ echo "$body" | grep -q '^Bugzilla ID:' && continue
+ git log --format='\t%s' -1 $commit
+done)
+[ -z "$bad" ] || printf "Missing 'Bugzilla ID:' tag:\n$bad\n"
+
# check missing Fixes: tag
bad=$(for fix in $fixes ; do
git log --format='%b' -1 $fix | grep -q '^Fixes: ' ||
diff --git a/devtools/test-build.sh b/devtools/test-build.sh
index 2bedbdb..be565a1 100755
--- a/devtools/test-build.sh
+++ b/devtools/test-build.sh
@@ -7,6 +7,7 @@ default_path=$PATH
# Load config options:
# - ARMV8_CRYPTO_LIB_PATH
# - DPDK_BUILD_TEST_CONFIGS (defconfig1+option1+option2 defconfig2)
+# - DPDK_BUILD_TEST_DIR
# - DPDK_DEP_ARCHIVE
# - DPDK_DEP_BPF (y/[n])
# - DPDK_DEP_CFLAGS
@@ -63,6 +64,7 @@ print_help () {
[ -z $MAKE ] && echo "Cannot find make or gmake" && exit 1
J=$DPDK_MAKE_JOBS
+builds_dir=${DPDK_BUILD_TEST_DIR:-.}
short=false
unset verbose
maxerr=-Wfatal-errors
@@ -234,21 +236,24 @@ for conf in $configs ; do
. $(dirname $(readlink -f $0))/load-devel-config
options=$(echo $conf | sed 's,[^~+]*,,')
- dir=$conf
+ dir=$builds_dir/$conf
config $dir $target $options
- echo "================== Build $dir"
+ echo "================== Build $conf"
${MAKE} -j$J EXTRA_CFLAGS="$maxerr $DPDK_DEP_CFLAGS" \
EXTRA_LDFLAGS="$DPDK_DEP_LDFLAGS" $verbose O=$dir
! $short || break
- echo "================== Build examples for $dir"
- export RTE_SDK=$(pwd)
- export RTE_TARGET=$dir
+ export RTE_TARGET=$target
+ rm -rf $dir/install
+ ${MAKE} install O=$dir DESTDIR=$dir/install prefix=
+ echo "================== Build examples for $conf"
+ export RTE_SDK=$(readlink -f $dir)/install/share/dpdk
+ ln -sTf $(pwd)/lib $RTE_SDK/lib # workaround for vm_power_manager
${MAKE} -j$J -sC examples \
EXTRA_LDFLAGS="$DPDK_DEP_LDFLAGS" $verbose \
O=$(readlink -f $dir)/examples
unset RTE_TARGET
- echo "################## $dir done."
+ echo "################## $conf done."
unset dir
done
diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh
index 08e83eb..6885677 100755
--- a/devtools/test-meson-builds.sh
+++ b/devtools/test-meson-builds.sh
@@ -12,8 +12,11 @@ PIPEFAIL=""
set -o | grep -q pipefail && set -o pipefail && PIPEFAIL=1
srcdir=$(dirname $(readlink -f $0))/..
+. $srcdir/devtools/load-devel-config
+
MESON=${MESON:-meson}
use_shared="--default-library=shared"
+builds_dir=${DPDK_BUILD_TEST_DIR:-.}
if command -v gmake >/dev/null 2>&1 ; then
MAKE=gmake
@@ -36,12 +39,18 @@ fi
default_path=$PATH
default_pkgpath=$PKG_CONFIG_PATH
+default_cppflags=$CPPFLAGS
+default_cflags=$CFLAGS
+default_ldflags=$LDFLAGS
load_env () # <target compiler>
{
targetcc=$1
export PATH=$default_path
export PKG_CONFIG_PATH=$default_pkgpath
+ export CPPFLAGS=$default_cppflags
+ export CFLAGS=$default_cflags
+ export LDFLAGS=$default_ldflags
unset DPDK_MESON_OPTIONS
command -v $targetcc >/dev/null 2>&1 || return 1
DPDK_TARGET=$($targetcc -v 2>&1 | sed -n 's,^Target: ,,p')
@@ -50,7 +59,7 @@ load_env () # <target compiler>
build () # <directory> <target compiler> <meson options>
{
- builddir=$1
+ builddir=$builds_dir/$1
shift
targetcc=$1
shift
@@ -117,7 +126,7 @@ export CC="clang"
build build-arm64-host-clang $c $use_shared \
--cross-file $srcdir/config/arm/arm64_armv8_linux_gcc
# all gcc/arm configurations
-for f in $srcdir/config/arm/arm*gcc ; do
+for f in $srcdir/config/arm/arm64_[bdo]*gcc ; do
export CC="$CCACHE gcc"
build build-$(basename $f | tr '_' '-' | cut -d'-' -f-2) $c \
$use_shared --cross-file $f
@@ -125,15 +134,19 @@ done
# Test installation of the x86-default target, to be used for checking
# the sample apps build using the pkg-config file for cflags and libs
-build_path=build-x86-default
-export DESTDIR=$(pwd)/$build_path/install-root
+build_path=$(readlink -f $builds_dir/build-x86-default)
+export DESTDIR=$build_path/install-root
$ninja_cmd -C $build_path install
load_env cc
pc_file=$(find $DESTDIR -name libdpdk.pc)
export PKG_CONFIG_PATH=$(dirname $pc_file):$PKG_CONFIG_PATH
-for example in cmdline helloworld l2fwd l3fwd skeleton timer; do
- echo "## Building $example"
- $MAKE -C $DESTDIR/usr/local/share/dpdk/examples/$example clean all
-done
+# if pkg-config defines the necessary flags, test building some examples
+if pkg-config --define-prefix libdpdk >/dev/null 2>&1; then
+ export PKGCONF="pkg-config --define-prefix"
+ for example in cmdline helloworld l2fwd l3fwd skeleton timer; do
+ echo "## Building $example"
+ $MAKE -C $DESTDIR/usr/local/share/dpdk/examples/$example clean all
+ done
+fi
diff --git a/devtools/test-null.sh b/devtools/test-null.sh
index 9f9a459..f39af2c 100755
--- a/devtools/test-null.sh
+++ b/devtools/test-null.sh
@@ -11,6 +11,7 @@ coremask=${2:-3} # default using cores 0 and 1
eal_options=$3
testpmd_options=$4
+[ -f "$testpmd" ] && build=$(dirname $(dirname $testpmd))
[ -f "$testpmd" ] || testpmd=$build/app/dpdk-testpmd
[ -f "$testpmd" ] || testpmd=$build/app/testpmd
if [ ! -f "$testpmd" ] ; then
@@ -19,12 +20,13 @@ if [ ! -f "$testpmd" ] ; then
fi
if ldd $testpmd | grep -q librte_ ; then
+ export LD_LIBRARY_PATH=$build/lib:$LD_LIBRARY_PATH
libs='-d librte_mempool_ring.so -d librte_pmd_null.so'
else
libs=
fi
(sleep 1 && echo stop) |
-$testpmd -c $coremask --no-huge -m 150 \
- $libs --vdev net_null1 --vdev net_null2 $eal_options -- \
+$testpmd -c $coremask --no-huge -m 20 \
+ $libs -w 0:0.0 --vdev net_null1 --vdev net_null2 $eal_options -- \
--no-mlockall --total-num-mbufs=2048 $testpmd_options -ia
diff --git a/devtools/update-abi.sh b/devtools/update-abi.sh
new file mode 100755
index 0000000..b9b859a
--- /dev/null
+++ b/devtools/update-abi.sh
@@ -0,0 +1,46 @@
+#!/bin/sh -e
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+abi_version=$1
+abi_version_file="./ABI_VERSION"
+update_path="lib drivers"
+
+# check ABI version format string
+check_abi_version() {
+ echo $1 | grep -q -e "^[[:digit:]]\{1,2\}\.[[:digit:]]\{1,2\}$"
+}
+
+if [ -z "$1" ]; then
+ # output to stderr
+ >&2 echo "Please provide ABI version"
+ exit 1
+fi
+
+# check version string format
+if ! check_abi_version $abi_version ; then
+ # output to stderr
+ >&2 echo "ABI version must be formatted as MAJOR.MINOR version"
+ exit 1
+fi
+
+if [ -n "$2" ]; then
+ abi_version_file=$2
+fi
+
+if [ -n "$3" ]; then
+ # drop $1 and $2
+ shift 2
+ # assign all other arguments as update paths
+ update_path=$@
+fi
+
+echo "New ABI version:" $abi_version
+echo "ABI_VERSION path:" $abi_version_file
+echo "Path to update:" $update_path
+
+echo $abi_version > $abi_version_file
+
+find $update_path -name \*version.map -exec \
+ devtools/update_version_map_abi.py {} \
+ $abi_version \; -print
diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
new file mode 100755
index 0000000..616412a
--- /dev/null
+++ b/devtools/update_version_map_abi.py
@@ -0,0 +1,175 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+"""
+A Python program that updates and merges all available stable ABI versions into
+one ABI version, while leaving experimental ABI exactly as it is. The intended
+ABI version is supplied via command-line parameter. This script is to be called
+from the devtools/update-abi.sh utility.
+"""
+
+from __future__ import print_function
+import argparse
+import sys
+import re
+
+
+def __parse_map_file(f_in):
+ # match function name, followed by semicolon, followed by EOL, optionally
+ # with whitespace in between each item
+ func_line_regex = re.compile(r"\s*"
+ r"(?P<func>[a-zA-Z_0-9]+)"
+ r"\s*"
+ r";"
+ r"\s*"
+ r"$")
+ # match section name, followed by opening bracked, followed by EOL,
+ # optionally with whitespace in between each item
+ section_begin_regex = re.compile(r"\s*"
+ r"(?P<version>[a-zA-Z0-9_\.]+)"
+ r"\s*"
+ r"{"
+ r"\s*"
+ r"$")
+ # match closing bracket, optionally followed by section name (for when we
+ # inherit from another ABI version), followed by semicolon, followed by
+ # EOL, optionally with whitespace in between each item
+ section_end_regex = re.compile(r"\s*"
+ r"}"
+ r"\s*"
+ r"(?P<parent>[a-zA-Z0-9_\.]+)?"
+ r"\s*"
+ r";"
+ r"\s*"
+ r"$")
+
+ # for stable ABI, we don't care about which version introduced which
+ # function, we just flatten the list. there are dupes in certain files, so
+ # use a set instead of a list
+ stable_lines = set()
+ # copy experimental section as is
+ experimental_lines = []
+ in_experimental = False
+ has_stable = False
+
+ # gather all functions
+ for line in f_in:
+ # clean up the line
+ line = line.strip('\n').strip()
+
+ # is this an end of section?
+ match = section_end_regex.match(line)
+ if match:
+ # whatever section this was, it's not active any more
+ in_experimental = False
+ continue
+
+ # if we're in the middle of experimental section, we need to copy
+ # the section verbatim, so just add the line
+ if in_experimental:
+ experimental_lines += [line]
+ continue
+
+ # skip empty lines
+ if not line:
+ continue
+
+ # is this a beginning of a new section?
+ match = section_begin_regex.match(line)
+ if match:
+ cur_section = match.group("version")
+ # is it experimental?
+ in_experimental = cur_section == "EXPERIMENTAL"
+ if not in_experimental:
+ has_stable = True
+ continue
+
+ # is this a function?
+ match = func_line_regex.match(line)
+ if match:
+ stable_lines.add(match.group("func"))
+
+ return has_stable, stable_lines, experimental_lines
+
+
+def __generate_stable_abi(f_out, abi_version, lines):
+ # print ABI version header
+ print("DPDK_{} {{".format(abi_version), file=f_out)
+
+ # print global section if it exists
+ if lines:
+ print("\tglobal:", file=f_out)
+ # blank line
+ print(file=f_out)
+
+ # print all stable lines, alphabetically sorted
+ for line in sorted(lines):
+ print("\t{};".format(line), file=f_out)
+
+ # another blank line
+ print(file=f_out)
+
+ # print local section
+ print("\tlocal: *;", file=f_out)
+
+ # end stable version
+ print("};", file=f_out)
+
+
+def __generate_experimental_abi(f_out, lines):
+ # start experimental section
+ print("EXPERIMENTAL {", file=f_out)
+
+ # print all experimental lines as they were
+ for line in lines:
+ # don't print empty whitespace
+ if not line:
+ print("", file=f_out)
+ else:
+ print("\t{}".format(line), file=f_out)
+
+ # end section
+ print("};", file=f_out)
+
+
+def __main():
+ arg_parser = argparse.ArgumentParser(
+ description='Merge versions in linker version script.')
+
+ arg_parser.add_argument("map_file", type=str,
+ help='path to linker version script file '
+ '(pattern: *version.map)')
+ arg_parser.add_argument("abi_version", type=str,
+ help='target ABI version (pattern: MAJOR.MINOR)')
+
+ parsed = arg_parser.parse_args()
+
+ if not parsed.map_file.endswith('version.map'):
+ print("Invalid input file: {}".format(parsed.map_file),
+ file=sys.stderr)
+ arg_parser.print_help()
+ sys.exit(1)
+
+ if not re.match(r"\d{1,2}\.\d{1,2}", parsed.abi_version):
+ print("Invalid ABI version: {}".format(parsed.abi_version),
+ file=sys.stderr)
+ arg_parser.print_help()
+ sys.exit(1)
+
+ with open(parsed.map_file) as f_in:
+ has_stable, stable_lines, experimental_lines = __parse_map_file(f_in)
+
+ with open(parsed.map_file, 'w') as f_out:
+ need_newline = has_stable and experimental_lines
+ if has_stable:
+ __generate_stable_abi(f_out, parsed.abi_version, stable_lines)
+ if need_newline:
+ # separate sections with a newline
+ print(file=f_out)
+ if experimental_lines:
+ __generate_experimental_abi(f_out, experimental_lines)
+
+
+if __name__ == "__main__":
+ __main()
diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 050c971..a21f4e7 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -111,16 +111,17 @@ how this may be done.
...
At the same time, the major ABI version is changed atomically across all
-libraries by incrementing the major version in individual library's soname, e.g.
-``libacl.so.21``. This is done by bumping the LIBABIVER number in the libraries
-Makefile to indicate to dynamic linking applications that this is a later, and
-possibly incompatible library version:
+libraries by incrementing the major version in the ABI_VERSION file. This is
+done globally for all libraries that declare a stable ABI. For libraries marked
+as EXPERIMENTAL, their major ABI version is always set to 0.
-.. code-block:: c
-
- -LIBABIVER := 20
- +LIBABIVER := 21
+Minor ABI versions
+~~~~~~~~~~~~~~~~~~
+Each non-LTS release will also increment minor ABI version, to permit multiple
+DPDK versions being installed alongside each other. Both stable and
+experimental ABI's are versioned using the global version file that is updated
+at the start of each release cycle, and are managed at the project level.
Versioning Macros
-----------------
diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
index a6843de..841ef6d 100644
--- a/doc/guides/contributing/coding_style.rst
+++ b/doc/guides/contributing/coding_style.rst
@@ -803,9 +803,8 @@ lpm, etc. For drivers, the same format of Makefile is used.
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
- # the symbol version information for the library, and .so version
+ # the symbol version information for the library
EXPORT_MAP := rte_<name>_version.map
- LIBABIVER := 1
# all source filenames are stored in SRCS-y
SRCS-$(CONFIG_RTE_LIBRTE_<NAME>) += rte_<name>.c
@@ -955,11 +954,6 @@ use_function_versioning
twice with suitable parameters for each of shared or static library
builds.
-version
- **Default Value = 1**.
- Specifies the ABI version of the library, and is used as the major
- version number of the resulting ``.so`` library.
-
Meson Build File Contents - Drivers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index 2140303..0686450 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -407,8 +407,17 @@ This uses the Linux kernel development tool ``checkpatch.pl`` which can be obta
updating the Linux kernel sources.
The path to the original Linux script must be set in the environment variable ``DPDK_CHECKPATCH_PATH``.
-This, and any other configuration variables required by the development tools, are loaded from the following
-files, in order of preference::
+
+Spell checking of commonly misspelled words
+can be enabled by downloading the codespell dictionary::
+
+ https://raw.githubusercontent.com/codespell-project/codespell/master/codespell_lib/data/dictionary.txt
+
+The path to the downloaded ``dictionary.txt`` must be set
+in the environment variable ``DPDK_CHECKPATCH_CODESPELL``.
+
+Environment variables required by the development tools,
+are loaded from the following files, in order of preference::
.develconfig
~/.config/dpdk/devel.config
@@ -471,6 +480,7 @@ Examples of configs are::
The builds can be modified via the following environmental variables:
* ``DPDK_BUILD_TEST_CONFIGS`` (target1+option1+option2 target2)
+* ``DPDK_BUILD_TEST_DIR``
* ``DPDK_DEP_CFLAGS``
* ``DPDK_DEP_LDFLAGS``
* ``DPDK_DEP_PCAP`` (y/[n])
@@ -495,6 +505,12 @@ Compilation of patches is to be tested with ``devtools/test-meson-builds.sh`` sc
The script internally checks for dependencies, then builds for several
combinations of compilation configuration.
+By default, each build will be put in a subfolder of the current working directory.
+However, if it is preferred to place the builds in a different location,
+the environment variable ``DPDK_BUILD_TEST_DIR`` can be set to that desired location.
+For example, setting ``DPDK_BUILD_TEST_DIR=__builds`` will put all builds
+in a single subfolder called "__builds" created in the current directory.
+Setting ``DPDK_BUILD_TEST_DIR`` to an absolute directory path e.g. ``/tmp`` is also supported.
Sending Patches
diff --git a/doc/guides/cryptodevs/ccp.rst b/doc/guides/cryptodevs/ccp.rst
index 034d203..a43fe92 100644
--- a/doc/guides/cryptodevs/ccp.rst
+++ b/doc/guides/cryptodevs/ccp.rst
@@ -109,14 +109,14 @@ To validate ccp pmd, l2fwd-crypto example can be used with following command:
.. code-block:: console
- sudo ./build/l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp" -- -p 0x1
- --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo AES_CBC
- --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
- --iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
- --auth_op GENERATE --auth_algo SHA1_HMAC
- --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
- :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
- :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ sudo ./build/l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp" -- -p 0x1
+ --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc
+ --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
+ --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
+ --auth_op GENERATE --auth_algo sha1-hmac
+ --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
The CCP PMD also supports computing authentication over CPU with cipher offloaded to CCP.
To enable this feature, pass an additional argument as ccp_auth_opt=1 to --vdev parameters as
@@ -124,14 +124,14 @@ following:
.. code-block:: console
- sudo ./build/l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp,ccp_auth_opt=1" -- -p 0x1
- --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo AES_CBC
- --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
- --iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
- --auth_op GENERATE --auth_algo SHA1_HMAC
- --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
- :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
- :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ sudo ./build/l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp,ccp_auth_opt=1" -- -p 0x1
+ --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc
+ --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
+ --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
+ --auth_op GENERATE --auth_algo sha1-hmac
+ --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
+ :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
Limitations
-----------
diff --git a/doc/guides/cryptodevs/features/openssl.ini b/doc/guides/cryptodevs/features/openssl.ini
index 6ddca39..30ffb11 100644
--- a/doc/guides/cryptodevs/features/openssl.ini
+++ b/doc/guides/cryptodevs/features/openssl.ini
@@ -6,6 +6,7 @@
[Features]
Symmetric crypto = Y
Sym operation chaining = Y
+In Place SGL = Y
OOP SGL In LB Out = Y
OOP LB In LB Out = Y
Asymmetric crypto = Y
diff --git a/doc/guides/cryptodevs/mvsam.rst b/doc/guides/cryptodevs/mvsam.rst
index 81aa27d..399fe37 100644
--- a/doc/guides/cryptodevs/mvsam.rst
+++ b/doc/guides/cryptodevs/mvsam.rst
@@ -110,4 +110,3 @@ operation:
--cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f \
--auth_op GENERATE --auth_algo sha1-hmac \
--auth_key 10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f
-
diff --git a/doc/guides/eventdevs/octeontx.rst b/doc/guides/eventdevs/octeontx.rst
index ab36a36..9a3646d 100644
--- a/doc/guides/eventdevs/octeontx.rst
+++ b/doc/guides/eventdevs/octeontx.rst
@@ -139,3 +139,10 @@ follows:
When timvf is used as Event timer adapter event schedule type
``RTE_SCHED_TYPE_PARALLEL`` is not supported.
+
+Max mempool size
+~~~~~~~~~~~~~~~~
+
+Max mempool size when using OCTEON TX Eventdev (SSO) should be limited to 128K.
+When running dpdk-test-eventdev on OCTEON TX the application can limit the
+number of mbufs by using the option ``--pool_sz 131072``
diff --git a/doc/guides/freebsd_gsg/install_from_ports.rst b/doc/guides/freebsd_gsg/install_from_ports.rst
index a895d61..29f16cc 100644
--- a/doc/guides/freebsd_gsg/install_from_ports.rst
+++ b/doc/guides/freebsd_gsg/install_from_ports.rst
@@ -11,12 +11,6 @@ install it from the ports collection. Details of getting and using the ports
collection are documented in the
`FreeBSD Handbook <http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html>`_.
-.. note::
-
- Testing has been performed using FreeBSD 10.0-RELEASE (x86_64) and requires the
- installation of the kernel sources, which should be included during the
- installation of FreeBSD.
-
Installing the DPDK FreeBSD Port
--------------------------------
@@ -90,48 +84,36 @@ compiled and run as below:
INSTALL-APP helloworld
INSTALL-MAP helloworld.map
- sudo ./build/helloworld -l 0-3 -n 2
-
- EAL: Contigmem driver has 2 buffers, each of size 1GB
+ sudo ./build//helloworld -l 0-3
EAL: Sysctl reports 8 cpus
- EAL: Detected lcore 0
- EAL: Detected lcore 1
- EAL: Detected lcore 2
- EAL: Detected lcore 3
- EAL: Support maximum 64 logical core(s) by configuration.
- EAL: Detected 4 lcore(s)
- EAL: Setting up physically contiguous memory...
- EAL: Mapped memory segment 1 @ 0x802400000: len 1073741824
- EAL: Mapped memory segment 2 @ 0x842400000: len 1073741824
- EAL: WARNING: clock_gettime cannot use CLOCK_MONOTONIC_RAW and HPET
- is not available - clock timings may be less accurate.
- EAL: TSC frequency is ~3569023 KHz
- EAL: PCI scan found 24 devices
- EAL: Master core 0 is ready (tid=0x802006400)
- EAL: Core 1 is ready (tid=0x802006800)
- EAL: Core 3 is ready (tid=0x802007000)
- EAL: Core 2 is ready (tid=0x802006c00)
+ EAL: Detected 8 lcore(s)
+ EAL: Detected 1 NUMA nodes
+ EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
+ EAL: Selected IOVA mode 'PA'
+ EAL: Contigmem driver has 2 buffers, each of size 1GB
+ EAL: Mapped memory segment 0 @ 0x1040000000: physaddr:0x180000000, len 1073741824
+ EAL: Mapped memory segment 1 @ 0x1080000000: physaddr:0x1c0000000, len 1073741824
+ EAL: PCI device 0000:00:19.0 on NUMA socket 0
+ EAL: probe driver: 8086:153b net_e1000_em
+ EAL: 0000:00:19.0 not managed by UIO driver, skipping
EAL: PCI device 0000:01:00.0 on NUMA socket 0
- EAL: probe driver: 8086:10fb rte_ixgbe_pmd
- EAL: PCI memory mapped at 0x80074a000
- EAL: PCI memory mapped at 0x8007ca000
+ EAL: probe driver: 8086:1572 net_i40e
+ EAL: 0000:01:00.0 not managed by UIO driver, skipping
EAL: PCI device 0000:01:00.1 on NUMA socket 0
- EAL: probe driver: 8086:10fb rte_ixgbe_pmd
- EAL: PCI memory mapped at 0x8007ce000
- EAL: PCI memory mapped at 0x80084e000
- EAL: PCI device 0000:02:00.0 on NUMA socket 0
- EAL: probe driver: 8086:10fb rte_ixgbe_pmd
- EAL: PCI memory mapped at 0x800852000
- EAL: PCI memory mapped at 0x8008d2000
- EAL: PCI device 0000:02:00.1 on NUMA socket 0
- EAL: probe driver: 8086:10fb rte_ixgbe_pmd
- EAL: PCI memory mapped at 0x801b3f000
- EAL: PCI memory mapped at 0x8008d6000
+ EAL: probe driver: 8086:1572 net_i40e
+ EAL: 0000:01:00.1 not managed by UIO driver, skipping
+ EAL: PCI device 0000:01:00.2 on NUMA socket 0
+ EAL: probe driver: 8086:1572 net_i40e
+ EAL: 0000:01:00.2 not managed by UIO driver, skipping
+ EAL: PCI device 0000:01:00.3 on NUMA socket 0
+ EAL: probe driver: 8086:1572 net_i40e
+ EAL: 0000:01:00.3 not managed by UIO driver, skipping
hello from core 1
hello from core 2
hello from core 3
hello from core 0
+
.. note::
To run a DPDK process as a non-root user, adjust the permissions on
diff --git a/doc/guides/linux_gsg/build_dpdk.rst b/doc/guides/linux_gsg/build_dpdk.rst
index 7c0329f..4aeb469 100644
--- a/doc/guides/linux_gsg/build_dpdk.rst
+++ b/doc/guides/linux_gsg/build_dpdk.rst
@@ -11,8 +11,8 @@ Compiling the DPDK Target from Source
Parts of this process can also be done using the setup script described in
the :ref:`linux_setup_script` section of this document.
-Install the DPDK and Browse Sources
------------------------------------
+Uncompress DPDK and Browse Sources
+----------------------------------
First, uncompress the archive and move to the uncompressed DPDK source directory:
@@ -33,8 +33,139 @@ The DPDK is composed of several directories:
* config, buildtools, mk: Framework-related makefiles, scripts and configuration
-Installation of DPDK Target Environments
-----------------------------------------
+Compiling and Installing DPDK System-wide
+-----------------------------------------
+
+DPDK can be configured, built and installed on your system using the tools
+``meson`` and ``ninja``.
+
+.. note::
+
+ The older makefile-based build system used in older DPDK releases is
+ still present and its use is described in section
+ `Installation of DPDK Target Environment using Make`_.
+
+DPDK Configuration
+~~~~~~~~~~~~~~~~~~
+
+To configure a DPDK build use:
+
+.. code-block:: console
+
+ meson <options> build
+
+where "build" is the desired output build directory, and "<options>" can be
+empty or one of a number of meson or DPDK-specific build options, described
+later in this section. The configuration process will finish with a summary
+of what DPDK libraries and drivers are to be built and installed, and for
+each item disabled, a reason why that is the case. This information can be
+used, for example, to identify any missing required packages for a driver.
+
+Once configured, to build and then install DPDK system-wide use:
+
+.. code-block:: console
+
+ cd build
+ ninja
+ ninja install
+ ldconfig
+
+The last two commands above generally need to be run as root,
+with the `ninja install` step copying the built objects to their final system-wide locations,
+and the last step causing the dynamic loader `ld.so` to update its cache to take account of the new objects.
+
+.. note::
+
+ On some linux distributions, such as Fedora or Redhat, paths in `/usr/local` are
+ not in the default paths for the loader. Therefore, on these
+ distributions, `/usr/local/lib` and `/usr/local/lib64` should be added
+ to a file in `/etc/ld.so.conf.d/` before running `ldconfig`.
+
+
+Adjusting Build Options
+~~~~~~~~~~~~~~~~~~~~~~~
+
+DPDK has a number of options that can be adjusted as part of the build configuration process.
+These options can be listed by running ``meson configure`` inside a configured build folder.
+Many of these options come from the "meson" tool itself and can be seen documented on the
+`Meson Website <https://mesonbuild.com/Builtin-options.html>`_.
+
+For example, to change the build-type from the default, "debugoptimized",
+to a regular "debug" build, you can either:
+
+* pass ``-Dbuildtype=debug`` or ``--buildtype=debug`` to meson when configuring the build folder initially
+
+* run ``meson configure -Dbuildtype=debug`` inside the build folder after the initial meson run.
+
+Other options are specific to the DPDK project but can be adjusted similarly.
+To set the "max_lcores" value to 256, for example, you can either:
+
+* pass ``-Dmax_lcores=256`` to meson when configuring the build folder initially
+
+* run ``meson configure -Dmax_lcores=256`` inside the build folder after the initial meson run.
+
+Some of the DPDK sample applications in the `examples` directory can be
+automatically built as part of a meson build too.
+To do so, pass a comma-separated list of the examples to build to the
+`-Dexamples` meson option as below::
+
+ meson -Dexamples=l2fwd,l3fwd build
+
+As with other meson options, this can also be set post-initial-config using `meson configure` in the build directory.
+There is also a special value "all" to request that all example applications whose
+dependencies are met on the current system are built.
+When `-Dexamples=all` is set as a meson option, meson will check each example application to see if it can be built,
+and add all which can be built to the list of tasks in the ninja build configuration file.
+
+Building Applications Using Installed DPDK
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When installed system-wide, DPDK provides a pkg-config file ``libdpdk.pc`` for applications to query as part of their build.
+It's recommended that the pkg-config file be used, rather than hard-coding the parameters (cflags/ldflags)
+for DPDK into the application build process.
+
+An example of how to query and use the pkg-config file can be found in the ``Makefile`` of each of the example applications included with DPDK.
+A simplified example snippet is shown below, where the target binary name has been stored in the variable ``$(APP)``
+and the sources for that build are stored in ``$(SRCS-y)``.
+
+.. code-block:: makefile
+
+ PKGCONF = pkg-config
+
+ CFLAGS += -O3 $(shell $(PKGCONF) --cflags libdpdk)
+ LDFLAGS += $(shell $(PKGCONF) --libs libdpdk)
+
+ $(APP): $(SRCS-y) Makefile
+ $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS)
+
+.. note::
+
+ Unlike with the older make build system, the meson system is not
+ designed to be used directly from a build directory. Instead it is
+ recommended that it be installed either system-wide or to a known
+ location in the user's home directory. The install location can be set
+ using the `--prefix` meson option (default: `/usr/local`).
+
+an equivalent build recipe for a simple DPDK application using meson as a
+build system is shown below:
+
+.. code-block:: python
+
+ project('dpdk-app', 'c')
+
+ dpdk = dependency('libdpdk')
+ sources = files('main.c')
+ executable('dpdk-app', sources, dependencies: dpdk)
+
+
+Installation of DPDK Target Environment using Make
+--------------------------------------------------
+
+.. note::
+
+ The building of DPDK using make will be deprecated in a future release. It
+ is therefore recommended that DPDK installation is done using meson and
+ ninja as described above.
The format of a DPDK target is::
diff --git a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
index e799b0b..c5875a6 100644
--- a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
+++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
@@ -16,19 +16,21 @@ Obtain the cross tool chain
The latest cross compile tool chain can be downloaded from:
https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads.
-Following is the step to get the version 8.2, latest one at the time of this writing.
+It is always recommended to check and get the latest compiler tool from the page and use
+it to generate better code. As of this writing 8.3-2019.03 is the newest, the following
+description is an example of this version.
.. code-block:: console
- wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz
+ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
Unzip and add into the PATH
---------------------------
.. code-block:: console
- tar -xvf gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz
- export PATH=$PATH:<cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/bin
+ tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
+ export PATH=$PATH:<cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
.. note::
@@ -50,7 +52,7 @@ NUMA is required by most modern machines, not needed for non-NUMA architectures.
git clone https://github.com/numactl/numactl.git
cd numactl
- git checkout v2.0.11 -b v2.0.11
+ git checkout v2.0.13 -b v2.0.13
./autogen.sh
autoconf -i
./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc --prefix=<numa install dir>
@@ -71,14 +73,35 @@ Copy the NUMA header files and lib to the cross compiler's directories:
.. code-block:: console
- cp <numa_install_dir>/include/numa*.h <cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/include/
- cp <numa_install_dir>/lib/libnuma.a <cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.2/
- cp <numa_install_dir>/lib/libnuma.so <cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.2/
+ cp <numa_install_dir>/include/numa*.h <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include/
+ cp <numa_install_dir>/lib/libnuma.a <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/
+ cp <numa_install_dir>/lib/libnuma.so <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/
.. _configure_and_cross_compile_dpdk_build:
-Configure and cross compile DPDK Build
---------------------------------------
+Cross Compiling DPDK using Meson
+--------------------------------
+
+Meson depends on pkgconfig to find the dependencies.
+The package ``pkg-config-aarch64-linux-gnu`` is required for aarch64.
+To install it in Ubuntu::
+
+ sudo apt-get install pkg-config-aarch64-linux-gnu
+
+To cross-compile DPDK on a desired target machine we can use the following
+command::
+
+ meson cross-build --cross-file <target_machine_configuration>
+ ninja -C cross-build
+
+For example if the target machine is arm64 we can use the following
+command::
+
+ meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
+ ninja -C arm64-build
+
+Configure and Cross Compile DPDK using Make
+-------------------------------------------
To configure a build, choose one of the target configurations, like arm64-dpaa-linux-gcc and arm64-thunderx-linux-gcc.
.. code-block:: console
@@ -118,18 +141,3 @@ To compile for non-NUMA targets, without compiling the kernel modules, use the f
.. code-block:: console
make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n EXTRA_CFLAGS="-isystem <numa_install_dir>/include" EXTRA_LDFLAGS="-L<numa_install_dir>/lib -lnuma"
-
-Meson Cross Compiling DPDK
---------------------------
-
-To cross-compile DPDK on a desired target machine we can use the following
-command::
-
- meson cross-build --cross-file <target_machine_configuration>
- ninja -C cross-build
-
-For example if the target machine is arm64 we can use the following
-command::
-
- meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
- ninja -C arm64-build
diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst
index d235905..7c47ec0 100644
--- a/doc/guides/linux_gsg/sys_reqs.rst
+++ b/doc/guides/linux_gsg/sys_reqs.rst
@@ -37,49 +37,32 @@ Compilation of the DPDK
The setup commands and installed packages needed on various systems may be different.
For details on Linux distributions and the versions tested, please consult the DPDK Release Notes.
-* GNU ``make``.
+* General development tools including ``make``, and a supported C compiler such as ``gcc`` (version 4.9+) or ``clang`` (version 3.4+).
-* coreutils: ``cmp``, ``sed``, ``grep``, ``arch``, etc.
+ * For RHEL/Fedora systems these can be installed using ``dnf groupinstall "Development Tools"``
-* gcc: versions 4.9 or later is recommended for all platforms.
- On some distributions, some specific compiler flags and linker flags are enabled by
- default and affect performance (``-fstack-protector``, for example). Please refer to the documentation
- of your distribution and to ``gcc -dumpspecs``.
+ * For Ubuntu/Debian systems these can be installed using ``apt install build-essential``
-* libc headers, often packaged as ``gcc-multilib`` (``glibc-devel.i686`` / ``libc6-dev-i386``;
- ``glibc-devel.x86_64`` / ``libc6-dev`` for 64-bit compilation on Intel architecture;
- ``glibc-devel.ppc64`` for 64 bit IBM Power architecture;)
+* Python, recommended version 3.5+.
-* Linux kernel headers or sources required to build kernel modules. (kernel - devel.x86_64;
- kernel - devel.ppc64)
+ * Python v3.5+ is needed to build DPDK using meson and ninja
-* Additional packages required for 32-bit compilation on 64-bit systems are:
+ * Python 2.7+ or 3.2+, to use various helper scripts included in the DPDK package.
- * glibc.i686, libgcc.i686, libstdc++.i686 and glibc-devel.i686 for Intel i686/x86_64;
+* Meson (version 0.47.1+) and ninja
- * glibc.ppc64, libgcc.ppc64, libstdc++.ppc64 and glibc-devel.ppc64 for IBM ppc_64;
+ * ``meson`` & ``ninja-build`` packages in most Linux distributions
- .. note::
-
- x86_x32 ABI is currently supported with distribution packages only on Ubuntu
- higher than 13.10 or recent Debian distribution. The only supported compiler is gcc 4.9+.
+ * If the packaged version is below the minimum version, the latest versions
+ can be installed from Python's "pip" repository: ``pip3 install meson ninja``
* Library for handling NUMA (Non Uniform Memory Access).
- * numactl-devel in Red Hat/Fedora;
-
- * libnuma-dev in Debian/Ubuntu;
-
- .. note::
+ * ``numactl-devel`` in RHEL/Fedora;
- On systems with NUMA support, `libnuma-dev` (aka `numactl-devel`)
- is a recommended dependency when `--legacy-mem` switch is used,
- and a *required* dependency if default memory mode is used.
- While DPDK will compile and run without `libnuma`
- even on NUMA-enabled systems,
- both usability and performance will be degraded.
+ * ``libnuma-dev`` in Debian/Ubuntu;
-* Python, version 2.7+ or 3.2+, to use various helper scripts included in the DPDK package.
+* Linux kernel headers or sources required to build kernel modules.
.. note::
@@ -96,10 +79,29 @@ Compilation of the DPDK
which allows users to take leading edge advantage of IBM's latest POWER hardware features on Linux. To install
it, see the IBM official installation document.
-* libpcap headers and libraries (libpcap-devel) to compile and use the libpcap-based poll-mode driver.
- This driver is disabled by default and can be enabled by setting ``CONFIG_RTE_LIBRTE_PMD_PCAP=y`` in the build time config file.
+**Additional Libraries**
+
+A number of DPDK components, such as libraries and poll-mode drivers (PMDs) have additional dependencies.
+For DPDK builds using meson, the presence or absence of these dependencies will be
+automatically detected enabling or disabling the relevant components appropriately.
+
+For builds using make, these components are disabled in the default configuration and
+need to be enabled manually by changing the relevant setting to "y" in the build configuration file
+i.e. the ``.config`` file in the build folder.
+
+In each case, the relevant library development package (``-devel`` or ``-dev``) is needed to build the DPDK components.
+
+For libraries the additional dependencies include:
+
+* libarchive: for some unit tests using tar to get their resources.
+
+* jansson: to compile and use the telemetry library.
+
+* libelf: to compile and use the bpf library.
-* libarchive headers and library are needed for some unit tests using tar to get their resources.
+For poll-mode drivers, the additional dependencies for each driver can be
+found in that driver's documentation in the relevant DPDK guide document,
+e.g. :doc:`../nics/index`
Running DPDK Applications
diff --git a/doc/guides/nics/avp.rst b/doc/guides/nics/avp.rst
index b724d97..1a194fc 100644
--- a/doc/guides/nics/avp.rst
+++ b/doc/guides/nics/avp.rst
@@ -1,5 +1,5 @@
.. SPDX-License-Identifier: BSD-3-Clause
- Copyright(c) 2017 Wind River Systems, Inc. rights reserved.
+ Copyright(c) 2017 Wind River Systems, Inc.
All rights reserved.
AVP Poll Mode Driver
diff --git a/doc/guides/nics/features/bnxt.ini b/doc/guides/nics/features/bnxt.ini
index 9721dd6..37a99e3 100644
--- a/doc/guides/nics/features/bnxt.ini
+++ b/doc/guides/nics/features/bnxt.ini
@@ -11,6 +11,7 @@ Rx interrupt = Y
Queue start/stop = Y
MTU update = Y
Jumbo frame = Y
+Scattered Rx = Y
LRO = Y
TSO = Y
Promiscuous mode = Y
@@ -37,9 +38,11 @@ Rx descriptor status = Y
Tx descriptor status = Y
Basic stats = Y
Extended stats = Y
+Stats per queue = Y
FW version = Y
EEPROM dump = Y
LED = Y
+Multiprocess aware = Y
Linux UIO = Y
Linux VFIO = Y
ARMv8 = Y
diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst
index 7ff33d7..9b90b38 100644
--- a/doc/guides/nics/ice.rst
+++ b/doc/guides/nics/ice.rst
@@ -27,17 +27,15 @@ It is highly recommended to upgrade the ice kernel driver and firmware and
DDP packages to avoid the compatibility issues with ice PMD. Here is the
suggested matching list.
- +-----------------+-----------------------+------------------+----------------+-------------------+
- | DPDK version | Kernel driver version | Firmware version | DDP OS Package | DDP COMMS Package |
- +=================+=======================+==================+================+===================+
- | 19.11 | 0.12.25 | 1.1.16.39 | 1.3.4 | 1.3.10 |
- +-----------------+-----------------------+------------------+----------------+-------------------+
- | 19.08 | 0.10.1 | 1.1.12.7 | 1.2.0 | N/A |
- | (experimental) | | | | |
- +-----------------+-----------------------+------------------+----------------+-------------------+
- | 19.05 | 0.9.4 | 1.1.10.16 | 1.1.0 | N/A |
- | (experimental) | | | | |
- +-----------------+-----------------------+------------------+----------------+-------------------+
+ +----------------------+-----------------------+------------------+----------------+-------------------+
+ | DPDK version | Kernel driver version | Firmware version | DDP OS Package | DDP COMMS Package |
+ +======================+=======================+==================+================+===================+
+ | 19.11 | 0.12.25 | 1.1.16.39 | 1.3.4 | 1.3.10 |
+ +----------------------+-----------------------+------------------+----------------+-------------------+
+ | 19.08 (experimental) | 0.10.1 | 1.1.12.7 | 1.2.0 | N/A |
+ +----------------------+-----------------------+------------------+----------------+-------------------+
+ | 19.05 (experimental) | 0.9.4 | 1.1.10.16 | 1.1.0 | N/A |
+ +----------------------+-----------------------+------------------+----------------+-------------------+
Pre-Installation Configuration
------------------------------
@@ -98,6 +96,18 @@ Runtime Config Options
-w 80:00.0,pipeline-mode-support=1
+- ``Flow Mark Support`` (default ``0``)
+
+ This is a hint to the driver to select the data path that supports flow mark extraction
+ by default.
+ NOTE: This is an experimental devarg, it will be removed when any of below conditions
+ is ready.
+ 1) all data paths support flow mark (currently vPMD does not)
+ 2) a new offload like RTE_DEV_RX_OFFLOAD_FLOW_MARK be introduced as a standard way to hint.
+ Example::
+
+ -w 80:00.0,flow-mark-support=1
+
- ``Protocol extraction for per queue``
Configure the RX queues to do protocol extraction into mbuf for protocol
diff --git a/doc/guides/nics/kni.rst b/doc/guides/nics/kni.rst
index 593564d..90d3040 100644
--- a/doc/guides/nics/kni.rst
+++ b/doc/guides/nics/kni.rst
@@ -168,4 +168,3 @@ It is possible to test PMD quickly using KNI kernel module loopback feature:
RX-packets: 71275820 RX-dropped: 0 RX-total: 71275820
TX-packets: 71275884 TX-dropped: 0 TX-total: 71275884
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
diff --git a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst
index fd5a326..18573cf 100644
--- a/doc/guides/nics/mlx5.rst
+++ b/doc/guides/nics/mlx5.rst
@@ -565,17 +565,27 @@ Run-time configuration
The type of mapping may slightly affect the Tx performance, the optimal choice
is strongly relied on the host architecture and should be deduced practically.
- If ``tx_db_nc`` is either omitted or set to zero, the doorbell is forced to be
- mapped to regular memory, the PMD will perform the extra write memory barrier
- after writing to doorbell, it might increase the needed CPU clocks per packet
- to send, but latency might be improved.
+ If ``tx_db_nc`` is set to zero, the doorbell is forced to be mapped to regular
+ memory, the PMD will perform the extra write memory barrier after writing to
+ doorbell, it might increase the needed CPU clocks per packet to send, but
+ latency might be improved.
- If ``tx_db_nc`` is set to not zero, the doorbell is forced to be mapped to
- non cached memory, the PMD will not perform the extra write memory barrier
+ If ``tx_db_nc`` is set to one, the doorbell is forced to be mapped to non
+ cached memory, the PMD will not perform the extra write memory barrier
after writing to doorbell, on some architectures it might improve the
performance.
- The default ``tx_db_nc`` value is zero ARM64 hosts and one for others.
+ If ``tx_db_nc`` is set to two, the doorbell is forced to be mapped to regular
+ memory, the PMD will use heuristics to decide whether write memory barrier
+ should be performed. For bursts with size multiple of recommended one (64 pkts)
+ it is supposed the next burst is coming and no need to issue the extra memory
+ barrier (it is supposed to be issued in the next coming burst, at least after
+ descriptor writing). It might increase latency (on some hosts till next
+ packets transmit) and should be used with care.
+
+ If ``tx_db_nc`` is omitted or set to zero, the preset (if any) environment
+ variable "MLX5_SHUT_UP_BF" value is used. If there is no "MLX5_SHUT_UP_BF",
+ the default ``tx_db_nc`` value is zero for ARM64 hosts and one for others.
- ``tx_vec_en`` parameter [int]
@@ -656,12 +666,16 @@ Run-time configuration
Disabled by default (set to 0).
+ The Direct Verbs/Rules (engaged with ``dv_flow_en`` = 1) supports all
+ of the extensive metadata features. The legacy Verbs supports FLAG and
+ MARK metadata actions over NIC Rx steering domain only.
+
- ``dv_flow_en`` parameter [int]
A nonzero value enables the DV flow steering assuming it is supported
- by the driver.
+ by the driver (RDMA Core library version is rdma-core-24.0 or higher).
- Disabled by default.
+ Enabled by default if supported.
- ``dv_esw_en`` parameter [int]
@@ -1101,26 +1115,36 @@ Supported hardware offloads
.. table:: Minimal SW/HW versions for rte_flow offloads
+-----------------------+-----------------+-----------------+
- | Offload | with E-Switch | with vNIC |
+ | Offload | with E-Switch | with NIC |
+=======================+=================+=================+
| Count | | DPDK 19.05 | | DPDK 19.02 |
| | | OFED 4.6 | | OFED 4.6 |
| | | rdma-core 24 | | rdma-core 23 |
| | | ConnectX-5 | | ConnectX-5 |
+-----------------------+-----------------+-----------------+
- | Drop / Queue / RSS | | DPDK 19.05 | | DPDK 18.11 |
+ | Drop | | DPDK 19.05 | | DPDK 18.11 |
| | | OFED 4.6 | | OFED 4.5 |
| | | rdma-core 24 | | rdma-core 23 |
| | | ConnectX-5 | | ConnectX-4 |
+-----------------------+-----------------+-----------------+
+ | Queue / RSS | | | | DPDK 18.11 |
+ | | | N/A | | OFED 4.5 |
+ | | | | | rdma-core 23 |
+ | | | | | ConnectX-4 |
+ +-----------------------+-----------------+-----------------+
| Encapsulation | | DPDK 19.05 | | DPDK 19.02 |
- | (VXLAN / NVGRE / RAW) | | OFED 4.6-2 | | OFED 4.6 |
+ | (VXLAN / NVGRE / RAW) | | OFED 4.7-1 | | OFED 4.6 |
| | | rdma-core 24 | | rdma-core 23 |
| | | ConnectX-5 | | ConnectX-5 |
+-----------------------+-----------------+-----------------+
+ | Encapsulation | | DPDK 19.11 | | DPDK 19.11 |
+ | GENEVE | | OFED 4.7-3 | | OFED 4.7-3 |
+ | | | rdma-core 27 | | rdma-core 27 |
+ | | | ConnectX-5 | | ConnectX-5 |
+ +-----------------------+-----------------+-----------------+
| | Header rewrite | | DPDK 19.05 | | DPDK 19.02 |
- | | (set_ipv4_src / | | OFED 4.6-2 | | OFED 4.6-2 |
- | | set_ipv4_dst / | | rdma-core 24 | | rdma-core 23 |
+ | | (set_ipv4_src / | | OFED 4.7-1 | | OFED 4.7-1 |
+ | | set_ipv4_dst / | | rdma-core 24 | | rdma-core 24 |
| | set_ipv6_src / | | ConnectX-5 | | ConnectX-5 |
| | set_ipv6_dst / | | | | |
| | set_tp_src / | | | | |
@@ -1131,11 +1155,11 @@ Supported hardware offloads
| | set_mac_dst) | | | | |
| | | | | | |
| | (of_set_vlan_vid) | | DPDK 19.11 | | DPDK 19.11 |
- | | | OFED 4.6-4 | | OFED 4.6-4 |
+ | | | OFED 4.7-1 | | OFED 4.7-1 |
| | | ConnectX-5 | | ConnectX-5 |
+-----------------------+-----------------+-----------------+
| Jump | | DPDK 19.05 | | DPDK 19.02 |
- | | | OFED 4.6-4 | | OFED 4.6-4 |
+ | | | OFED 4.7-1 | | OFED 4.7-1 |
| | | rdma-core 24 | | N/A |
| | | ConnectX-5 | | ConnectX-5 |
+-----------------------+-----------------+-----------------+
@@ -1145,16 +1169,31 @@ Supported hardware offloads
| | | ConnectX-5 | | ConnectX-4 |
+-----------------------+-----------------+-----------------+
| Port ID | | DPDK 19.05 | | N/A |
- | | | OFED 4.6 | | N/A |
+ | | | OFED 4.7-1 | | N/A |
| | | rdma-core 24 | | N/A |
| | | ConnectX-5 | | N/A |
+-----------------------+-----------------+-----------------+
| | VLAN | | DPDK 19.11 | | DPDK 19.11 |
- | | (of_pop_vlan / | | OFED 4.6-4 | | OFED 4.6-4 |
+ | | (of_pop_vlan / | | OFED 4.7-1 | | OFED 4.7-1 |
| | of_push_vlan / | | ConnectX-5 | | ConnectX-5 |
| | of_set_vlan_pcp / | | |
| | of_set_vlan_vid) | | |
+-----------------------+-----------------+-----------------+
+ | Hairpin | | | | DPDK 19.11 |
+ | | | N/A | | OFED 4.7-3 |
+ | | | | | rdma-core 26 |
+ | | | | | ConnectX-5 |
+ +-----------------------+-----------------+-----------------+
+ | Meta data | | DPDK 19.11 | | DPDK 19.11 |
+ | | | OFED 4.7-3 | | OFED 4.7-3 |
+ | | | rdma-core 26 | | rdma-core 26 |
+ | | | ConnectX-5 | | ConnectX-5 |
+ +-----------------------+-----------------+-----------------+
+ | Metering | | DPDK 19.11 | | DPDK 19.11 |
+ | | | OFED 4.7-3 | | OFED 4.7-3 |
+ | | | rdma-core 26 | | rdma-core 26 |
+ | | | ConnectX-5 | | ConnectX-5 |
+ +-----------------------+-----------------+-----------------+
Notes for testpmd
-----------------
diff --git a/doc/guides/nics/octeontx.rst b/doc/guides/nics/octeontx.rst
index 3c19c91..8fc5381 100644
--- a/doc/guides/nics/octeontx.rst
+++ b/doc/guides/nics/octeontx.rst
@@ -174,3 +174,10 @@ The OCTEON TX SoC family NICs support a maximum of a 32K jumbo frame. The value
is fixed and cannot be changed. So, even when the ``rxmode.max_rx_pkt_len``
member of ``struct rte_eth_conf`` is set to a value lower than 32k, frames
up to 32k bytes can still reach the host interface.
+
+Maximum mempool size
+~~~~~~~~~~~~~~~~~~~~
+
+The maximum mempool size supplied to Rx queue setup should be less than 128K.
+When running testpmd on OCTEON TX the application can limit the number of mbufs
+by using the option ``--total-num-mbufs=131072``.
diff --git a/doc/guides/nics/qede.rst b/doc/guides/nics/qede.rst
index 2f40457..5b2f868 100644
--- a/doc/guides/nics/qede.rst
+++ b/doc/guides/nics/qede.rst
@@ -70,6 +70,12 @@ Co-existence considerations
to the PFs of a given adapter and either qede PMD or Linux drivers
(qed and qede) can be bound to the VFs of the adapter.
+- For sharing an adapter between DPDK and Linux drivers, SRIOV needs
+ to be enabled. Bind all the PFs to Linux Drivers(qed/qede). Create
+ a VF on PFs where DPDK is desired and bind these VFs to qede_pmd.
+ Binding of PFs simultaneously to DPDK and Linux drivers on a given
+ adapter is not supported.
+
Supported QLogic Adapters
-------------------------
@@ -82,9 +88,7 @@ Prerequisites
inbox in certain newer Linux distros under the standard directory
``E.g. /lib/firmware/qed/qed_init_values-8.40.33.0.bin``.
If the required firmware files are not available then download it from
- `linux-firmware git repository <http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/qed>`_
- or `QLogic Driver Download Center <http://driverdownloads.qlogic.com/QLogicDriverDownloads_UI/DefaultNewSearch.aspx>`_.
- To download firmware file from QLogic website, select adapter category, model and DPDK Poll Mode Driver.
+ `linux-firmware git repository <http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/qed>`_.
- Requires the NIC be updated minimally with **8.30.x.x** Management firmware(MFW) version supported for that NIC.
It is highly recommended that the NIC be updated with the latest available management firmware version to get latest feature set.
@@ -99,7 +103,6 @@ Prerequisites
`QLogic Driver Download Center <http://driverdownloads.qlogic.com/QLogicDriverDownloads_UI/DefaultNewSearch.aspx>`_.
For downloading PF driver, select adapter category, model and Linux distro.
-
Performance note
~~~~~~~~~~~~~~~~
@@ -126,12 +129,26 @@ enabling debugging options may affect system performance.
- ``CONFIG_RTE_LIBRTE_QEDE_FW`` (default **""**)
Gives absolute path of firmware file.
- ``Eg: "/lib/firmware/qed/qed_init_values-8.37.7.0.bin"``
+ ``Eg: "/lib/firmware/qed/qed_init_values-8.40.33.0.bin"``
Empty string indicates driver will pick up the firmware file
from the default location /lib/firmware/qed.
CAUTION this option is more for custom firmware, it is not
recommended for use under normal condition.
+Config notes
+~~~~~~~~~~~~
+
+When there are multiple adapters and/or large number of Rx/Tx queues
+configured on the adapters, the default (2560) number of memzone
+descriptors may not be enough. Please increase the number of memzone
+descriptors to a higher number as needed. When sufficient number of
+memzone descriptors are not configured, user can potentially run into
+following error.
+
+ .. code-block:: console
+
+ EAL: memzone_reserve_aligned_thread_unsafe(): No more room in config
+
Driver compilation and testing
------------------------------
diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst
index 4b6d77d..7e44f84 100644
--- a/doc/guides/nics/tap.rst
+++ b/doc/guides/nics/tap.rst
@@ -76,7 +76,7 @@ Please change the IP addresses as you see fit.
If routing is enabled on the host you can also communicate with the DPDK App
over the internet via a standard socket layer application as long as you
-account for the protocol handing in the application.
+account for the protocol handling in the application.
If you have a Network Stack in your DPDK application or something like it you
can utilize that stack to handle the network protocols. Plus you would be able
@@ -132,9 +132,9 @@ As rules are translated to TC, it is possible to show them with something like::
Examples of testpmd flow rules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Drop packets for destination IP 192.168.0.1::
+Drop packets for destination IP 192.0.2.1::
- testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is 1.1.1.1 \
+ testpmd> flow create 0 priority 1 ingress pattern eth / ipv4 dst is 192.0.2.1 \
/ end actions drop / end
Ensure packets from a given MAC address are received on a queue 2::
@@ -298,4 +298,3 @@ Systems supporting flow API
| Azure Ubuntu 16.04,| No limitation |
| kernel 4.13 | |
+--------------------+-----------------------+
-
diff --git a/doc/guides/nics/vhost.rst b/doc/guides/nics/vhost.rst
index e5e3e6b..912f4bd 100644
--- a/doc/guides/nics/vhost.rst
+++ b/doc/guides/nics/vhost.rst
@@ -1,32 +1,5 @@
-.. BSD LICENSE
- Copyright(c) 2016 IGEL Co., Ltd.. All rights reserved.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of IGEL Co., Ltd. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright(c) 2016 IGEL Co., Ltd.
Poll Mode Driver that wraps vhost library
=========================================
diff --git a/doc/guides/nics/virtio.rst b/doc/guides/nics/virtio.rst
index fb378a4..d1f5fb8 100644
--- a/doc/guides/nics/virtio.rst
+++ b/doc/guides/nics/virtio.rst
@@ -402,3 +402,127 @@ Below devargs are supported by the virtio-user vdev:
It is used to enable virtio device packed virtqueue feature.
(Default: 0 (disabled))
+
+Virtio paths Selection and Usage
+--------------------------------
+
+Logically virtio-PMD has 9 paths based on the combination of virtio features
+(Rx mergeable, In-order, Packed virtqueue), below is an introduction of these
+features:
+
+* `Rx mergeable <https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/
+ virtio-v1.1-cs01.html#x1-2140004>`_: With this feature negotiated, device
+ can receive large packets by combining individual descriptors.
+* `In-order <https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/
+ virtio-v1.1-cs01.html#x1-690008>`_: Some devices always use descriptors
+ in the same order in which they have been made available, these
+ devices can offer the VIRTIO_F_IN_ORDER feature. With this feature negotiated,
+ driver will use descriptors in order.
+* `Packed virtqueue <https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/
+ virtio-v1.1-cs01.html#x1-610007>`_: The structure of packed virtqueue is
+ different from split virtqueue, split virtqueue is composed of available ring,
+ used ring and descriptor table, while packed virtqueue is composed of descriptor
+ ring, driver event suppression and device event suppression. The idea behind
+ this is to improve performance by avoiding cache misses and make it easier
+ for hardware to implement.
+
+Virtio paths Selection
+~~~~~~~~~~~~~~~~~~~~~~
+
+If packed virtqueue is not negotiated, below split virtqueue paths will be selected
+according to below configuration:
+
+#. Split virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature is
+ not negotiated, this path will be selected.
+#. Split virtqueue non-mergeable path: If Rx mergeable and in-order feature are not
+ negotiated, also Rx offload(s) are requested, this path will be selected.
+#. Split virtqueue in-order mergeable path: If Rx mergeable and in-order feature are
+ both negotiated, this path will be selected.
+#. Split virtqueue in-order non-mergeable path: If in-order feature is negotiated and
+ Rx mergeable is not negotiated, this path will be selected.
+#. Split virtqueue vectorized Rx path: If Rx mergeable is disabled and no Rx offload
+ requested, this path will be selected.
+
+If packed virtqueue is negotiated, below packed virtqueue paths will be selected
+according to below configuration:
+
+#. Packed virtqueue mergeable path: If Rx mergeable is negotiated, in-order feature
+ is not negotiated, this path will be selected.
+#. Packed virtqueue non-mergeable path: If Rx mergeable and in-order feature are not
+ negotiated, this path will be selected.
+#. Packed virtqueue in-order mergeable path: If in-order and Rx mergeable feature are
+ both negotiated, this path will be selected.
+#. Packed virtqueue in-order non-mergeable path: If in-order feature is negotiated and
+ Rx mergeable is not negotiated, this path will be selected.
+
+Rx/Tx callbacks of each Virtio path
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Refer to above description, virtio path and corresponding Rx/Tx callbacks will
+be selected automatically. Rx callbacks and Tx callbacks for each virtio path
+are shown in below table:
+
+.. table:: Virtio Paths and Callbacks
+
+ ============================================ ================================= ========================
+ Virtio paths Rx callbacks Tx callbacks
+ ============================================ ================================= ========================
+ Split virtqueue mergeable path virtio_recv_mergeable_pkts virtio_xmit_pkts
+ Split virtqueue non-mergeable path virtio_recv_pkts virtio_xmit_pkts
+ Split virtqueue in-order mergeable path virtio_recv_pkts_inorder virtio_xmit_pkts_inorder
+ Split virtqueue in-order non-mergeable path virtio_recv_pkts_inorder virtio_xmit_pkts_inorder
+ Split virtqueue vectorized Rx path virtio_recv_pkts_vec virtio_xmit_pkts
+ Packed virtqueue mergeable path virtio_recv_mergeable_pkts_packed virtio_xmit_pkts_packed
+ Packed virtqueue non-meregable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
+ Packed virtqueue in-order mergeable path virtio_recv_mergeable_pkts_packed virtio_xmit_pkts_packed
+ Packed virtqueue in-order non-mergeable path virtio_recv_pkts_packed virtio_xmit_pkts_packed
+ ============================================ ================================= ========================
+
+Virtio paths Support Status from Release to Release
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Virtio feature implementation:
+
+* In-order feature is supported since DPDK 18.08 by adding new Rx/Tx callbacks
+ ``virtio_recv_pkts_inorder`` and ``virtio_xmit_pkts_inorder``.
+* Packed virtqueue is supported since DPDK 19.02 by adding new Rx/Tx callbacks
+ ``virtio_recv_pkts_packed`` , ``virtio_recv_mergeable_pkts_packed`` and
+ ``virtio_xmit_pkts_packed``.
+
+All virtio paths support status are shown in below table:
+
+.. table:: Virtio Paths and Releases
+
+ ============================================ ============= ============= =============
+ Virtio paths 16.11 ~ 18.05 18.08 ~ 18.11 19.02 ~ 19.11
+ ============================================ ============= ============= =============
+ Split virtqueue mergeable path Y Y Y
+ Split virtqueue non-mergeable path Y Y Y
+ Split virtqueue vectorized Rx path Y Y Y
+ Split virtqueue simple Tx path Y N N
+ Split virtqueue in-order mergeable path Y Y
+ Split virtqueue in-order non-mergeable path Y Y
+ Packed virtqueue mergeable path Y
+ Packed virtqueue non-mergeable path Y
+ Packed virtqueue in-order mergeable path Y
+ Packed virtqueue in-order non-mergeable path Y
+ ============================================ ============= ============= =============
+
+QEMU Support Status
+~~~~~~~~~~~~~~~~~~~
+
+* Qemu now supports three paths of split virtqueue: Split virtqueue mergeable path,
+ Split virtqueue non-mergeable path, Split virtqueue vectorized Rx path.
+* Since qemu 4.2.0, Packed virtqueue mergeable path and Packed virtqueue non-mergeable
+ path can be supported.
+
+How to Debug
+~~~~~~~~~~~~
+
+If you meet performance drop or some other issues after upgrading the driver
+or configuration, below steps can help you identify which path you selected and
+root cause faster.
+
+#. Run vhost/virtio test case;
+#. Run "perf top" and check virtio Rx/Tx callback names;
+#. Identify which virtio path is selected refer to above table.
diff --git a/doc/guides/prog_guide/env_abstraction_layer.rst b/doc/guides/prog_guide/env_abstraction_layer.rst
index cd8e300..48a2fec 100644
--- a/doc/guides/prog_guide/env_abstraction_layer.rst
+++ b/doc/guides/prog_guide/env_abstraction_layer.rst
@@ -297,7 +297,7 @@ set of API's under the ``rte_extmem_*`` namespace.
These API's are (as their name implies) intended to allow registering or
unregistering externally allocated memory to/from DPDK's internal page table, to
-allow API's like ``rte_virt2memseg`` etc. to work with externally allocated
+allow API's like ``rte_mem_virt2memseg`` etc. to work with externally allocated
memory. Memory added this way will not be available for any regular DPDK
allocators; DPDK will leave this memory for the user application to manage.
@@ -475,6 +475,9 @@ devices would fail anyway.
``RTE_PCI_DRV_NEED_IOVA_AS_VA`` flag is used to dictate that this PCI
driver can only work in RTE_IOVA_VA mode.
+ When the KNI kernel module is detected, RTE_IOVA_PA mode is preferred as a
+ performance penalty is expected in RTE_IOVA_VA mode.
+
IOVA Mode Configuration
~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/doc/guides/prog_guide/generic_segmentation_offload_lib.rst b/doc/guides/prog_guide/generic_segmentation_offload_lib.rst
index 73e7687..205cb8a 100644
--- a/doc/guides/prog_guide/generic_segmentation_offload_lib.rst
+++ b/doc/guides/prog_guide/generic_segmentation_offload_lib.rst
@@ -237,4 +237,3 @@ To segment an outgoing packet, an application must:
For tunneled packets, the outer IPv4 headers' checksums should also be
updated. Alternatively, the application may offload checksum calculation
to HW.
-
diff --git a/doc/guides/prog_guide/img/sched_hier_per_port.png b/doc/guides/prog_guide/img/sched_hier_per_port.png
deleted file mode 100644
index 462e88a..0000000
--- a/doc/guides/prog_guide/img/sched_hier_per_port.png
+++ /dev/null
Binary files differ
diff --git a/doc/guides/prog_guide/img/sched_hier_per_port.svg b/doc/guides/prog_guide/img/sched_hier_per_port.svg
new file mode 100644
index 0000000..759dead
--- /dev/null
+++ b/doc/guides/prog_guide/img/sched_hier_per_port.svg
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export sched_hier_per_port.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+ xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="6.25057in" height="7.26839in"
+ viewBox="0 0 450.041 523.324" xml:space="preserve" color-interpolation-filters="sRGB" class="st8">
+ <v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+ <style type="text/css">
+ <![CDATA[
+ .st1 {fill:#0070c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st2 {marker-end:url(#mrkr13-71);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st3 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.37313432835821}
+ .st4 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+ .st5 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+ .st6 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+ .st7 {font-size:1em}
+ .st8 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+ ]]>
+ </style>
+
+ <defs id="Markers">
+ <g id="lend13">
+ <path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+ </g>
+ <marker id="mrkr13-71" class="st3" v:arrowType="13" v:arrowSize="2" v:setback="8.04" refX="-8.04" orient="auto"
+ markerUnits="strokeWidth" overflow="visible">
+ <use xlink:href="#lend13" transform="scale(-2.68,-2.68) "/>
+ </marker>
+ </defs>
+ <g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+ <title>Page-1</title>
+ <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+ v:shadowOffsetY="-8.50394"/>
+ <v:layer v:name="Connector" v:index="0"/>
+ <g id="group234-1" transform="translate(0.375,-12.7124)" v:mID="234" v:groupContext="group">
+ <title>Sheet.234</title>
+ <g id="shape1-2" v:mID="1" v:groupContext="shape" transform="translate(265.039,-113.796)">
+ <title>Sheet.1</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(265.039,-98.3577)">
+ <title>Sheet.2</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape3-6" v:mID="3" v:groupContext="shape" transform="translate(265.039,-82.9192)">
+ <title>Sheet.3</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape4-8" v:mID="4" v:groupContext="shape" transform="translate(265.039,-67.4807)">
+ <title>Sheet.4</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape6-10" v:mID="6" v:groupContext="shape" transform="translate(288.197,-113.796)">
+ <title>Sheet.6</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape7-12" v:mID="7" v:groupContext="shape" transform="translate(288.197,-98.3577)">
+ <title>Sheet.7</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape8-14" v:mID="8" v:groupContext="shape" transform="translate(288.197,-82.9192)">
+ <title>Sheet.8</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape9-16" v:mID="9" v:groupContext="shape" transform="translate(288.197,-67.4807)">
+ <title>Sheet.9</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape10-18" v:mID="10" v:groupContext="shape" transform="translate(311.355,-113.796)">
+ <title>Sheet.10</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape11-20" v:mID="11" v:groupContext="shape" transform="translate(311.355,-98.3577)">
+ <title>Sheet.11</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape12-22" v:mID="12" v:groupContext="shape" transform="translate(311.355,-82.9192)">
+ <title>Sheet.12</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape13-24" v:mID="13" v:groupContext="shape" transform="translate(311.355,-67.4807)">
+ <title>Sheet.13</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape14-26" v:mID="14" v:groupContext="shape" transform="translate(334.513,-113.796)">
+ <title>Sheet.14</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape15-28" v:mID="15" v:groupContext="shape" transform="translate(334.513,-98.3577)">
+ <title>Sheet.15</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape16-30" v:mID="16" v:groupContext="shape" transform="translate(334.513,-82.9192)">
+ <title>Sheet.16</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape17-32" v:mID="17" v:groupContext="shape" transform="translate(334.513,-67.4807)">
+ <title>Sheet.17</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape26-34" v:mID="26" v:groupContext="shape" transform="translate(199.484,-113.968)">
+ <title>Sheet.26</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape27-36" v:mID="27" v:groupContext="shape" transform="translate(199.484,-98.3577)">
+ <title>Sheet.27</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape28-38" v:mID="28" v:groupContext="shape" transform="translate(199.484,-82.7471)">
+ <title>Sheet.28</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape29-40" v:mID="29" v:groupContext="shape" transform="translate(199.484,-67.1365)">
+ <title>Sheet.29</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape30-42" v:mID="30" v:groupContext="shape" transform="translate(68.9749,-115.97)">
+ <title>Sheet.30</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape31-44" v:mID="31" v:groupContext="shape" transform="translate(68.9749,-100.65)">
+ <title>Sheet.31</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape32-46" v:mID="32" v:groupContext="shape" transform="translate(68.9749,-85.3307)">
+ <title>Sheet.32</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape33-48" v:mID="33" v:groupContext="shape" transform="translate(68.9749,-70.0112)">
+ <title>Sheet.33</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape40-50" v:mID="40" v:groupContext="shape" transform="translate(67.8551,-198.425)">
+ <title>Sheet.40</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape42-52" v:mID="42" v:groupContext="shape" transform="translate(198.153,-205.871)">
+ <title>Sheet.42</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape44-54" v:mID="44" v:groupContext="shape" transform="translate(297.427,-205.871)">
+ <title>Sheet.44</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape46-56" v:mID="46" v:groupContext="shape" transform="translate(170.852,-306.005)">
+ <title>Sheet.46</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape47-58" v:mID="47" v:groupContext="shape" transform="translate(255.236,-388.69)">
+ <title>Sheet.47</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape48-60" v:mID="48" v:groupContext="shape" transform="translate(341.169,-317.821)">
+ <title>Sheet.48</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape49-62" v:mID="49" v:groupContext="shape" transform="translate(344.583,-470.722)">
+ <title>Sheet.49</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape50-64" v:mID="50" v:groupContext="shape" transform="translate(426.955,-399.855)">
+ <title>Sheet.50</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape51-66" v:mID="51" v:groupContext="shape" v:layerMember="0" transform="translate(86.747,-217.661)">
+ <title>Dynamic connector</title>
+ <path d="M0 523.32 L79.21 440.59" class="st2"/>
+ </g>
+ <g id="shape52-72" v:mID="52" v:groupContext="shape" v:layerMember="0" transform="translate(71.6902,-131.289)">
+ <title>Dynamic connector.52</title>
+ <path d="M6.9 523.32 L7.21 468.25" class="st2"/>
+ </g>
+ <g id="shape157-77" v:mID="157" v:groupContext="shape" v:layerMember="0" transform="translate(202.193,-129.579)">
+ <title>Dynamic connector.157</title>
+ <path d="M7.05 523.32 L7.11 459.09" class="st2"/>
+ </g>
+ <g id="shape158-82" v:mID="158" v:groupContext="shape" v:layerMember="0" transform="translate(206.384,-227.814)">
+ <title>Dynamic connector.158</title>
+ <path d="M0 523.32 L-18.25 456.38" class="st2"/>
+ </g>
+ <g id="shape159-87" v:mID="159" v:groupContext="shape" v:layerMember="0" transform="translate(299.837,-223.969)">
+ <title>Dynamic connector.159</title>
+ <path d="M0 523.32 L-99.6 444.53" class="st2"/>
+ </g>
+ <g id="shape160-92" v:mID="160" v:groupContext="shape" v:layerMember="0" transform="translate(295.944,-129.235)">
+ <title>Dynamic connector.160</title>
+ <path d="M2.77 523.32 L10.05 458.6" class="st2"/>
+ </g>
+ <g id="shape161-97" v:mID="161" v:groupContext="shape" v:layerMember="0" transform="translate(277.428,-129.235)">
+ <title>Dynamic connector.161</title>
+ <path d="M0 523.32 L23.4 457.41" class="st2"/>
+ </g>
+ <g id="shape162-102" v:mID="162" v:groupContext="shape" v:layerMember="0" transform="translate(322.104,-129.235)">
+ <title>Dynamic connector.162</title>
+ <path d="M-2.1 523.32 L-10.52 458.55" class="st2"/>
+ </g>
+ <g id="shape163-107" v:mID="163" v:groupContext="shape" v:layerMember="0" transform="translate(341.288,-129.235)">
+ <title>Dynamic connector.163</title>
+ <path d="M0 523.32 L-24.59 457.29" class="st2"/>
+ </g>
+ <g id="shape164-112" v:mID="164" v:groupContext="shape" v:layerMember="0" transform="translate(111.288,-84.3465)">
+ <title>Dynamic connector.164</title>
+ <path d="M0 516.63 L69.49 515.85" class="st4"/>
+ </g>
+ <g id="shape165-115" v:mID="165" v:groupContext="shape" v:layerMember="0" transform="translate(189.998,-324.99)">
+ <title>Dynamic connector.165</title>
+ <path d="M0 523.32 L59.82 464.71" class="st2"/>
+ </g>
+ <g id="shape166-120" v:mID="166" v:groupContext="shape" v:layerMember="0" transform="translate(343.721,-336.095)">
+ <title>Dynamic connector.166</title>
+ <path d="M0 523.32 L-59.4 474.34" class="st2"/>
+ </g>
+ <g id="shape167-125" v:mID="167" v:groupContext="shape" v:layerMember="0" transform="translate(274.631,-407.412)">
+ <title>Dynamic connector.167</title>
+ <path d="M0 523.32 L64.01 464.55" class="st2"/>
+ </g>
+ <g id="shape168-130" v:mID="168" v:groupContext="shape" v:layerMember="0" transform="translate(429.657,-418.308)">
+ <title>Dynamic connector.168</title>
+ <path d="M0 523.32 L-56.3 474.89" class="st2"/>
+ </g>
+ <g id="shape170-135" v:mID="170" v:groupContext="shape" v:layerMember="0" transform="translate(70.9299,-2.87469)">
+ <title>Dynamic connector.170</title>
+ <path d="M6.65 523.32 L7.36 468.25" class="st2"/>
+ </g>
+ <g id="shape171-140" v:mID="171" v:groupContext="shape" v:layerMember="0" transform="translate(201.964,1.13687E-13)">
+ <title>Dynamic connector.171</title>
+ <path d="M6.93 523.32 L7.19 468.25" class="st2"/>
+ </g>
+ <g id="shape172-145" v:mID="172" v:groupContext="shape" v:layerMember="0" transform="translate(267.581,-0.34415)">
+ <title>Dynamic connector.172</title>
+ <path d="M7.07 523.32 L7.1 468.25" class="st2"/>
+ </g>
+ <g id="shape173-150" v:mID="173" v:groupContext="shape" v:layerMember="0" transform="translate(290.626,-0.34415)">
+ <title>Dynamic connector.173</title>
+ <path d="M6.98 523.32 L7.16 468.25" class="st2"/>
+ </g>
+ <g id="shape174-155" v:mID="174" v:groupContext="shape" v:layerMember="0" transform="translate(328.373,-0.34415)">
+ <title>Dynamic connector.174</title>
+ <path d="M-6.86 523.32 L-7.23 468.25" class="st2"/>
+ </g>
+ <g id="shape175-160" v:mID="175" v:groupContext="shape" v:layerMember="0" transform="translate(336.683,-0.344153)">
+ <title>Dynamic connector.175</title>
+ <path d="M6.77 523.32 L7.29 468.25" class="st2"/>
+ </g>
+ <g id="shape176-165" v:mID="176" v:groupContext="shape" transform="translate(3.59712E-14,-85.0395)">
+ <title>Sheet.176</title>
+ <desc>Queue</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="502.064" width="52.45" height="42.5197"/>
+ <rect x="0" y="480.804" width="52.4409" height="42.5197" class="st5"/>
+ <text x="7.19" y="506.26" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Queue</text> </g>
+ <g id="shape177-168" v:mID="177" v:groupContext="shape" transform="translate(265.039,-113.796)">
+ <title>Sheet.177</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape178-170" v:mID="178" v:groupContext="shape" transform="translate(265.039,-98.3577)">
+ <title>Sheet.178</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape179-172" v:mID="179" v:groupContext="shape" transform="translate(265.039,-82.9192)">
+ <title>Sheet.179</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape180-174" v:mID="180" v:groupContext="shape" transform="translate(265.039,-67.4807)">
+ <title>Sheet.180</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape181-176" v:mID="181" v:groupContext="shape" transform="translate(288.197,-113.796)">
+ <title>Sheet.181</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape182-178" v:mID="182" v:groupContext="shape" transform="translate(288.197,-98.3577)">
+ <title>Sheet.182</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape183-180" v:mID="183" v:groupContext="shape" transform="translate(288.197,-82.9192)">
+ <title>Sheet.183</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape184-182" v:mID="184" v:groupContext="shape" transform="translate(288.197,-67.4807)">
+ <title>Sheet.184</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape185-184" v:mID="185" v:groupContext="shape" transform="translate(311.355,-113.796)">
+ <title>Sheet.185</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape186-186" v:mID="186" v:groupContext="shape" transform="translate(311.355,-98.3577)">
+ <title>Sheet.186</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape187-188" v:mID="187" v:groupContext="shape" transform="translate(311.355,-82.9192)">
+ <title>Sheet.187</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape188-190" v:mID="188" v:groupContext="shape" transform="translate(311.355,-67.4807)">
+ <title>Sheet.188</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape189-192" v:mID="189" v:groupContext="shape" transform="translate(334.513,-113.796)">
+ <title>Sheet.189</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape190-194" v:mID="190" v:groupContext="shape" transform="translate(334.513,-98.3577)">
+ <title>Sheet.190</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape191-196" v:mID="191" v:groupContext="shape" transform="translate(334.513,-82.9192)">
+ <title>Sheet.191</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape192-198" v:mID="192" v:groupContext="shape" transform="translate(334.513,-67.4807)">
+ <title>Sheet.192</title>
+ <rect x="0" y="507.885" width="19.2981" height="15.4385" class="st1"/>
+ </g>
+ <g id="shape193-200" v:mID="193" v:groupContext="shape" transform="translate(199.484,-113.968)">
+ <title>Sheet.193</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape194-202" v:mID="194" v:groupContext="shape" transform="translate(199.484,-98.3577)">
+ <title>Sheet.194</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape195-204" v:mID="195" v:groupContext="shape" transform="translate(199.484,-82.7471)">
+ <title>Sheet.195</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape196-206" v:mID="196" v:groupContext="shape" transform="translate(199.484,-67.1365)">
+ <title>Sheet.196</title>
+ <rect x="0" y="507.713" width="19.5132" height="15.6106" class="st1"/>
+ </g>
+ <g id="shape197-208" v:mID="197" v:groupContext="shape" transform="translate(68.9749,-115.97)">
+ <title>Sheet.197</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape198-210" v:mID="198" v:groupContext="shape" transform="translate(68.9749,-100.65)">
+ <title>Sheet.198</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape199-212" v:mID="199" v:groupContext="shape" transform="translate(68.9749,-85.3307)">
+ <title>Sheet.199</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape200-214" v:mID="200" v:groupContext="shape" transform="translate(68.9749,-70.0112)">
+ <title>Sheet.200</title>
+ <rect x="0" y="508.004" width="19.1493" height="15.3195" class="st1"/>
+ </g>
+ <g id="shape201-216" v:mID="201" v:groupContext="shape" transform="translate(67.8551,-198.425)">
+ <title>Sheet.201</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape202-218" v:mID="202" v:groupContext="shape" transform="translate(198.153,-205.871)">
+ <title>Sheet.202</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape203-220" v:mID="203" v:groupContext="shape" transform="translate(297.427,-205.871)">
+ <title>Sheet.203</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape204-222" v:mID="204" v:groupContext="shape" transform="translate(170.852,-306.005)">
+ <title>Sheet.204</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape205-224" v:mID="205" v:groupContext="shape" transform="translate(255.236,-388.69)">
+ <title>Sheet.205</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape206-226" v:mID="206" v:groupContext="shape" transform="translate(341.169,-317.821)">
+ <title>Sheet.206</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape207-228" v:mID="207" v:groupContext="shape" transform="translate(344.583,-470.722)">
+ <title>Sheet.207</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape208-230" v:mID="208" v:groupContext="shape" transform="translate(426.955,-399.855)">
+ <title>Sheet.208</title>
+ <ellipse cx="11.1684" cy="512.155" rx="11.1684" ry="11.1684" class="st1"/>
+ </g>
+ <g id="shape209-232" v:mID="209" v:groupContext="shape" v:layerMember="0" transform="translate(86.747,-217.661)">
+ <title>Dynamic connector.209</title>
+ <path d="M0 523.32 L79.21 440.59" class="st2"/>
+ </g>
+ <g id="shape210-237" v:mID="210" v:groupContext="shape" v:layerMember="0" transform="translate(71.6902,-131.289)">
+ <title>Dynamic connector.210</title>
+ <path d="M6.9 523.32 L7.21 468.25" class="st2"/>
+ </g>
+ <g id="shape211-242" v:mID="211" v:groupContext="shape" v:layerMember="0" transform="translate(202.193,-129.579)">
+ <title>Dynamic connector.211</title>
+ <path d="M7.05 523.32 L7.11 459.09" class="st2"/>
+ </g>
+ <g id="shape212-247" v:mID="212" v:groupContext="shape" v:layerMember="0" transform="translate(206.384,-227.814)">
+ <title>Dynamic connector.212</title>
+ <path d="M0 523.32 L-18.25 456.38" class="st2"/>
+ </g>
+ <g id="shape213-252" v:mID="213" v:groupContext="shape" v:layerMember="0" transform="translate(299.837,-223.969)">
+ <title>Dynamic connector.213</title>
+ <path d="M0 523.32 L-99.6 444.53" class="st2"/>
+ </g>
+ <g id="shape214-257" v:mID="214" v:groupContext="shape" v:layerMember="0" transform="translate(295.944,-129.235)">
+ <title>Dynamic connector.214</title>
+ <path d="M2.77 523.32 L10.05 458.6" class="st2"/>
+ </g>
+ <g id="shape215-262" v:mID="215" v:groupContext="shape" v:layerMember="0" transform="translate(277.428,-129.235)">
+ <title>Dynamic connector.215</title>
+ <path d="M0 523.32 L23.4 457.41" class="st2"/>
+ </g>
+ <g id="shape216-267" v:mID="216" v:groupContext="shape" v:layerMember="0" transform="translate(322.104,-129.235)">
+ <title>Dynamic connector.216</title>
+ <path d="M-2.1 523.32 L-10.52 458.55" class="st2"/>
+ </g>
+ <g id="shape217-272" v:mID="217" v:groupContext="shape" v:layerMember="0" transform="translate(341.288,-129.235)">
+ <title>Dynamic connector.217</title>
+ <path d="M0 523.32 L-24.59 457.29" class="st2"/>
+ </g>
+ <g id="shape218-277" v:mID="218" v:groupContext="shape" v:layerMember="0" transform="translate(111.288,-84.3465)">
+ <title>Dynamic connector.218</title>
+ <path d="M0 516.63 L69.49 515.85" class="st4"/>
+ </g>
+ <g id="shape219-280" v:mID="219" v:groupContext="shape" v:layerMember="0" transform="translate(189.998,-324.99)">
+ <title>Dynamic connector.219</title>
+ <path d="M0 523.32 L59.82 464.71" class="st2"/>
+ </g>
+ <g id="shape220-285" v:mID="220" v:groupContext="shape" v:layerMember="0" transform="translate(343.721,-336.095)">
+ <title>Dynamic connector.220</title>
+ <path d="M0 523.32 L-59.4 474.34" class="st2"/>
+ </g>
+ <g id="shape221-290" v:mID="221" v:groupContext="shape" v:layerMember="0" transform="translate(274.631,-407.412)">
+ <title>Dynamic connector.221</title>
+ <path d="M0 523.32 L64.01 464.55" class="st2"/>
+ </g>
+ <g id="shape222-295" v:mID="222" v:groupContext="shape" v:layerMember="0" transform="translate(429.657,-418.308)">
+ <title>Dynamic connector.222</title>
+ <path d="M0 523.32 L-56.3 474.89" class="st2"/>
+ </g>
+ <g id="shape223-300" v:mID="223" v:groupContext="shape" v:layerMember="0" transform="translate(70.9299,-2.87469)">
+ <title>Dynamic connector.223</title>
+ <path d="M6.65 523.32 L7.36 468.25" class="st2"/>
+ </g>
+ <g id="shape224-305" v:mID="224" v:groupContext="shape" v:layerMember="0" transform="translate(201.964,1.13687E-13)">
+ <title>Dynamic connector.224</title>
+ <path d="M6.93 523.32 L7.19 468.25" class="st2"/>
+ </g>
+ <g id="shape225-310" v:mID="225" v:groupContext="shape" v:layerMember="0" transform="translate(267.581,-0.34415)">
+ <title>Dynamic connector.225</title>
+ <path d="M7.07 523.32 L7.1 468.25" class="st2"/>
+ </g>
+ <g id="shape226-315" v:mID="226" v:groupContext="shape" v:layerMember="0" transform="translate(290.626,-0.34415)">
+ <title>Dynamic connector.226</title>
+ <path d="M6.98 523.32 L7.16 468.25" class="st2"/>
+ </g>
+ <g id="shape227-320" v:mID="227" v:groupContext="shape" v:layerMember="0" transform="translate(328.373,-0.34415)">
+ <title>Dynamic connector.227</title>
+ <path d="M-6.86 523.32 L-7.23 468.25" class="st2"/>
+ </g>
+ <g id="shape228-325" v:mID="228" v:groupContext="shape" v:layerMember="0" transform="translate(336.683,-0.344153)">
+ <title>Dynamic connector.228</title>
+ <path d="M6.77 523.32 L7.29 468.25" class="st2"/>
+ </g>
+ <g id="shape230-330" v:mID="230" v:groupContext="shape" transform="translate(9.92126,-185.273)">
+ <title>Sheet.230</title>
+ <desc>Traffic Class</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="499.003" width="52.45" height="48.6423"/>
+ <rect x="0" y="474.681" width="52.4409" height="48.6423" class="st5"/>
+ <text x="8.18" y="494.8" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Traffic<v:newlineChar/><tspan
+ x="12.05" dy="1.2em" class="st7">Class</tspan></text> </g>
+ <g id="shape231-334" v:mID="231" v:groupContext="shape" transform="translate(113.386,-297.638)">
+ <title>Sheet.231</title>
+ <desc>Pipe</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="26.2205" cy="499.003" width="52.45" height="48.6423"/>
+ <rect x="0" y="474.681" width="52.4409" height="48.6423" class="st5"/>
+ <text x="13.84" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Pipe</text> </g>
+ <g id="shape232-337" v:mID="232" v:groupContext="shape" transform="translate(185.669,-382.677)">
+ <title>Sheet.232</title>
+ <desc>Subport</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="32.5984" cy="499.003" width="65.2" height="48.6423"/>
+ <rect x="0" y="474.681" width="65.1969" height="48.6423" class="st5"/>
+ <text x="9.87" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Subport</text> </g>
+ <g id="shape233-340" v:mID="233" v:groupContext="shape" transform="translate(284.882,-461.594)">
+ <title>Sheet.233</title>
+ <desc>Port</desc>
+ <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+ <v:textRect cx="32.5984" cy="499.003" width="65.2" height="48.6423"/>
+ <rect x="0" y="474.681" width="65.1969" height="48.6423" class="st5"/>
+ <text x="20.51" y="503.2" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Port</text> </g>
+ </g>
+ </g>
+</svg>
diff --git a/doc/guides/prog_guide/kernel_nic_interface.rst b/doc/guides/prog_guide/kernel_nic_interface.rst
index e12634d..32d09cc 100644
--- a/doc/guides/prog_guide/kernel_nic_interface.rst
+++ b/doc/guides/prog_guide/kernel_nic_interface.rst
@@ -300,6 +300,20 @@ The sk_buff is then freed and the mbuf sent in the tx_q FIFO.
The DPDK TX thread dequeues the mbuf and sends it to the PMD via ``rte_eth_tx_burst()``.
It then puts the mbuf back in the cache.
+IOVA = VA: Support
+------------------
+
+KNI operates in IOVA_VA scheme when
+
+- LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) and
+- EAL option `iova-mode=va` is passed or bus IOVA scheme in the DPDK is selected
+ as RTE_IOVA_VA.
+
+Due to IOVA to KVA address translations, based on the KNI use case there
+can be a performance impact. For mitigation, forcing IOVA to PA via EAL
+"--iova-mode=pa" option can be used, IOVA_DC bus iommu scheme can also
+result in IOVA as PA.
+
Ethtool
-------
@@ -307,4 +321,3 @@ Ethtool is a Linux-specific tool with corresponding support in the kernel.
The current version of kni provides minimal ethtool functionality
including querying version and link state. It does not support link
control, statistics, or dumping device registers.
-
diff --git a/doc/guides/prog_guide/qos_framework.rst b/doc/guides/prog_guide/qos_framework.rst
index a7527b2..a159709 100644
--- a/doc/guides/prog_guide/qos_framework.rst
+++ b/doc/guides/prog_guide/qos_framework.rst
@@ -171,7 +171,7 @@ The functionality of each hierarchical level is detailed in the following table.
| | | | token bucket per pipe. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
- | 4 | Traffic Class (TC) | 4 | #. TCs of the same pipe handled in strict priority order. |
+ | 4 | Traffic Class (TC) | 13 | #. TCs of the same pipe handled in strict priority order. |
| | | | |
| | | | #. Upper limit enforced per TC at the pipe level. |
| | | | |
@@ -183,8 +183,13 @@ The functionality of each hierarchical level is detailed in the following table.
| | | | adjusted value that is shared by all the subport pipes. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
- | 5 | Queue | 4 | #. Queues of the same TC are serviced using Weighted Round |
- | | | | Robin (WRR) according to predefined weights. |
+ | 5 | Queue | High priority TCs: 1, | #. All the high priority TCs (TC0, TC1, ...,TC11) have |
+ | | | Lowest priority TC: 4 | exactly 1 queue, while the lowest priority TC (TC12), |
+ | | | | called Best Effort (BE), has 4 queues. |
+ | | | | |
+ | | | | #. Queues of the lowest priority TC (BE) are serviced using |
+ | | | | Weighted Round Robin (WRR) according to predefined weights|
+ | | | | weights. |
| | | | |
+---+--------------------+----------------------------+---------------------------------------------------------------+
@@ -730,10 +735,10 @@ Implementation of Strict Priority Scheduling
Strict priority scheduling of traffic classes within the same pipe is implemented by the pipe dequeue state machine,
which selects the queues in ascending order.
-Therefore, queues 0..3 (associated with TC 0, highest priority TC) are handled before
-queues 4..7 (TC 1, lower priority than TC 0),
-which are handled before queues 8..11 (TC 2),
-which are handled before queues 12..15 (TC 3, lowest priority TC).
+Therefore, queue 0 (associated with TC 0, highest priority TC) is handled before
+queue 1 (TC 1, lower priority than TC 0),
+which is handled before queue 2 (TC 2, lower priority than TC 1) and it conitnues until queues of all TCs except the
+lowest priority TC are handled. At last, queues 12..15 (best effort TC, lowest priority TC) are handled.
Upper Limit Enforcement
'''''''''''''''''''''''
@@ -753,14 +758,14 @@ as described in :numref:`table_qos_10` and :numref:`table_qos_11`.
| # | Subport or pipe field | Unit | Description |
| | | | |
+===+=======================+=======+=======================================================================+
- | 1 | tc_time | Bytes | Time of the next update (upper limit refill) for the 4 TCs of the |
+ | 1 | tc_time | Bytes | Time of the next update (upper limit refill) for the TCs of the |
| | | | current subport / pipe. |
| | | | |
| | | | See Section `Internal Time Reference`_ for the |
| | | | explanation of why the time is maintained in byte units. |
| | | | |
+---+-----------------------+-------+-----------------------------------------------------------------------+
- | 2 | tc_period | Bytes | Time between two consecutive updates for the 4 TCs of the current |
+ | 2 | tc_period | Bytes | Time between two consecutive updates for the all TCs of the current |
| | | | subport / pipe. This is expected to be many times bigger than the |
| | | | typical value of the token bucket tb_period. |
| | | | |
@@ -815,7 +820,7 @@ as described in :numref:`table_qos_10` and :numref:`table_qos_11`.
Weighted Round Robin (WRR)
""""""""""""""""""""""""""
-The evolution of the WRR design solution from simple to complex is shown in :numref:`table_qos_12`.
+The evolution of the WRR design solution for the lowest priority traffic class (best effort TC) from simple to complex is shown in :numref:`table_qos_12`.
.. _table_qos_12:
@@ -977,33 +982,33 @@ with the third approach selected for implementation.
| | | |
+-----+---------------------------+-------------------------------------------------------------------------+
-Typically, the subport TC oversubscription feature is enabled only for the lowest priority traffic class (TC 3),
+Typically, the subport TC oversubscription feature is enabled only for the lowest priority traffic class,
which is typically used for best effort traffic,
with the management plane preventing this condition from occurring for the other (higher priority) traffic classes.
-To ease implementation, it is also assumed that the upper limit for subport TC 3 is set to 100% of the subport rate,
-and that the upper limit for pipe TC 3 is set to 100% of pipe rate for all subport member pipes.
+To ease implementation, it is also assumed that the upper limit for subport best effort TC is set to 100% of the subport rate,
+and that the upper limit for pipe best effort TC is set to 100% of pipe rate for all subport member pipes.
Implementation Overview
'''''''''''''''''''''''
The algorithm computes a watermark, which is periodically updated based on the current demand experienced by the subport member pipes,
-whose purpose is to limit the amount of traffic that each pipe is allowed to send for TC 3.
+whose purpose is to limit the amount of traffic that each pipe is allowed to send for best effort TC.
The watermark is computed at the subport level at the beginning of each traffic class upper limit enforcement period and
the same value is used by all the subport member pipes throughout the current enforcement period.
illustrates how the watermark computed as subport level at the beginning of each period is propagated to all subport member pipes.
At the beginning of the current enforcement period (which coincides with the end of the previous enforcement period),
-the value of the watermark is adjusted based on the amount of bandwidth allocated to TC 3 at the beginning of the previous period that
+the value of the watermark is adjusted based on the amount of bandwidth allocated to best effort TC at the beginning of the previous period that
was not left unused by the subport member pipes at the end of the previous period.
-If there was subport TC 3 bandwidth left unused,
+If there was subport best effort TC bandwidth left unused,
the value of the watermark for the current period is increased to encourage the subport member pipes to consume more bandwidth.
-Otherwise, the value of the watermark is decreased to enforce equality of bandwidth consumption among subport member pipes for TC 3.
+Otherwise, the value of the watermark is decreased to enforce equality of bandwidth consumption among subport member pipes for best effort TC.
The increase or decrease in the watermark value is done in small increments,
so several enforcement periods might be required to reach the equilibrium state.
-This state can change at any moment due to variations in the demand experienced by the subport member pipes for TC 3, for example,
+This state can change at any moment due to variations in the demand experienced by the subport member pipes for best effort TC, for example,
as a result of demand increase (when the watermark needs to be lowered) or demand decrease (when the watermark needs to be increased).
When demand is low, the watermark is set high to prevent it from impeding the subport member pipes from consuming more bandwidth.
@@ -1084,10 +1089,27 @@ The highest value for the watermark is picked as the highest rate configured for
| | | |
| | | tc3_cons = subport_tc3_credits_per_period - subport_tc3_credits; |
| | | |
- | | | tc3_cons_max = subport_tc3_credits_per_period - (tc0_cons + tc1_cons + |
- | | | tc2_cons); |
+ | | | tc4_cons = subport_tc4_credits_per_period - subport_tc4_credits; |
+ | | | |
+ | | | tc5_cons = subport_tc5_credits_per_period - subport_tc5_credits; |
+ | | | |
+ | | | tc6_cons = subport_tc6_credits_per_period - subport_tc6_credits; |
+ | | | |
+ | | | tc7_cons = subport_tc7_credits_per_period - subport_tc7_credits; |
+ | | | |
+ | | | tc8_cons = subport_tc8_credits_per_period - subport_tc8_credits; |
| | | |
- | | | if(tc3_consumption > (tc3_consumption_max - MTU)){ |
+ | | | tc9_cons = subport_tc9_credits_per_period - subport_tc9_credits; |
+ | | | |
+ | | | tc10_cons = subport_tc10_credits_per_period - subport_tc10_credits; |
+ | | | |
+ | | | tc11_cons = subport_tc11_credits_per_period - subport_tc11_credits; |
+ | | | |
+ | | | tc_be_cons_max = subport_tc_be_credits_per_period - (tc0_cons + tc1_cons + |
+ | | | tc2_cons + tc3_cons + tc4_cons + tc5_cons + tc6_cons + tc7_cons + tc8_cons + |
+ | | | tc9_cons + tc10_cons + tc11_cons); |
+ | | | |
+ | | | if(tc_be_consumption > (tc_be_consumption_max - MTU)){ |
| | | |
| | | wm -= wm >> 7; |
| | | |
@@ -1555,6 +1577,52 @@ A sample RED configuration is shown below. In this example, the queue size is 64
tc 3 wred inv prob = 10 10 10
tc 3 wred weight = 9 9 9
+ tc 4 wred min = 28 22 16
+ tc 4 wred max = 32 32 32
+ tc 4 wred inv prob = 10 10 10
+ tc 4 wred weight = 9 9 9
+
+ tc 5 wred min = 28 22 16
+ tc 5 wred max = 32 32 32
+ tc 5 wred inv prob = 10 10 10
+ tc 5 wred weight = 9 9 9
+
+ tc 6 wred min = 28 22 16
+ tc 6 wred max = 32 32 32
+ tc 6 wred inv prob = 10 10 10
+ tc 6 wred weight = 9 9 9
+
+ tc 7 wred min = 28 22 16
+ tc 7 wred max = 32 32 32
+ tc 7 wred inv prob = 10 10 10
+ tc 7 wred weight = 9 9 9
+
+ tc 8 wred min = 28 22 16
+ tc 8 wred max = 32 32 32
+ tc 8 wred inv prob = 10 10 10
+ tc 8 wred weight = 9 9 9
+
+ tc 9 wred min = 28 22 16
+ tc 9 wred max = 32 32 32
+ tc 9 wred inv prob = 10 10 10
+ tc 9 wred weight = 9 9 9
+
+
+ tc 10 wred min = 28 22 16
+ tc 10 wred max = 32 32 32
+ tc 10 wred inv prob = 10 10 10
+ tc 10 wred weight = 9 9 9
+
+ tc 11 wred min = 28 22 16
+ tc 11 wred max = 32 32 32
+ tc 11 wred inv prob = 10 10 10
+ tc 11 wred weight = 9 9 9
+
+ tc 12 wred min = 28 22 16
+ tc 12 wred max = 32 32 32
+ tc 12 wred inv prob = 10 10 10
+ tc 12 wred weight = 9 9 9
+
With this configuration file, the RED configuration that applies to green,
yellow and red packets in traffic class 0 is shown in :numref:`table_qos_18`.
diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index f545801..afa94b4 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -59,30 +59,14 @@ Deprecation Notices
- ``rte_eth_dev_stop``
- ``rte_eth_dev_close``
-* ethdev: New offload flags ``DEV_RX_OFFLOAD_RSS_HASH`` and
- ``DEV_RX_OFFLOAD_FLOW_MARK`` will be added in 19.11.
+* ethdev: New offload flags ``DEV_RX_OFFLOAD_FLOW_MARK`` will be added in 19.11.
This will allow application to enable or disable PMDs from updating
- ``rte_mbuf::hash::rss`` and ``rte_mbuf::hash::fdir`` respectively.
+ ``rte_mbuf::hash::fdir``.
This scheme will allow PMDs to avoid writes to ``rte_mbuf`` fields on Rx and
thereby improve Rx performance if application wishes do so.
- In 19.11 PMDs will still update the fields even when the offloads are not
+ In 19.11 PMDs will still update the field even when the offload is not
enabled.
-* ethdev: New function ``rte_eth_dev_set_supported_ptypes`` will be added in
- 19.11.
- This will allow application to request PMD to set specific ptypes defined
- through ``rte_eth_dev_set_supported_ptypes`` in ``rte_mbuf::packet_type``.
- If application doesn't want any ptype information it can call
- ``rte_eth_dev_set_supported_ptypes(ethdev_id, RTE_PTYPE_UNKNOWN)`` and PMD
- will set ``rte_mbuf::packet_type`` to ``0``.
- If application doesn't call ``rte_eth_dev_set_supported_ptypes`` PMD can
- return ``rte_mbuf::packet_type`` with ``rte_eth_dev_get_supported_ptypes``.
- If application is interested only in L2/L3 layer, it can inform the PMD
- to update ``rte_mbuf::packet_type`` with L2/L3 ptype by calling
- ``rte_eth_dev_set_supported_ptypes(ethdev_id, RTE_PTYPE_L2_MASK | RTE_PTYPE_L3_MASK)``.
- This scheme will allow PMDs to avoid lookup to internal ptype table on Rx and
- thereby improve Rx performance if application wishes do so.
-
* cryptodev: support for using IV with all sizes is added, J0 still can
be used but only when IV length in following structs ``rte_crypto_auth_xform``,
``rte_crypto_aead_xform`` is set to zero. When IV length is greater or equal
diff --git a/doc/guides/rel_notes/index.rst b/doc/guides/rel_notes/index.rst
index 26f4a97..24d927d 100644
--- a/doc/guides/rel_notes/index.rst
+++ b/doc/guides/rel_notes/index.rst
@@ -8,6 +8,7 @@ Release Notes
:maxdepth: 1
:numbered:
+ release_20_02
release_19_11
release_19_08
release_19_05
diff --git a/doc/guides/rel_notes/release_16_07.rst b/doc/guides/rel_notes/release_16_07.rst
index 2904aac..af89cf6 100644
--- a/doc/guides/rel_notes/release_16_07.rst
+++ b/doc/guides/rel_notes/release_16_07.rst
@@ -550,4 +550,3 @@ Tested OSes
- Ubuntu 15.10
- Ubuntu 16.04 LTS
- Wind River Linux 8
-
diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst
index c0045a9..84aa03a 100644
--- a/doc/guides/rel_notes/release_19_11.rst
+++ b/doc/guides/rel_notes/release_19_11.rst
@@ -56,67 +56,78 @@ New Features
Also, make sure to start the actual text at the margin.
=========================================================
-* **FreeBSD now supports `--base-virtaddr` EAL option.**
+* **Added support for --base-virtaddr EAL option to FreeBSD.**
- FreeBSD version now also supports setting base virtual address for mapping
- pages and resources into its address space.
+ The FreeBSD version of DPDK now also supports setting base virtual address
+ for mapping pages and resources into its address space.
* **Added Lock-free Stack for aarch64.**
- The lock-free stack implementation is enabled for aarch64 platforms.
+ Enabled the lock-free stack implementation for aarch64 platforms.
-* **Changed mempool allocation behaviour.**
+* **Extended pktmbuf mempool private structure.**
- Objects are no longer across pages by default.
- It may consume more memory when using small memory pages.
+ rte_pktmbuf_pool_private structure was extended to include flags field
+ for future compatibility.
+ As per 19.11 release this field is reserved and should be set to 0
+ by the user.
-* **Added support of dynamic fields and flags in mbuf.**
++* **Changed mempool allocation behavior.**
+
+ Changed the mempool allocation behaviour so that objects no longer cross
+ pages by default. Note, this may consume more memory when using small memory
+ pages.
+
+* **Added support for dynamic fields and flags in mbuf.**
This new feature adds the ability to dynamically register some room
for a field or a flag in the mbuf structure. This is typically used
for specific offload features, where adding a static field or flag
in the mbuf is not justified.
-* **Added hairpin queue.**
+* **Added support for hairpin queues.**
- On supported NICs, we can now setup haipin queue which will offload packets
- from the wire, backto the wire.
+ On supported NICs, we can now setup hairpin queues which will offload packets
+ from the wire, back to the wire.
* **Added flow tag in rte_flow.**
- SET_TAG action and TAG item have been added to support transient flow tag.
+ The ``SET_TAG`` action and ``TAG`` item have been added to support transient
+ flow tag.
* **Extended metadata support in rte_flow.**
- Flow metadata is extended to both Rx and Tx.
+ Flow metadata has been extended to both Rx and Tx.
* Tx metadata can also be set by SET_META action of rte_flow.
- * Rx metadata is delivered to host via a dynamic field of ``rte_mbuf`` with
- PKT_RX_DYNF_METADATA.
+ * Rx metadata is delivered to the host via a dynamic field of ``rte_mbuf``
+ with ``PKT_RX_DYNF_METADATA``.
-* **Added ethdev API to set supported packet types**
+* **Added ethdev API to set supported packet types.**
- * Added new API ``rte_eth_dev_set_ptypes`` that allows an application to
- inform PMD about reduced range of packet types to handle.
- * This scheme will allow PMDs to avoid lookup to internal ptype table on Rx
- and thereby improve Rx performance if application wishes do so.
+ * Added new API ``rte_eth_dev_set_ptypes`` which allows an application to
+ inform a PMD about a reduced range of packet types to handle.
+ * This scheme will allow PMDs to avoid lookup of internal ptype table on Rx
+ and thereby improve Rx performance if the application wishes to do so.
-* **Added Rx offload flag to enable or disable RSS update**
+* **Added Rx offload flag to enable or disable RSS update.**
- * Added new Rx offload flag `DEV_RX_OFFLOAD_RSS_HASH` which can be used to
- enable/disable PMDs write to `rte_mbuf::hash::rss`.
- * PMDs notify the validity of `rte_mbuf::hash:rss` to the application
- by enabling `PKT_RX_RSS_HASH ` flag in `rte_mbuf::ol_flags`.
+ * Added new Rx offload flag ``DEV_RX_OFFLOAD_RSS_HASH`` which can be used to
+ enable/disable PMDs write to ``rte_mbuf::hash::rss``.
+ * PMDs notify the validity of ``rte_mbuf::hash:rss`` to the application
+ by enabling ``PKT_RX_RSS_HASH`` flag in ``rte_mbuf::ol_flags``.
-* **Updated the enic driver.**
+* **Added Rx/Tx packet burst mode "get" API.**
- * Added support for Geneve with options offload.
- * Added flow API implementation based on VIC Flow Manager API.
+ Added two new functions ``rte_eth_rx_burst_mode_get`` and
+ ``rte_eth_tx_burst_mode_get`` that allow an application
+ to retrieve the mode information about Rx/Tx packet burst
+ such as Scalar or Vector, and Vector technology like AVX2.
* **Added Hisilicon hns3 PMD.**
Added the new ``hns3`` net driver for the inbuilt Hisilicon Network
- Subsystem 3(HNS3) network engine found in the Hisilicon Kunpeng 920 SoC.
+ Subsystem 3 (HNS3) network engine found in the Hisilicon Kunpeng 920 SoC.
See the :doc:`../nics/hns3` guide for more details on this new driver.
* **Added NXP PFE PMD.**
@@ -124,6 +135,21 @@ New Features
Added the new PFE driver for the NXP LS1012A platform. See the
:doc:`../nics/pfe` NIC driver guide for more details on this new driver.
+* **Updated Broadcom bnxt driver.**
+
+ Updated Broadcom bnxt driver with new features and improvements, including:
+
+ * Added support for hot firmware upgrade.
+ * Added support for error recovery.
+ * Added support for querying and using COS classification in hardware.
+ * Added LRO support Thor devices.
+ * Update HWRM API to version 1.10.1.6
+
+* **Updated the enic driver.**
+
+ * Added support for Geneve with options offload.
+ * Added flow API implementation based on VIC Flow Manager API.
+
* **Updated iavf PMD.**
Enable AVX2 data path for iavf PMD.
@@ -144,13 +170,6 @@ New Features
Added support for the ``RTE_ETH_DEV_CLOSE_REMOVE`` flag.
-* **Added RX/TX packet burst mode get API.**
-
- Added two new functions ``rte_eth_rx_burst_mode_get`` and
- ``rte_eth_tx_burst_mode_get`` that allow an application
- to retrieve the mode information about RX/TX packet burst
- such as Scalar or Vector, and Vector technology like AVX2.
-
* **Updated the Intel ice driver.**
Updated the Intel ice driver with new features and improvements, including:
@@ -167,11 +186,6 @@ New Features
* Added support for GTP Tx checksum offload.
* Added new device IDs to support E810_XXV devices.
-* **Added cryptodev asymmetric session-less operation.**
-
- Added session-less option to cryptodev asymmetric structure. It works the same
- way as symmetric crypto, corresponding xform is used directly by the crypto op.
-
* **Updated the Huawei hinic driver.**
Updated the Huawei hinic driver with new features and improvements, including:
@@ -193,35 +207,55 @@ New Features
* Added support for matching on packets withe Geneve tunnel header.
* Added hairpin support.
* Added ConnectX6-DX support.
+ * Flow engine selected based on RDMA Core library version.
+ DV flow engine selected if version is rdma-core-24.0 or higher.
+ Verbs flow engine selected otherwise.
* **Updated the AF_XDP PMD.**
Updated the AF_XDP PMD. The new features include:
* Enabled zero copy between application mempools and UMEM by enabling the
- XDP_UMEM_UNALIGNED_CHUNKS UMEM flag.
+ ``XDP_UMEM_UNALIGNED_CHUNKS UMEM`` flag.
+
+* **Added cryptodev asymmetric session-less operation.**
+
+ Added a session-less option to the cryptodev asymmetric structure. It works
+ the same way as symmetric crypto, and the corresponding transform is used
+ directly by the crypto operation.
* **Added Marvell NITROX symmetric crypto PMD.**
Added a symmetric crypto PMD for Marvell NITROX V security processor.
- See the :doc:`../cryptodevs/nitrox` guide for more details on this new
+ See the :doc:`../cryptodevs/nitrox` guide for more details on this new PMD.
* **Added asymmetric support to Marvell OCTEON TX crypto PMD.**
- Added support for asymmetric operations in Marvell OCTEON TX cypto PMD.
+ Added support for asymmetric operations to Marvell OCTEON TX crypto PMD.
Supports RSA and modexp operations.
-* **Added Marvell OCTEON TX2 crypto PMD**
+* **Added Marvell OCTEON TX2 crypto PMD.**
- Added a new PMD driver for h/w crypto offload block on ``OCTEON TX2`` SoC.
+ Added a new PMD driver for hardware crypto offload block on ``OCTEON TX2``
+ SoC.
See :doc:`../cryptodevs/octeontx2` for more details
* **Updated NXP crypto PMDs for PDCP support.**
- PDCP support is added to DPAA_SEC and DPAA2_SEC PMDs using rte_security APIs.
- Support is added for all sequence number sizes for control and user plane.
- Test application is updated for unit testing.
+ Added PDCP support to the DPAA_SEC and DPAA2_SEC PMDs using rte_security
+ APIs. Support has been added for all sequence number sizes for control and
+ user plane. Test and test-crypto-perf applications have been updated for
+ unit testing.
+
+* **Updated the AESNI-MB PMD.**
+
+ * Added support for intel-ipsec-mb version 0.53.
+
+* **Updated the AESNI-GCM PMD.**
+
+ * Added support for intel-ipsec-mb version 0.53.
+ * Added support for in-place chained mbufs with AES-GCM algorithm.
* **Enabled Single Pass GCM acceleration on QAT GEN3.**
@@ -233,7 +267,8 @@ New Features
* **Updated the Intel QuickAssist Technology (QAT) asymmetric crypto PMD.**
* Added support for asymmetric session-less operations.
- * Added support for RSA algorithm with pair (n, d) private key representation.
+ * Added support for RSA algorithm with pair ``(n, d)`` private key
+ representation.
* Added support for RSA algorithm with quintuple private key representation.
* **Updated the Intel QuickAssist Technology (QAT) compression PMD.**
@@ -243,19 +278,19 @@ New Features
* **Added external buffers support for dpdk-test-compress-perf tool.**
- Added a command line option to dpdk-test-compress-perf tool to allocate
- and use memory zones as external buffers instead of keeping the data directly
- in mbuf areas.
+ Added a command line option to the ``dpdk-test-compress-perf`` tool to
+ allocate and use memory zones as external buffers instead of keeping the
+ data directly in mbuf areas.
* **Updated the IPSec library.**
- * Added SA Database API to ``librte_ipsec``. A new test-sad application is also
- introduced to evaluate and perform custom functional and performance tests
- for IPsec SAD implementation.
+ * Added Security Associations (SA) Database API to ``librte_ipsec``. A new
+ test-sad application has also been introduced to evaluate and perform
+ custom functional and performance tests for an IPsec SAD implementation.
* Support fragmented packets in inline crypto processing mode with fallback
- ``lookaside-none`` session. Corresponding changes are also added in IPsec
- Security Gateway application.
+ ``lookaside-none`` session. Corresponding changes are also added in the
+ IPsec Security Gateway application.
* **Introduced FIFO for NTB PMD.**
@@ -269,20 +304,21 @@ New Features
* **Added RIB and FIB (Routing/Forwarding Information Base) libraries.**
- RIB and FIB can replace the LPM (Longest Prefix Match) library
- with better control plane (RIB) performance.
- The data plane (FIB) can be extended with new algorithms.
+ Added Routing and Forwarding Information Base (RIB/FIB) libraries. RIB and
+ FIB can replace the LPM (Longest Prefix Match) library with better control
+ plane (RIB) performance. The data plane (FIB) can be extended with new
+ algorithms.
-* **Updated testpmd.**
+* **Updated testpmd with a command for ptypes.**
* Added a console command to testpmd app, ``show port (port_id) ptypes`` which
gives ability to print port supported ptypes in different protocol layers.
* Packet type detection disabled by default for the supported PMDs.
-* **Added new example l2fwd-event application.**
+* **Added new l2fwd-event sample application.**
- Added an example application `l2fwd-event` that adds event device support to
- traditional l2fwd example. It demonstrates usage of poll and event mode IO
+ Added an example application ``l2fwd-event`` that adds event device support to
+ the traditional l2fwd example. It demonstrates usage of poll and event mode IO
mechanism under a single application.
* **Added build support for Link Time Optimization.**
@@ -290,10 +326,21 @@ New Features
LTO is an optimization technique used by the compiler to perform whole
program analysis and optimization at link time. In order to do that
compilers store their internal representation of the source code that
- the linker uses at the final stage of compilation process.
+ the linker uses at the final stage of the compilation process.
See :doc:`../prog_guide/lto` for more information:
+* **Added IOVA as VA support for KNI.**
+
+ * Added IOVA = VA support for KNI. KNI can operate in IOVA = VA mode when
+ ``iova-mode=va`` EAL option is passed to the application or when bus IOVA
+ scheme is selected as RTE_IOVA_VA. This mode only works on Linux Kernel
+ versions 4.10.0 and above.
+
+ * Due to IOVA to KVA address translations, based on the KNI use case there
+ can be a performance impact. For mitigation, forcing IOVA to PA via EAL
+ ``--iova-mode=pa`` option can be used, IOVA_DC bus iommu scheme can also
+ result in IOVA as PA.
Removed Items
@@ -308,13 +355,18 @@ Removed Items
Also, make sure to start the actual text at the margin.
=========================================================
+* Removed library-level ABI versions. These have been replaced with a single
+ project-level ABI version for non-experimental libraries and an ABI version of
+ ``0`` for experimental libraries. Review the :doc:`../contributing/abi_policy`
+ and :doc:`../contributing/abi_versioning` guides for more information.
+
* Removed duplicated set of commands for Rx offload configuration from testpmd::
port config all crc-strip|scatter|rx-cksum|rx-timestamp|
hw-vlan|hw-vlan-filter|hw-vlan-strip|hw-vlan-extend on|off
- The testpmd commands set that can be used instead
- in order to enable or disable Rx offloading on all Rx queues of a port is::
+ The testpmd command set that can be used instead in order to enable or
+ disable Rx offloading on all Rx queues of a port is::
port config <port_id> rx_offload crc_strip|scatter|
ipv4_cksum|udp_cksum|tcp_cksum|timestamp|
@@ -410,20 +462,21 @@ API Changes
If the intent is to iterate over ports, ``RTE_ETH_FOREACH_*`` macros
are better port iterators.
-* ethdev: RTE_FLOW_ITEM_TYPE_META data endianness altered to host one.
+* ethdev: ``RTE_FLOW_ITEM_TYPE_META`` data endianness altered to host one.
Due to the new dynamic metadata field in mbuf is host-endian either, there
- is the minor compatibility issue for applications in case of 32-bit values
+ is a minor compatibility issue for applications in case of 32-bit values
supported.
-* ethdev: the tx_metadata mbuf field is moved to dymanic one.
- PKT_TX_METADATA flag is replaced with PKT_TX_DYNF_METADATA.
- DEV_TX_OFFLOAD_MATCH_METADATA offload flag is removed, now metadata
+* ethdev: the tx_metadata mbuf field is moved to dynamic one.
+ ``PKT_TX_METADATA`` flag is replaced with ``PKT_TX_DYNF_METADATA``.
+ ``DEV_TX_OFFLOAD_MATCH_METADATA`` offload flag is removed, now metadata
support in PMD is engaged on dynamic field registration.
* event: The function ``rte_event_eth_tx_adapter_enqueue`` takes an additional
input as ``flags``. Flag ``RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST`` which
has been introduced in this release is used when used when all the packets
- enqueued in the tx adapter are destined for the same Ethernet port & Tx queue.
+ enqueued in the Tx adapter are destined for the same Ethernet port ans Tx
+ queue.
* sched: The pipe nodes configuration parameters such as number of pipes,
pipe queue sizes, pipe profiles, etc., are moved from port level structure
@@ -446,15 +499,21 @@ ABI Changes
Also, make sure to start the actual text at the margin.
=========================================================
+* policy: Please note the revisions to the :doc:`../contributing/abi_policy`
+ introducing major ABI versions, with DPDK 19.11 becoming the first major
+ version ``v20``. ABI changes to add new features continue to be permitted in
+ subsequent releases, with the condition that ABI compatibility with the major
+ ABI version is maintained.
+
* net: The Ethernet address and other header definitions have changed
attributes. They have been modified to be aligned on 2-byte boundaries.
These changes should not impact normal usage because drivers naturally
align the Ethernet header on receive and all known encapsulations
preserve the alignment of the header.
-* security: The field ``replay_win_sz`` has been moved from ipsec library
+* security: The field ``replay_win_sz`` has been moved from the ipsec library
based ``rte_ipsec_sa_prm`` structure to security library based structure
- ``rte_security_ipsec_xform``, which specify the Anti replay window size
+ ``rte_security_ipsec_xform``, which specify the anti-replay window size
to enable sequence replay attack handling.
* ipsec: The field ``replay_win_sz`` has been removed from the structure
@@ -583,3 +642,279 @@ Tested Platforms
Also, make sure to start the actual text at the margin.
=========================================================
+* Intel\ |reg| platforms with Intel\ |reg| NICs combinations
+
+ * CPU
+
+ * Intel\ |reg| Atom\ |trade| CPU C3758 @ 2.20GHz
+ * Intel\ |reg| Atom\ |trade| CPU C3858 @ 2.00GHz
+ * Intel\ |reg| Atom\ |trade| CPU C3958 @ 2.00GHz
+ * Intel\ |reg| Xeon\ |reg| CPU D-1541 @ 2.10GHz
+ * Intel\ |reg| Xeon\ |reg| CPU D-1553N @ 2.30GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2680 0 @ 2.70GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2699 v3 @ 2.30GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2699 v4 @ 2.20GHz
+ * Intel\ |reg| Xeon\ |reg| Gold 6139 CPU @ 2.30GHz
+ * Intel\ |reg| Xeon\ |reg| Gold 6252N CPU @ 2.30GHz
+ * Intel\ |reg| Xeon\ |reg| Platinum 8180 CPU @ 2.50GHz
+ * Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
+
+ * OS:
+
+ * CentOS 7.6
+ * Fedora 30
+ * FreeBSD 12.0
+ * Red Hat Enterprise Linux Server release 8.0
+ * Red Hat Enterprise Linux Server release 7.6
+ * Suse12SP3
+ * Ubuntu 14.04
+ * Ubuntu 16.04
+ * Ubuntu 16.10
+ * Ubuntu 18.04
+ * Ubuntu 19.04
+
+ * NICs:
+
+ * Intel\ |reg| Corporation Ethernet Controller E810-C for SFP (2x25G)
+
+ * Firmware version: 1.02 0x80002084 1.2538.0/1.02 0x80002082 1.2538.0
+ * Device id (pf): 8086:1593
+ * Driver version: 0.12.25 (ice)
+
+ * Intel\ |reg| Corporation Ethernet Controller E810-C for SFP (2x100G)
+
+ * Firmware version: 1.02 0x80002081 1.2538.0
+ * Device id (pf): 8086:1592
+ * Driver version: 0.12.25 (ice)
+
+ * Intel\ |reg| 82599ES 10 Gigabit Ethernet Controller
+
+ * Firmware version: 0x61bf0001
+ * Device id (pf/vf): 8086:10fb / 8086:10ed
+ * Driver version: 5.6.1 (ixgbe)
+
+ * Intel\ |reg| Corporation Ethernet Connection X552/X557-AT 10GBASE-T
+
+ * Firmware version: 0x800003e7
+ * Device id (pf/vf): 8086:15ad / 8086:15a8
+ * Driver version: 5.1.0 (ixgbe)
+
+ * Intel\ |reg| Corporation Ethernet Controller 10G X550T
+
+ * Firmware version: 0x80000482
+ * Device id (pf): 8086:1563
+ * Driver version: 5.6.1 (ixgbe)
+
+ * Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)
+
+ * Firmware version: 7.00 0x80004cdb
+ * Device id (pf/vf): 8086:1572 / 8086:154c
+ * Driver version: 2.9.21 (i40e)
+
+ * Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (4x10G)
+
+ * Firmware version: 4.10 0x80001a3c
+ * Device id (pf/vf): 8086:37d0 / 8086:37cd
+ * Driver version: 2.9.21 (i40e)
+
+ * Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)
+
+ * Firmware version: 7.00 0x80004cf8
+ * Device id (pf/vf): 8086:158b / 8086:154c
+ * Driver version: 2.9.21 (i40e)
+
+ * Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)
+
+ * Firmware version: 7.00 0x80004c97
+ * Device id (pf/vf): 8086:1583 / 8086:154c
+ * Driver version: 2.9.21 (i40e)
+
+ * Intel\ |reg| Corporation I350 Gigabit Network Connection
+
+ * Firmware version: 1.63, 0x80000cbc
+ * Device id (pf/vf): 8086:1521 / 8086:1520
+ * Driver version: 5.4.0-k (igb)
+
+ * Intel\ |reg| Corporation I210 Gigabit Network Connection
+
+ * Firmware version: 3.25, 0x800006eb
+ * Device id (pf): 8086:1533
+ * Driver version: 5.4.0-k(igb)
+
+* ARMv8 SoC combinations from Marvell (with integrated NICs)
+
+ * SoC:
+
+ * CN83xx, CN96xx, CN93xx
+
+ * OS (Based on Marvell OCTEON TX SDK-10.1.2.0):
+
+ * Arch Linux
+ * Buildroot 2018.11
+ * Ubuntu 16.04.1 LTS
+ * Ubuntu 16.10
+ * Ubuntu 18.04.1
+ * Ubuntu 19.04
+
+* Intel\ |reg| platforms with Mellanox\ |reg| NICs combinations
+
+ * CPU:
+
+ * Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
+ * Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz
+
+ * OS:
+
+ * Red Hat Enterprise Linux Server release 8.0 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.7 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.6 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.5 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.4 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.3 (Maipo)
+ * Red Hat Enterprise Linux Server release 7.2 (Maipo)
+ * Ubuntu 19.04
+ * Ubuntu 18.10
+ * Ubuntu 18.04
+ * Ubuntu 16.04
+ * SUSE Linux Enterprise Server 15
+
+ * OFED:
+
+ * MLNX_OFED 4.6-1.0.1.1
+ * MLNX_OFED 4.7-1.0.0.1
+ * MLNX_OFED 4.7-3.1.9.0 and above
+
+ * upstream kernel:
+
+ * Linux 5.3 and above
+
+ * rdma-core:
+
+ * rdma-core-24.1-1 and above
+
+ * NICs:
+
+ * Mellanox\ |reg| ConnectX\ |reg|-3 Pro 40G MCX354A-FCC_Ax (2x40G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1007
+ * Firmware version: 2.42.5000
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 10G MCX4111A-XCAT (1x10G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 10G MCX4121A-XCAT (2x10G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 25G MCX4111A-ACAT (1x25G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 25G MCX4121A-ACAT (2x25G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 40G MCX4131A-BCAT/MCX413A-BCAT (1x40G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 40G MCX415A-BCAT (1x40G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 50G MCX4131A-GCAT/MCX413A-GCAT (1x50G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 50G MCX414A-BCAT (2x50G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 50G MCX415A-GCAT/MCX416A-BCAT/MCX416A-GCAT (2x50G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 50G MCX415A-CCAT (1x100G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 100G MCX416A-CCAT (2x100G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1013
+ * Firmware version: 12.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 Lx 10G MCX4121A-XCAT (2x10G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1015
+ * Firmware version: 14.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-4 Lx 25G MCX4121A-ACAT (2x25G)
+
+ * Host interface: PCI Express 3.0 x8
+ * Device ID: 15b3:1015
+ * Firmware version: 14.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-5 100G MCX556A-ECAT (2x100G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1017
+ * Firmware version: 16.26.2032 and above
+
+ * Mellanox\ |reg| ConnectX\ |reg|-5 Ex EN 100G MCX516A-CDAT (2x100G)
+
+ * Host interface: PCI Express 4.0 x16
+ * Device ID: 15b3:1019
+ * Firmware version: 16.26.2032 and above
+
+* IBM Power 9 platforms with Mellanox\ |reg| NICs combinations
+
+ * CPU:
+
+ * POWER9 2.2 (pvr 004e 1202) 2300MHz
+
+ * OS:
+
+ * Ubuntu 18.04.1 LTS (Bionic Beaver)
+
+ * NICs:
+
+ * Mellanox\ |reg| ConnectX\ |reg|-5 100G MCX556A-ECAT (2x100G)
+
+ * Host interface: PCI Express 3.0 x16
+ * Device ID: 15b3:1017
+ * Firmware version: 16.26.1040
+
+ * OFED:
+
+ * MLNX_OFED 4.7-1.0.0.2
diff --git a/doc/guides/rel_notes/release_20_02.rst b/doc/guides/rel_notes/release_20_02.rst
new file mode 100644
index 0000000..0eaa45a
--- /dev/null
+++ b/doc/guides/rel_notes/release_20_02.rst
@@ -0,0 +1,139 @@
+.. SPDX-License-Identifier: BSD-3-Clause
+ Copyright 2019 The DPDK contributors
+
+.. include:: <isonum.txt>
+
+DPDK Release 20.02
+==================
+
+.. **Read this first.**
+
+ The text in the sections below explains how to update the release notes.
+
+ Use proper spelling, capitalization and punctuation in all sections.
+
+ Variable and config names should be quoted as fixed width text:
+ ``LIKE_THIS``.
+
+ Build the docs and view the output file to ensure the changes are correct::
+
+ make doc-guides-html
+
+ xdg-open build/doc/html/guides/rel_notes/release_20_02.html
+
+
+New Features
+------------
+
+.. This section should contain new features added in this release.
+ Sample format:
+
+ * **Add a title in the past tense with a full stop.**
+
+ Add a short 1-2 sentence description in the past tense.
+ The description should be enough to allow someone scanning
+ the release notes to understand the new feature.
+
+ If the feature adds a lot of sub-features you can use a bullet list
+ like this:
+
+ * Added feature foo to do something.
+ * Enhanced feature bar to do something else.
+
+ Refer to the previous release notes for examples.
+
+ Suggested order in release notes items:
+ * Core libs (EAL, mempool, ring, mbuf, buses)
+ * Device abstraction libs and PMDs
+ - ethdev (lib, PMDs)
+ - cryptodev (lib, PMDs)
+ - eventdev (lib, PMDs)
+ - etc
+ * Other libs
+ * Apps, Examples, Tools (if significant)
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
+
+
+Removed Items
+-------------
+
+.. This section should contain removed items in this release. Sample format:
+
+ * Add a short 1-2 sentence description of the removed item
+ in the past tense.
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
+
+
+API Changes
+-----------
+
+.. This section should contain API changes. Sample format:
+
+ * sample: Add a short 1-2 sentence description of the API change
+ which was announced in the previous releases and made in this release.
+ Start with a scope label like "ethdev:".
+ Use fixed width quotes for ``function_names`` or ``struct_names``.
+ Use the past tense.
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
+
+
+ABI Changes
+-----------
+
+.. This section should contain ABI changes. Sample format:
+
+ * sample: Add a short 1-2 sentence description of the ABI change
+ which was announced in the previous releases and made in this release.
+ Start with a scope label like "ethdev:".
+ Use fixed width quotes for ``function_names`` or ``struct_names``.
+ Use the past tense.
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
+
+* No change, kept ABI v20. DPDK 20.02 is compatible with DPDK 19.11.
+
+
+Known Issues
+------------
+
+.. This section should contain new known issues in this release. Sample format:
+
+ * **Add title in present tense with full stop.**
+
+ Add a short 1-2 sentence description of the known issue
+ in the present tense. Add information on any known workarounds.
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
+
+
+Tested Platforms
+----------------
+
+.. This section should contain a list of platforms that were tested
+ with this release.
+
+ The format is:
+
+ * <vendor> platform with <vendor> <type of devices> combinations
+
+ * List of CPU
+ * List of OS
+ * List of devices
+ * Other relevant details...
+
+ This section is a comment. Do not overwrite or remove it.
+ Also, make sure to start the actual text at the margin.
+ =========================================================
diff --git a/doc/guides/sample_app_ug/flow_filtering.rst b/doc/guides/sample_app_ug/flow_filtering.rst
index de3e4ab..5e5a6cd 100644
--- a/doc/guides/sample_app_ug/flow_filtering.rst
+++ b/doc/guides/sample_app_ug/flow_filtering.rst
@@ -513,4 +513,3 @@ The last part of the function is to validate the rule and create it.
int res = rte_flow_validate(port_id, &attr, pattern, action, &error);
if (!res)
flow = rte_flow_create(port_id, &attr, pattern, action, &error);
-
diff --git a/doc/guides/sample_app_ug/ip_pipeline.rst b/doc/guides/sample_app_ug/ip_pipeline.rst
index 4da0fcf..56014be 100644
--- a/doc/guides/sample_app_ug/ip_pipeline.rst
+++ b/doc/guides/sample_app_ug/ip_pipeline.rst
@@ -249,27 +249,35 @@ Traffic manager
tmgr subport profile
<tb_rate> <tb_size>
- <tc0_rate> <tc1_rate> <tc2_rate> <tc3_rate>
+ <tc0_rate> <tc1_rate> <tc2_rate> <tc3_rate> <tc4_rate>
+ <tc5_rate> <tc6_rate> <tc7_rate> <tc8_rate>
+ <tc9_rate> <tc10_rate> <tc11_rate> <tc12_rate>
<tc_period>
-
+ pps <n_pipes_per_subport>
+ qsize <qsize_tc0> <qsize_tc1> <qsize_tc2>
+ <qsize_tc3> <qsize_tc4> <qsize_tc5> <qsize_tc6>
+ <qsize_tc7> <qsize_tc8> <qsize_tc9> <qsize_tc10>
+ <qsize_tc11> <qsize_tc12>
Add traffic manager pipe profile ::
tmgr pipe profile
<tb_rate> <tb_size>
- <tc0_rate> <tc1_rate> <tc2_rate> <tc3_rate>
+ <tc0_rate> <tc1_rate> <tc2_rate> <tc3_rate> <tc4_rate>
+ <tc5_rate> <tc6_rate> <tc7_rate> <tc8_rate>
+ <tc9_rate> <tc10_rate> <tc11_rate> <tc12_rate>
<tc_period>
- <tc_ov_weight> <wrr_weight0..15>
+ <tc_ov_weight>
+ <wrr_weight0..3>
Create traffic manager port ::
tmgr <tmgr_name>
rate <rate>
spp <n_subports_per_port>
- pps <n_pipes_per_subport>
- qsize <qsize_tc0>
- <qsize_tc1> <qsize_tc2> <qsize_tc3>
- fo <frame_overhead> mtu <mtu> cpu <cpu_id>
+ fo <frame_overhead>
+ mtu <mtu>
+ cpu <cpu_id>
Configure traffic manager subport ::
diff --git a/doc/guides/sample_app_ug/l2_forward_event.rst b/doc/guides/sample_app_ug/l2_forward_event.rst
index 52a570b..8c519c3 100644
--- a/doc/guides/sample_app_ug/l2_forward_event.rst
+++ b/doc/guides/sample_app_ug/l2_forward_event.rst
@@ -103,7 +103,7 @@ scheduler. Following is the sample command:
.. code-block:: console
- ./build/l2fwd-event -l 0-7 -s 0-3 -n 4 ---vdev event_sw0 --q 8 -p ffff --mode=eventdev --eventq-sched=ordered
+ ./build/l2fwd-event -l 0-7 -s 0-3 -n 4 --vdev event_sw0 -- -q 8 -p ffff --mode=eventdev --eventq-sched=ordered
Explanation
-----------
diff --git a/doc/guides/sample_app_ug/qos_scheduler.rst b/doc/guides/sample_app_ug/qos_scheduler.rst
index cdd29d9..b501065 100644
--- a/doc/guides/sample_app_ug/qos_scheduler.rst
+++ b/doc/guides/sample_app_ug/qos_scheduler.rst
@@ -22,7 +22,7 @@ There are two flavors of the runtime execution for this application,
with two or three threads per each packet flow configuration being used.
The RX thread reads packets from the RX port,
classifies the packets based on the double VLAN (outer and inner) and
-the lower two bytes of the IP destination address and puts them into the ring queue.
+the lower byte of the IP destination address and puts them into the ring queue.
The worker thread dequeues the packets from the ring and calls the QoS scheduler enqueue/dequeue functions.
If a separate TX core is used, these are sent to the TX ring.
Otherwise, they are sent directly to the TX port.
@@ -129,18 +129,28 @@ The profile file has the following format:
frame overhead = 24
number of subports per port = 1
- number of pipes per subport = 4096
- queue sizes = 64 64 64 64
; Subport configuration
[subport 0]
+ number of pipes per subport = 4096
+ queue sizes = 64 64 64 64 64 64 64 64 64 64 64 64 64
tb rate = 1250000000; Bytes per second
tb size = 1000000; Bytes
tc 0 rate = 1250000000; Bytes per second
tc 1 rate = 1250000000; Bytes per second
tc 2 rate = 1250000000; Bytes per second
tc 3 rate = 1250000000; Bytes per second
+ tc 4 rate = 1250000000; Bytes per second
+ tc 5 rate = 1250000000; Bytes per second
+ tc 6 rate = 1250000000; Bytes per second
+ tc 7 rate = 1250000000; Bytes per second
+ tc 8 rate = 1250000000; Bytes per second
+ tc 9 rate = 1250000000; Bytes per second
+ tc 10 rate = 1250000000; Bytes per second
+ tc 11 rate = 1250000000; Bytes per second
+ tc 12 rate = 1250000000; Bytes per second
+
tc period = 10; Milliseconds
tc oversubscription period = 10; Milliseconds
@@ -156,17 +166,32 @@ The profile file has the following format:
tc 1 rate = 305175; Bytes per second
tc 2 rate = 305175; Bytes per second
tc 3 rate = 305175; Bytes per second
+ tc 4 rate = 305175; Bytes per second
+ tc 5 rate = 305175; Bytes per second
+ tc 6 rate = 305175; Bytes per second
+ tc 7 rate = 305175; Bytes per second
+ tc 8 rate = 305175; Bytes per second
+ tc 9 rate = 305175; Bytes per second
+ tc 10 rate = 305175; Bytes per second
+ tc 11 rate = 305175; Bytes per second
+ tc 12 rate = 305175; Bytes per second
tc period = 40; Milliseconds
tc 0 oversubscription weight = 1
tc 1 oversubscription weight = 1
tc 2 oversubscription weight = 1
tc 3 oversubscription weight = 1
-
- tc 0 wrr weights = 1 1 1 1
- tc 1 wrr weights = 1 1 1 1
- tc 2 wrr weights = 1 1 1 1
- tc 3 wrr weights = 1 1 1 1
+ tc 4 oversubscription weight = 1
+ tc 5 oversubscription weight = 1
+ tc 6 oversubscription weight = 1
+ tc 7 oversubscription weight = 1
+ tc 8 oversubscription weight = 1
+ tc 9 oversubscription weight = 1
+ tc 10 oversubscription weight = 1
+ tc 11 oversubscription weight = 1
+ tc 12 oversubscription weight = 1
+
+ tc 12 wrr weights = 1 1 1 1
; RED params per traffic class and color (Green / Yellow / Red)
@@ -191,6 +216,51 @@ The profile file has the following format:
tc 3 wred inv prob = 10 10 10
tc 3 wred weight = 9 9 9
+ tc 4 wred min = 48 40 32
+ tc 4 wred max = 64 64 64
+ tc 4 wred inv prob = 10 10 10
+ tc 4 wred weight = 9 9 9
+
+ tc 5 wred min = 48 40 32
+ tc 5 wred max = 64 64 64
+ tc 5 wred inv prob = 10 10 10
+ tc 5 wred weight = 9 9 9
+
+ tc 6 wred min = 48 40 32
+ tc 6 wred max = 64 64 64
+ tc 6 wred inv prob = 10 10 10
+ tc 6 wred weight = 9 9 9
+
+ tc 7 wred min = 48 40 32
+ tc 7 wred max = 64 64 64
+ tc 7 wred inv prob = 10 10 10
+ tc 7 wred weight = 9 9 9
+
+ tc 8 wred min = 48 40 32
+ tc 8 wred max = 64 64 64
+ tc 8 wred inv prob = 10 10 10
+ tc 8 wred weight = 9 9 9
+
+ tc 9 wred min = 48 40 32
+ tc 9 wred max = 64 64 64
+ tc 9 wred inv prob = 10 10 10
+ tc 9 wred weight = 9 9 9
+
+ tc 10 wred min = 48 40 32
+ tc 10 wred max = 64 64 64
+ tc 10 wred inv prob = 10 10 10
+ tc 10 wred weight = 9 9 9
+
+ tc 11 wred min = 48 40 32
+ tc 11 wred max = 64 64 64
+ tc 11 wred inv prob = 10 10 10
+ tc 11 wred weight = 9 9 9
+
+ tc 12 wred min = 48 40 32
+ tc 12 wred max = 64 64 64
+ tc 12 wred inv prob = 10 10 10
+ tc 12 wred weight = 9 9 9
+
Interactive mode
~~~~~~~~~~~~~~~~
@@ -295,11 +365,11 @@ This application classifies based on the QinQ double VLAN tags and the IP destin
| Pipe | Config (4k) | Traffic shaped (token bucket) | Inner VLAN tag |
| | | | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
- | Traffic Class | 4 | TCs of the same pipe services in strict priority | Destination IP address (0.0.X.0) |
+ | Traffic Class | 13 | TCs of the same pipe services in strict priority | Destination IP address (0.0.0.X) |
| | | | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
- | Queue | 4 | Queue of the same TC serviced in WRR | Destination IP address (0.0.0.X) |
- | | | | |
+ | Queue | High Priority TC: 1, | Queue of lowest priority traffic | Destination IP address (0.0.0.X) |
+ | | Lowest Priority TC: 4 | class (Best effort) serviced in WRR | |
+----------------+-------------------------+--------------------------------------------------+----------------------------------+
Please refer to the "QoS Scheduler" chapter in the *DPDK Programmer's Guide* for more information about these parameters.
diff --git a/doc/guides/sample_app_ug/vm_power_management.rst b/doc/guides/sample_app_ug/vm_power_management.rst
index 0ffff83..bb2aa4f 100644
--- a/doc/guides/sample_app_ug/vm_power_management.rst
+++ b/doc/guides/sample_app_ug/vm_power_management.rst
@@ -309,6 +309,12 @@ A number of commands can be issued via the CLI in relation to VMs:
set_pcpu {vm_name} {vcpu} {pcpu}
+ Enable query of physical core information from a VM:
+
+ .. code-block:: console
+
+ set_query {vm_name} enable|disable
+
Manual control and inspection can also be carried in relation CPU frequency scaling:
Get the current frequency for each core specified in the mask:
@@ -746,6 +752,22 @@ Where {core_num} is the lcore and channel to change frequency by scaling up/down
set_cpu_freq {core_num} up|down|min|max
+To query the available frequences of an lcore, use the query_cpu_freq command.
+Where {core_num} is the lcore to query.
+Before using this command, please enable responses via the set_query command on the host.
+
+.. code-block:: console
+
+ query_cpu_freq {core_num}|all
+
+To query the capabilities of an lcore, use the query_cpu_caps command.
+Where {core_num} is the lcore to query.
+Before using this command, please enable responses via the set_query command on the host.
+
+.. code-block:: console
+
+ query_cpu_caps {core_num}|all
+
To start the application and configure the power policy, and send it to the host:
.. code-block:: console
@@ -761,4 +783,3 @@ will send the policy to the host:
Once the policy is sent to the host, the host application takes over the power monitoring
of the specified cores in the policy.
-
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 73ef0b4..10aabf5 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -487,6 +487,21 @@ set packet types classification for a specific port::
testpmd> set port (port_id) ptypes_mask (mask)
+show port mac addresses info
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Show mac addresses added for a specific port::
+
+ testpmd> show port (port_id) macs
+
+
+show port multicast mac addresses info
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Show multicast mac addresses added for a specific port::
+
+ testpmd> show port (port_id) mcast_macs
+
show device info
~~~~~~~~~~~~~~~~
diff --git a/doc/guides/tools/cryptoperf.rst b/doc/guides/tools/cryptoperf.rst
index 2fc6544..a19ccb2 100644
--- a/doc/guides/tools/cryptoperf.rst
+++ b/doc/guides/tools/cryptoperf.rst
@@ -192,6 +192,7 @@ The following are the application command-line options:
cipher-then-auth
auth-then-cipher
aead
+ pdcp
For GCM/CCM algorithms you should use aead flag.
@@ -332,6 +333,15 @@ The following are the application command-line options:
Enable test result output CSV friendly rather than human friendly.
+* ``--pdcp-sn-sz <n>``
+
+ Set PDCP sequence number size(n) in bits. Valid values of n will
+ be 5/7/12/15/18.
+
+* ``--pdcp-domain <control/user>``
+
+ Set PDCP domain to specify Control/user plane.
+
Test Vector File
~~~~~~~~~~~~~~~~
diff --git a/drivers/baseband/fpga_lte_fec/Makefile b/drivers/baseband/fpga_lte_fec/Makefile
index 2369bd2..b4a442c 100644
--- a/drivers/baseband/fpga_lte_fec/Makefile
+++ b/drivers/baseband/fpga_lte_fec/Makefile
@@ -17,9 +17,6 @@ LDLIBS += -lrte_pci -lrte_bus_pci
# versioning export map
EXPORT_MAP := rte_pmd_bbdev_fpga_lte_fec_version.map
-# library version
-LIBABIVER := 1
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_FPGA_LTE_FEC) += fpga_lte_fec.c
diff --git a/drivers/baseband/fpga_lte_fec/rte_pmd_bbdev_fpga_lte_fec_version.map b/drivers/baseband/fpga_lte_fec/rte_pmd_bbdev_fpga_lte_fec_version.map
index f64b0f9..6bcea2c 100644
--- a/drivers/baseband/fpga_lte_fec/rte_pmd_bbdev_fpga_lte_fec_version.map
+++ b/drivers/baseband/fpga_lte_fec/rte_pmd_bbdev_fpga_lte_fec_version.map
@@ -1,10 +1,10 @@
-DPDK_19.08 {
- local: *;
+DPDK_20.0 {
+ local: *;
};
EXPERIMENTAL {
- global:
+ global:
- fpga_lte_fec_configure;
+ fpga_lte_fec_configure;
};
diff --git a/drivers/baseband/null/Makefile b/drivers/baseband/null/Makefile
index f885a97..28751ee 100644
--- a/drivers/baseband/null/Makefile
+++ b/drivers/baseband/null/Makefile
@@ -16,9 +16,6 @@ LDLIBS += -lrte_bus_vdev
# versioning export map
EXPORT_MAP := rte_pmd_bbdev_null_version.map
-# library version
-LIBABIVER := 1
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL) += bbdev_null.c
diff --git a/drivers/baseband/null/rte_pmd_bbdev_null_version.map b/drivers/baseband/null/rte_pmd_bbdev_null_version.map
index 58b9427..f9f17e4 100644
--- a/drivers/baseband/null/rte_pmd_bbdev_null_version.map
+++ b/drivers/baseband/null/rte_pmd_bbdev_null_version.map
@@ -1,3 +1,3 @@
-DPDK_18.02 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/baseband/turbo_sw/Makefile b/drivers/baseband/turbo_sw/Makefile
index 4aa05d2..ec74d27 100644
--- a/drivers/baseband/turbo_sw/Makefile
+++ b/drivers/baseband/turbo_sw/Makefile
@@ -47,9 +47,6 @@ LDLIBS += -L$(FLEXRAN_SDK)/lib_LDPC_ratematch_5gnr -lLDPC_ratematch_5gnr
LDLIBS += -L$(FLEXRAN_SDK)/lib_rate_dematching_5gnr -lrate_dematching_5gnr
endif
-# library version
-LIBABIVER := 1
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += bbdev_turbo_software.c
diff --git a/drivers/baseband/turbo_sw/rte_pmd_bbdev_turbo_sw_version.map b/drivers/baseband/turbo_sw/rte_pmd_bbdev_turbo_sw_version.map
index 58b9427..f9f17e4 100644
--- a/drivers/baseband/turbo_sw/rte_pmd_bbdev_turbo_sw_version.map
+++ b/drivers/baseband/turbo_sw/rte_pmd_bbdev_turbo_sw_version.map
@@ -1,3 +1,3 @@
-DPDK_18.02 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/bus/dpaa/Makefile b/drivers/bus/dpaa/Makefile
index 454ac12..cd1093f 100644
--- a/drivers/bus/dpaa/Makefile
+++ b/drivers/bus/dpaa/Makefile
@@ -23,8 +23,6 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
# versioning export map
EXPORT_MAP := rte_bus_dpaa_version.map
-LIBABIVER := 2
-
# all source are stored in SRCS-y
#
SRCS-$(CONFIG_RTE_LIBRTE_DPAA_BUS) += \
diff --git a/drivers/bus/dpaa/base/fman/fman.c b/drivers/bus/dpaa/base/fman/fman.c
index 462efd2..6d77a7e 100644
--- a/drivers/bus/dpaa/base/fman/fman.c
+++ b/drivers/bus/dpaa/base/fman/fman.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2010-2016 Freescale Semiconductor Inc.
- * Copyright 2017 NXP
+ * Copyright 2017-2019 NXP
*
*/
diff --git a/drivers/bus/dpaa/base/fman/netcfg_layer.c b/drivers/bus/dpaa/base/fman/netcfg_layer.c
index 6affd2e..36eca88 100644
--- a/drivers/bus/dpaa/base/fman/netcfg_layer.c
+++ b/drivers/bus/dpaa/base/fman/netcfg_layer.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2010-2016 Freescale Semiconductor Inc.
- * Copyright 2017 NXP
+ * Copyright 2017-2019 NXP
*
*/
#include <inttypes.h>
diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build
index 0e561c2..2b1cf19 100644
--- a/drivers/bus/dpaa/meson.build
+++ b/drivers/bus/dpaa/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map
index cf428a5..e6ca436 100644
--- a/drivers/bus/dpaa/rte_bus_dpaa_version.map
+++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_17.11 {
+DPDK_20.0 {
global:
bman_acquire;
@@ -7,123 +7,90 @@ DPDK_17.11 {
bman_new_pool;
bman_query_free_buffers;
bman_release;
+ bman_thread_irq;
+ dpaa_logtype_eventdev;
dpaa_logtype_mempool;
dpaa_logtype_pmd;
dpaa_netcfg;
+ dpaa_svr_family;
fman_ccsr_map_fd;
fman_dealloc_bufs_mask_hi;
fman_dealloc_bufs_mask_lo;
fman_if_add_mac_addr;
fman_if_clear_mac_addr;
fman_if_disable_rx;
- fman_if_enable_rx;
fman_if_discard_rx_errors;
- fman_if_get_fc_threshold;
+ fman_if_enable_rx;
fman_if_get_fc_quanta;
+ fman_if_get_fc_threshold;
fman_if_get_fdoff;
+ fman_if_get_sg_enable;
fman_if_loopback_disable;
fman_if_loopback_enable;
fman_if_promiscuous_disable;
fman_if_promiscuous_enable;
fman_if_reset_mcast_filter_table;
fman_if_set_bp;
- fman_if_set_fc_threshold;
fman_if_set_fc_quanta;
+ fman_if_set_fc_threshold;
fman_if_set_fdoff;
fman_if_set_ic_params;
fman_if_set_maxfrm;
fman_if_set_mcast_filter_table;
+ fman_if_set_sg;
fman_if_stats_get;
fman_if_stats_get_all;
fman_if_stats_reset;
fman_ip_rev;
+ fsl_qman_fq_portal_create;
netcfg_acquire;
netcfg_release;
- qm_channel_caam;
- qman_create_fq;
- qman_dequeue;
- qman_dqrr_consume;
- qman_enqueue;
- qman_enqueue_multi;
- qman_fq_fqid;
- qman_fq_state;
- qman_init_fq;
- qman_poll_dqrr;
- qman_query_fq_np;
- qman_set_vdq;
- qman_reserve_fqid_range;
- qman_volatile_dequeue;
- rte_dpaa_driver_register;
- rte_dpaa_driver_unregister;
- rte_dpaa_mem_ptov;
- rte_dpaa_portal_init;
-
- local: *;
-};
-
-DPDK_18.02 {
- global:
-
- dpaa_logtype_eventdev;
- dpaa_svr_family;
per_lcore_dpaa_io;
per_lcore_held_bufs;
+ qm_channel_caam;
qm_channel_pool1;
qman_alloc_cgrid_range;
qman_alloc_pool_range;
+ qman_clear_irq;
qman_create_cgr;
+ qman_create_fq;
qman_dca_index;
qman_delete_cgr;
+ qman_dequeue;
+ qman_dqrr_consume;
+ qman_enqueue;
+ qman_enqueue_multi;
qman_enqueue_multi_fq;
+ qman_fq_fqid;
+ qman_fq_portal_irqsource_add;
+ qman_fq_portal_irqsource_remove;
+ qman_fq_portal_thread_irq;
+ qman_fq_state;
+ qman_init_fq;
+ qman_irqsource_add;
+ qman_irqsource_remove;
qman_modify_cgr;
qman_oos_fq;
+ qman_poll_dqrr;
qman_portal_dequeue;
qman_portal_poll_rx;
qman_query_fq_frm_cnt;
+ qman_query_fq_np;
qman_release_cgrid_range;
+ qman_reserve_fqid_range;
qman_retire_fq;
+ qman_set_fq_lookup_table;
+ qman_set_vdq;
qman_static_dequeue_add;
- rte_dpaa_portal_fq_close;
- rte_dpaa_portal_fq_init;
-
-} DPDK_17.11;
-
-DPDK_18.08 {
- global:
-
- fman_if_get_sg_enable;
- fman_if_set_sg;
-
-} DPDK_18.02;
-
-DPDK_18.11 {
- global:
-
- bman_thread_irq;
- fman_if_get_sg_enable;
- fman_if_set_sg;
- qman_clear_irq;
-
- qman_irqsource_add;
- qman_irqsource_remove;
qman_thread_fd;
qman_thread_irq;
+ qman_volatile_dequeue;
+ rte_dpaa_driver_register;
+ rte_dpaa_driver_unregister;
+ rte_dpaa_mem_ptov;
+ rte_dpaa_portal_fq_close;
+ rte_dpaa_portal_fq_init;
+ rte_dpaa_portal_init;
-} DPDK_18.08;
-
-DPDK_19.05 {
- global:
-
- qman_set_fq_lookup_table;
-
-} DPDK_18.11;
-
-DPDK_19.11 {
- global:
-
- fsl_qman_fq_portal_create;
- qman_fq_portal_irqsource_add;
- qman_fq_portal_irqsource_remove;
- qman_fq_portal_thread_irq;
-
-} DPDK_19.05;
+ local: *;
+};
diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h
index c2b2375..9bf2cd9 100644
--- a/drivers/bus/dpaa/rte_dpaa_bus.h
+++ b/drivers/bus/dpaa/rte_dpaa_bus.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright 2017 NXP
+ * Copyright 2017-2019 NXP
*
*/
#ifndef __RTE_DPAA_BUS_H__
diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile
index 16f0a2c..6d22860 100644
--- a/drivers/bus/fslmc/Makefile
+++ b/drivers/bus/fslmc/Makefile
@@ -25,9 +25,6 @@ LDLIBS += -lrte_common_dpaax
# versioning export map
EXPORT_MAP := rte_bus_fslmc_version.map
-# library version
-LIBABIVER := 2
-
SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += \
qbman/qbman_portal.c \
qbman/qbman_debug.c
diff --git a/drivers/bus/fslmc/mc/dpci.c b/drivers/bus/fslmc/mc/dpci.c
index 2874a61..7e31327 100644
--- a/drivers/bus/fslmc/mc/dpci.c
+++ b/drivers/bus/fslmc/mc/dpci.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2017-2019 NXP
*
*/
#include <fsl_mc_sys.h>
diff --git a/drivers/bus/fslmc/mc/dpcon.c b/drivers/bus/fslmc/mc/dpcon.c
index 3f6e04b..2c46638 100644
--- a/drivers/bus/fslmc/mc/dpcon.c
+++ b/drivers/bus/fslmc/mc/dpcon.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2017-2019 NXP
*
*/
#include <fsl_mc_sys.h>
diff --git a/drivers/bus/fslmc/mc/fsl_dpci.h b/drivers/bus/fslmc/mc/fsl_dpci.h
index cf3d152..a0ee5bf 100644
--- a/drivers/bus/fslmc/mc/fsl_dpci.h
+++ b/drivers/bus/fslmc/mc/fsl_dpci.h
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2017-2019 NXP
*
*/
#ifndef __FSL_DPCI_H
diff --git a/drivers/bus/fslmc/mc/fsl_dpcon.h b/drivers/bus/fslmc/mc/fsl_dpcon.h
index 36dd5f3..af81d51 100644
--- a/drivers/bus/fslmc/mc/fsl_dpcon.h
+++ b/drivers/bus/fslmc/mc/fsl_dpcon.h
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2017-2019 NXP
*
*/
#ifndef __FSL_DPCON_H
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index faebc43..6e709a8 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
index 8efb24a..3ca3ae4 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016-2018 NXP
+ * Copyright 2016-2019 NXP
*
*/
#include <unistd.h>
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
index c68495e..2829c93 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016 NXP
+ * Copyright 2016-2019 NXP
*
*/
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
index 4ed82f5..ab2b213 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_pvt.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016-2018 NXP
+ * Copyright 2016-2019 NXP
*
*/
diff --git a/drivers/bus/fslmc/qbman/include/fsl_qbman_base.h b/drivers/bus/fslmc/qbman/include/fsl_qbman_base.h
index 9323db3..48ffb1b 100644
--- a/drivers/bus/fslmc/qbman/include/fsl_qbman_base.h
+++ b/drivers/bus/fslmc/qbman/include/fsl_qbman_base.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (C) 2014 Freescale Semiconductor, Inc.
- * Copyright 2017-2018 NXP
+ * Copyright 2017-2019 NXP
*
*/
#ifndef _FSL_QBMAN_BASE_H
diff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c
index 12a7181..d4223bd 100644
--- a/drivers/bus/fslmc/qbman/qbman_portal.c
+++ b/drivers/bus/fslmc/qbman/qbman_portal.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*
*/
diff --git a/drivers/bus/fslmc/qbman/qbman_portal.h b/drivers/bus/fslmc/qbman/qbman_portal.h
index 0e9de8a..3aaacae 100644
--- a/drivers/bus/fslmc/qbman/qbman_portal.h
+++ b/drivers/bus/fslmc/qbman/qbman_portal.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*
*/
diff --git a/drivers/bus/fslmc/qbman/qbman_sys.h b/drivers/bus/fslmc/qbman/qbman_sys.h
index e59fcfd..55449ed 100644
--- a/drivers/bus/fslmc/qbman/qbman_sys.h
+++ b/drivers/bus/fslmc/qbman/qbman_sys.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
- *
+ * Copyright 2019 NXP
*/
/* qbman_sys_decl.h and qbman_sys.h are the two platform-specific files in the
* driver. They are only included via qbman_private.h, which is itself a
diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map
index 4da7872..fe45575 100644
--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map
+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map
@@ -1,32 +1,67 @@
-DPDK_17.05 {
+DPDK_20.0 {
global:
+ dpaa2_affine_qbman_ethrx_swp;
dpaa2_affine_qbman_swp;
dpaa2_alloc_dpbp_dev;
dpaa2_alloc_dq_storage;
+ dpaa2_dpbp_supported;
+ dpaa2_dqrr_size;
+ dpaa2_eqcr_size;
dpaa2_free_dpbp_dev;
dpaa2_free_dq_storage;
+ dpaa2_free_eq_descriptors;
+ dpaa2_get_qbman_swp;
+ dpaa2_io_portal;
+ dpaa2_svr_family;
+ dpaa2_virt_mode;
dpbp_disable;
dpbp_enable;
dpbp_get_attributes;
dpbp_get_num_free_bufs;
dpbp_open;
dpbp_reset;
+ dpci_get_opr;
+ dpci_set_opr;
+ dpci_set_rx_queue;
+ dpcon_get_attributes;
+ dpcon_open;
+ dpdmai_close;
+ dpdmai_disable;
+ dpdmai_enable;
+ dpdmai_get_attributes;
+ dpdmai_get_rx_queue;
+ dpdmai_get_tx_queue;
+ dpdmai_open;
+ dpdmai_set_rx_queue;
+ dpio_add_static_dequeue_channel;
dpio_close;
dpio_disable;
dpio_enable;
dpio_get_attributes;
dpio_open;
+ dpio_remove_static_dequeue_channel;
dpio_reset;
dpio_set_stashing_destination;
+ mc_get_soc_version;
+ mc_get_version;
mc_send_command;
per_lcore__dpaa2_io;
+ per_lcore_dpaa2_held_bufs;
qbman_check_command_complete;
+ qbman_check_new_result;
qbman_eq_desc_clear;
+ qbman_eq_desc_set_dca;
qbman_eq_desc_set_fq;
qbman_eq_desc_set_no_orp;
+ qbman_eq_desc_set_orp;
qbman_eq_desc_set_qd;
qbman_eq_desc_set_response;
+ qbman_eq_desc_set_token;
+ qbman_fq_query_state;
+ qbman_fq_state_frame_count;
+ qbman_get_dqrr_from_idx;
+ qbman_get_dqrr_idx;
qbman_pull_desc_clear;
qbman_pull_desc_set_fq;
qbman_pull_desc_set_numframes;
@@ -35,112 +70,43 @@ DPDK_17.05 {
qbman_release_desc_set_bpid;
qbman_result_DQ_fd;
qbman_result_DQ_flags;
- qbman_result_has_new_result;
- qbman_swp_acquire;
- qbman_swp_pull;
- qbman_swp_release;
- rte_fslmc_driver_register;
- rte_fslmc_driver_unregister;
- rte_fslmc_vfio_dmamap;
- rte_mcp_ptr_list;
-
- local: *;
-};
-
-DPDK_17.08 {
- global:
-
- dpaa2_io_portal;
- dpaa2_get_qbman_swp;
- dpci_set_rx_queue;
- dpcon_open;
- dpcon_get_attributes;
- dpio_add_static_dequeue_channel;
- dpio_remove_static_dequeue_channel;
- mc_get_soc_version;
- mc_get_version;
- qbman_check_new_result;
- qbman_eq_desc_set_dca;
- qbman_get_dqrr_from_idx;
- qbman_get_dqrr_idx;
qbman_result_DQ_fqd_ctx;
+ qbman_result_DQ_odpid;
+ qbman_result_DQ_seqnum;
qbman_result_SCN_state;
+ qbman_result_eqresp_fd;
+ qbman_result_eqresp_rc;
+ qbman_result_eqresp_rspid;
+ qbman_result_eqresp_set_rspid;
+ qbman_result_has_new_result;
+ qbman_swp_acquire;
qbman_swp_dqrr_consume;
+ qbman_swp_dqrr_idx_consume;
qbman_swp_dqrr_next;
qbman_swp_enqueue_multiple;
qbman_swp_enqueue_multiple_desc;
+ qbman_swp_enqueue_multiple_fd;
qbman_swp_interrupt_clear_status;
+ qbman_swp_prefetch_dqrr_next;
+ qbman_swp_pull;
qbman_swp_push_set;
+ qbman_swp_release;
rte_dpaa2_alloc_dpci_dev;
- rte_fslmc_object_register;
- rte_global_active_dqs_list;
-
-} DPDK_17.05;
-
-DPDK_17.11 {
- global:
-
- dpaa2_dpbp_supported;
rte_dpaa2_dev_type;
+ rte_dpaa2_free_dpci_dev;
rte_dpaa2_intr_disable;
rte_dpaa2_intr_enable;
-
-} DPDK_17.08;
-
-DPDK_18.02 {
- global:
-
- dpaa2_svr_family;
- dpaa2_virt_mode;
- per_lcore_dpaa2_held_bufs;
- qbman_fq_query_state;
- qbman_fq_state_frame_count;
- qbman_swp_dqrr_idx_consume;
- qbman_swp_prefetch_dqrr_next;
- rte_fslmc_get_device_count;
-
-} DPDK_17.11;
-
-DPDK_18.05 {
- global:
-
- dpaa2_affine_qbman_ethrx_swp;
- dpdmai_close;
- dpdmai_disable;
- dpdmai_enable;
- dpdmai_get_attributes;
- dpdmai_get_rx_queue;
- dpdmai_get_tx_queue;
- dpdmai_open;
- dpdmai_set_rx_queue;
- rte_dpaa2_free_dpci_dev;
rte_dpaa2_memsegs;
+ rte_fslmc_driver_register;
+ rte_fslmc_driver_unregister;
+ rte_fslmc_get_device_count;
+ rte_fslmc_object_register;
+ rte_fslmc_vfio_dmamap;
+ rte_global_active_dqs_list;
+ rte_mcp_ptr_list;
-} DPDK_18.02;
-
-DPDK_18.11 {
- global:
- dpaa2_dqrr_size;
- dpaa2_eqcr_size;
- dpci_get_opr;
- dpci_set_opr;
-
-} DPDK_18.05;
-
-DPDK_19.05 {
- global:
- dpaa2_free_eq_descriptors;
-
- qbman_eq_desc_set_orp;
- qbman_eq_desc_set_token;
- qbman_result_DQ_odpid;
- qbman_result_DQ_seqnum;
- qbman_result_eqresp_fd;
- qbman_result_eqresp_rc;
- qbman_result_eqresp_rspid;
- qbman_result_eqresp_set_rspid;
- qbman_swp_enqueue_multiple_fd;
-} DPDK_18.11;
+ local: *;
+};
EXPERIMENTAL {
global:
diff --git a/drivers/bus/fslmc/rte_fslmc.h b/drivers/bus/fslmc/rte_fslmc.h
index 31dfd13..96ba8dc 100644
--- a/drivers/bus/fslmc/rte_fslmc.h
+++ b/drivers/bus/fslmc/rte_fslmc.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
- * Copyright 2016 NXP
+ * Copyright 2016,2019 NXP
*
*/
diff --git a/drivers/bus/ifpga/Makefile b/drivers/bus/ifpga/Makefile
index 514452b..290c112 100644
--- a/drivers/bus/ifpga/Makefile
+++ b/drivers/bus/ifpga/Makefile
@@ -18,9 +18,6 @@ LDLIBS += -lrte_kvargs
# versioning export map
EXPORT_MAP := rte_bus_ifpga_version.map
-# library version
-LIBABIVER := 2
-
SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_bus.c
SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_common.c
diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build
index 0b5c38d..c9b08c8 100644
--- a/drivers/bus/ifpga/meson.build
+++ b/drivers/bus/ifpga/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2010-2018 Intel Corporation
-version = 2
-
deps += ['pci', 'kvargs', 'rawdev']
install_headers('rte_bus_ifpga.h')
sources = files('ifpga_common.c', 'ifpga_bus.c')
diff --git a/drivers/bus/ifpga/rte_bus_ifpga_version.map b/drivers/bus/ifpga/rte_bus_ifpga_version.map
index 964c9a9..05b4a28 100644
--- a/drivers/bus/ifpga/rte_bus_ifpga_version.map
+++ b/drivers/bus/ifpga/rte_bus_ifpga_version.map
@@ -1,17 +1,11 @@
-DPDK_18.05 {
+DPDK_20.0 {
global:
- rte_ifpga_get_integer32_arg;
- rte_ifpga_get_string_arg;
rte_ifpga_driver_register;
rte_ifpga_driver_unregister;
+ rte_ifpga_find_afu_by_name;
+ rte_ifpga_get_integer32_arg;
+ rte_ifpga_get_string_arg;
local: *;
};
-
-DPDK_19.05 {
- global:
-
- rte_ifpga_find_afu_by_name;
-
-} DPDK_18.05;
diff --git a/drivers/bus/pci/Makefile b/drivers/bus/pci/Makefile
index 45d1242..975d796 100644
--- a/drivers/bus/pci/Makefile
+++ b/drivers/bus/pci/Makefile
@@ -4,7 +4,6 @@
include $(RTE_SDK)/mk/rte.vars.mk
LIB = librte_bus_pci.a
-LIBABIVER := 2
EXPORT_MAP := rte_bus_pci_version.map
CFLAGS := -I$(SRCDIR) $(CFLAGS)
diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build
index a312ecc..a3feb86 100644
--- a/drivers/bus/pci/meson.build
+++ b/drivers/bus/pci/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
-version = 2
-
deps += ['pci']
install_headers('rte_bus_pci.h')
sources = files('pci_common.c',
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 6b46b4f..3f55420 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -247,6 +247,7 @@ rte_pci_detach_dev(struct rte_pci_device *dev)
/* clear driver structure */
dev->driver = NULL;
+ dev->device.driver = NULL;
if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
/* unmap resources for devices that use igb_uio */
diff --git a/drivers/bus/pci/rte_bus_pci_version.map b/drivers/bus/pci/rte_bus_pci_version.map
index 27e9c4f..012d817 100644
--- a/drivers/bus/pci/rte_bus_pci_version.map
+++ b/drivers/bus/pci/rte_bus_pci_version.map
@@ -1,4 +1,4 @@
-DPDK_17.11 {
+DPDK_20.0 {
global:
rte_pci_dump;
diff --git a/drivers/bus/vdev/Makefile b/drivers/bus/vdev/Makefile
index 803b8ea..63c9b3f 100644
--- a/drivers/bus/vdev/Makefile
+++ b/drivers/bus/vdev/Makefile
@@ -15,9 +15,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
# versioning export map
EXPORT_MAP := rte_bus_vdev_version.map
-# library version
-LIBABIVER := 2
-
SRCS-y += vdev.c
SRCS-y += vdev_params.c
diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build
index 803785f..12605e5 100644
--- a/drivers/bus/vdev/meson.build
+++ b/drivers/bus/vdev/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
-version = 2
-
sources = files('vdev.c',
'vdev_params.c')
install_headers('rte_bus_vdev.h')
diff --git a/drivers/bus/vdev/rte_bus_vdev_version.map b/drivers/bus/vdev/rte_bus_vdev_version.map
index 590cf9b..5abb10e 100644
--- a/drivers/bus/vdev/rte_bus_vdev_version.map
+++ b/drivers/bus/vdev/rte_bus_vdev_version.map
@@ -1,18 +1,12 @@
-DPDK_17.11 {
+DPDK_20.0 {
global:
+ rte_vdev_add_custom_scan;
rte_vdev_init;
rte_vdev_register;
+ rte_vdev_remove_custom_scan;
rte_vdev_uninit;
rte_vdev_unregister;
local: *;
};
-
-DPDK_18.02 {
- global:
-
- rte_vdev_add_custom_scan;
- rte_vdev_remove_custom_scan;
-
-} DPDK_17.11;
diff --git a/drivers/bus/vmbus/Makefile b/drivers/bus/vmbus/Makefile
index 8f3ec7a..59e789d 100644
--- a/drivers/bus/vmbus/Makefile
+++ b/drivers/bus/vmbus/Makefile
@@ -3,7 +3,6 @@
include $(RTE_SDK)/mk/rte.vars.mk
LIB = librte_bus_vmbus.a
-LIBABIVER := 2
EXPORT_MAP := rte_bus_vmbus_version.map
CFLAGS += -I$(SRCDIR)
diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build
index 79d4c68..251f21b 100644
--- a/drivers/bus/vmbus/meson.build
+++ b/drivers/bus/vmbus/meson.build
@@ -1,7 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-version = 2
-
allow_experimental_apis = true
install_headers('rte_bus_vmbus.h','rte_vmbus_reg.h')
diff --git a/drivers/bus/vmbus/rte_bus_vmbus_version.map b/drivers/bus/vmbus/rte_bus_vmbus_version.map
index ae231ad..cbaaebc 100644
--- a/drivers/bus/vmbus/rte_bus_vmbus_version.map
+++ b/drivers/bus/vmbus/rte_bus_vmbus_version.map
@@ -1,6 +1,4 @@
-/* SPDX-License-Identifier: BSD-3-Clause */
-
-DPDK_18.08 {
+DPDK_20.0 {
global:
rte_vmbus_chan_close;
@@ -20,6 +18,7 @@ DPDK_18.08 {
rte_vmbus_probe;
rte_vmbus_register;
rte_vmbus_scan;
+ rte_vmbus_set_latency;
rte_vmbus_sub_channel_index;
rte_vmbus_subchan_open;
rte_vmbus_unmap_device;
@@ -27,10 +26,3 @@ DPDK_18.08 {
local: *;
};
-
-DPDK_18.11 {
- global:
-
- rte_vmbus_set_latency;
-
-} DPDK_18.08;
diff --git a/drivers/common/cpt/Makefile b/drivers/common/cpt/Makefile
index 2340aa9..8594432 100644
--- a/drivers/common/cpt/Makefile
+++ b/drivers/common/cpt/Makefile
@@ -13,8 +13,6 @@ CFLAGS += $(WERROR_FLAGS)
CFLAGS += -I$(RTE_SDK)/drivers/bus/pci
EXPORT_MAP := rte_common_cpt_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/common/cpt/rte_common_cpt_version.map b/drivers/common/cpt/rte_common_cpt_version.map
index 382ec4b..7f1929d 100644
--- a/drivers/common/cpt/rte_common_cpt_version.map
+++ b/drivers/common/cpt/rte_common_cpt_version.map
@@ -1,14 +1,9 @@
-DPDK_18.11 {
+DPDK_20.0 {
global:
+ cpt_pmd_ops_helper_asym_get_mlen;
cpt_pmd_ops_helper_get_mlen_direct_mode;
cpt_pmd_ops_helper_get_mlen_sg_mode;
-};
-
-DPDK_19.11 {
- global:
-
- cpt_pmd_ops_helper_asym_get_mlen;
local: *;
};
diff --git a/drivers/common/dpaax/Makefile b/drivers/common/dpaax/Makefile
index a0a1de0..59bd8ae 100644
--- a/drivers/common/dpaax/Makefile
+++ b/drivers/common/dpaax/Makefile
@@ -20,9 +20,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax
# versioning export map
EXPORT_MAP := rte_common_dpaax_version.map
-# library version
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/common/dpaax/rte_common_dpaax_version.map b/drivers/common/dpaax/rte_common_dpaax_version.map
index a7699ae..f72eba7 100644
--- a/drivers/common/dpaax/rte_common_dpaax_version.map
+++ b/drivers/common/dpaax/rte_common_dpaax_version.map
@@ -1,29 +1,23 @@
-DPDK_18.11 {
+DPDK_20.0 {
global:
- dpaax_iova_table_update;
dpaax_iova_table_depopulate;
dpaax_iova_table_dump;
dpaax_iova_table_p;
dpaax_iova_table_populate;
-
- local: *;
-};
-
-DPDK_19.11 {
- global:
+ dpaax_iova_table_update;
of_device_is_available;
of_device_is_compatible;
of_find_compatible_node;
of_find_node_by_phandle;
of_get_address;
of_get_mac_address;
+ of_get_next_child;
of_get_parent;
of_get_property;
of_init_path;
of_n_addr_cells;
of_translate_address;
- of_get_next_child;
local: *;
-} DPDK_18.11;
+};
diff --git a/drivers/common/mvep/Makefile b/drivers/common/mvep/Makefile
index 1f5f005..f91d295 100644
--- a/drivers/common/mvep/Makefile
+++ b/drivers/common/mvep/Makefile
@@ -15,9 +15,6 @@ endif
# library name
LIB = librte_common_mvep.a
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_common_mvep_version.map
diff --git a/drivers/common/mvep/rte_common_mvep_version.map b/drivers/common/mvep/rte_common_mvep_version.map
index c71722d..0309284 100644
--- a/drivers/common/mvep/rte_common_mvep_version.map
+++ b/drivers/common/mvep/rte_common_mvep_version.map
@@ -1,6 +1,8 @@
-DPDK_18.11 {
+DPDK_20.0 {
global:
- rte_mvep_init;
rte_mvep_deinit;
+ rte_mvep_init;
+
+ local: *;
};
diff --git a/drivers/common/octeontx/Makefile b/drivers/common/octeontx/Makefile
index dfdb9f1..5e67df0 100644
--- a/drivers/common/octeontx/Makefile
+++ b/drivers/common/octeontx/Makefile
@@ -12,8 +12,6 @@ LIB = librte_common_octeontx.a
CFLAGS += $(WERROR_FLAGS)
EXPORT_MAP := rte_common_octeontx_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/common/octeontx/octeontx_mbox.c b/drivers/common/octeontx/octeontx_mbox.c
index 880f8a4..2fd2531 100644
--- a/drivers/common/octeontx/octeontx_mbox.c
+++ b/drivers/common/octeontx/octeontx_mbox.c
@@ -31,9 +31,11 @@ enum {
struct mbox {
int init_once;
+ uint8_t ready;
uint8_t *ram_mbox_base; /* Base address of mbox message stored in ram */
uint8_t *reg; /* Store to this register triggers PF mbox interrupt */
uint16_t tag_own; /* Last tag which was written to own channel */
+ uint16_t domain; /* Domain */
rte_spinlock_t lock;
};
@@ -59,6 +61,13 @@ struct mbox_ram_hdr {
};
};
+/* MBOX interface version message */
+struct mbox_intf_ver {
+ uint32_t platform:12;
+ uint32_t major:10;
+ uint32_t minor:10;
+};
+
int octeontx_logtype_mbox;
RTE_INIT(otx_init_log)
@@ -190,7 +199,7 @@ mbox_send(struct mbox *m, struct octeontx_mbox_hdr *hdr, const void *txmsg,
}
int
-octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base)
+octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base, uint16_t domain)
{
struct mbox *m = &octeontx_mbox;
@@ -207,13 +216,14 @@ octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base)
if (m->reg != NULL) {
rte_spinlock_init(&m->lock);
m->init_once = 1;
+ m->domain = domain;
}
return 0;
}
int
-octeontx_mbox_set_reg(uint8_t *reg)
+octeontx_mbox_set_reg(uint8_t *reg, uint16_t domain)
{
struct mbox *m = &octeontx_mbox;
@@ -230,6 +240,7 @@ octeontx_mbox_set_reg(uint8_t *reg)
if (m->ram_mbox_base != NULL) {
rte_spinlock_init(&m->lock);
m->init_once = 1;
+ m->domain = domain;
}
return 0;
@@ -247,3 +258,100 @@ octeontx_mbox_send(struct octeontx_mbox_hdr *hdr, void *txdata,
return mbox_send(m, hdr, txdata, txlen, rxdata, rxlen);
}
+
+static int
+octeontx_start_domain(void)
+{
+ struct octeontx_mbox_hdr hdr = {0};
+ int result = -EINVAL;
+
+ hdr.coproc = NO_COPROC;
+ hdr.msg = RM_START_APP;
+
+ result = octeontx_mbox_send(&hdr, NULL, 0, NULL, 0);
+ if (result != 0) {
+ mbox_log_err("Could not start domain. Err=%d. FuncErr=%d\n",
+ result, hdr.res_code);
+ result = -EINVAL;
+ }
+
+ return result;
+}
+
+static int
+octeontx_check_mbox_version(struct mbox_intf_ver app_intf_ver,
+ struct mbox_intf_ver *intf_ver)
+{
+ struct mbox_intf_ver kernel_intf_ver = {0};
+ struct octeontx_mbox_hdr hdr = {0};
+ int result = 0;
+
+
+ hdr.coproc = NO_COPROC;
+ hdr.msg = RM_INTERFACE_VERSION;
+
+ result = octeontx_mbox_send(&hdr, &app_intf_ver, sizeof(app_intf_ver),
+ &kernel_intf_ver, sizeof(kernel_intf_ver));
+ if (result != sizeof(kernel_intf_ver)) {
+ mbox_log_err("Could not send interface version. Err=%d. FuncErr=%d\n",
+ result, hdr.res_code);
+ result = -EINVAL;
+ }
+
+ if (intf_ver)
+ *intf_ver = kernel_intf_ver;
+
+ if (app_intf_ver.platform != kernel_intf_ver.platform ||
+ app_intf_ver.major != kernel_intf_ver.major ||
+ app_intf_ver.minor != kernel_intf_ver.minor)
+ result = -EINVAL;
+
+ return result;
+}
+
+int
+octeontx_mbox_init(void)
+{
+ const struct mbox_intf_ver MBOX_INTERFACE_VERSION = {
+ .platform = 0x01,
+ .major = 0x01,
+ .minor = 0x03
+ };
+ struct mbox_intf_ver rm_intf_ver = {0};
+ struct mbox *m = &octeontx_mbox;
+ int ret;
+
+ if (m->ready)
+ return 0;
+
+ ret = octeontx_start_domain();
+ if (ret < 0) {
+ m->init_once = 0;
+ return ret;
+ }
+
+ ret = octeontx_check_mbox_version(MBOX_INTERFACE_VERSION,
+ &rm_intf_ver);
+ if (ret < 0) {
+ mbox_log_err("MBOX version: Kernel(%d.%d.%d) != DPDK(%d.%d.%d)",
+ rm_intf_ver.platform, rm_intf_ver.major,
+ rm_intf_ver.minor, MBOX_INTERFACE_VERSION.platform,
+ MBOX_INTERFACE_VERSION.major,
+ MBOX_INTERFACE_VERSION.minor);
+ m->init_once = 0;
+ return -EINVAL;
+ }
+
+ m->ready = 1;
+ rte_mb();
+
+ return 0;
+}
+
+uint16_t
+octeontx_get_global_domain(void)
+{
+ struct mbox *m = &octeontx_mbox;
+
+ return m->domain;
+}
diff --git a/drivers/common/octeontx/octeontx_mbox.h b/drivers/common/octeontx/octeontx_mbox.h
index 43fbda2..e56719c 100644
--- a/drivers/common/octeontx/octeontx_mbox.h
+++ b/drivers/common/octeontx/octeontx_mbox.h
@@ -11,6 +11,11 @@
#define SSOW_BAR4_LEN (64 * 1024)
#define SSO_VHGRP_PF_MBOX(x) (0x200ULL | ((x) << 3))
+#define NO_COPROC 0x0
+#define RM_START_APP 0x1
+#define RM_INTERFACE_VERSION 0x2
+
+
#define MBOX_LOG(level, fmt, args...) \
rte_log(RTE_LOG_ ## level, octeontx_logtype_mbox,\
"%s() line %u: " fmt "\n", __func__, __LINE__, ## args)
@@ -26,11 +31,15 @@ struct octeontx_mbox_hdr {
uint16_t vfid; /* VF index or pf resource index local to the domain */
uint8_t coproc; /* Coprocessor id */
uint8_t msg; /* Message id */
+ uint8_t oob; /* out of band data */
uint8_t res_code; /* Functional layer response code */
};
-int octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base);
-int octeontx_mbox_set_reg(uint8_t *reg);
+int octeontx_mbox_init(void);
+void octeontx_set_global_domain(uint16_t global_domain);
+uint16_t octeontx_get_global_domain(void);
+int octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base, uint16_t domain);
+int octeontx_mbox_set_reg(uint8_t *reg, uint16_t domain);
int octeontx_mbox_send(struct octeontx_mbox_hdr *hdr,
void *txdata, uint16_t txlen, void *rxdata, uint16_t rxlen);
diff --git a/drivers/common/octeontx/rte_common_octeontx_version.map b/drivers/common/octeontx/rte_common_octeontx_version.map
index f04b3b7..5f6aa8b 100644
--- a/drivers/common/octeontx/rte_common_octeontx_version.map
+++ b/drivers/common/octeontx/rte_common_octeontx_version.map
@@ -1,7 +1,12 @@
-DPDK_18.05 {
+DPDK_20.0 {
global:
+ octeontx_get_global_domain;
+ octeontx_logtype_mbox;
+ octeontx_mbox_init;
+ octeontx_mbox_send;
octeontx_mbox_set_ram_mbox_base;
octeontx_mbox_set_reg;
- octeontx_mbox_send;
+
+ local: *;
};
diff --git a/drivers/common/octeontx2/Makefile b/drivers/common/octeontx2/Makefile
index afe5708..eaff294 100644
--- a/drivers/common/octeontx2/Makefile
+++ b/drivers/common/octeontx2/Makefile
@@ -24,8 +24,6 @@ endif
EXPORT_MAP := rte_common_octeontx2_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/common/octeontx2/rte_common_octeontx2_version.map b/drivers/common/octeontx2/rte_common_octeontx2_version.map
index 4400120..adad21a 100644
--- a/drivers/common/octeontx2/rte_common_octeontx2_version.map
+++ b/drivers/common/octeontx2/rte_common_octeontx2_version.map
@@ -1,39 +1,35 @@
-DPDK_19.08 {
+DPDK_20.0 {
global:
otx2_dev_active_vfs;
otx2_dev_fini;
otx2_dev_priv_init;
-
+ otx2_disable_irqs;
+ otx2_intra_dev_get_cfg;
otx2_logtype_base;
otx2_logtype_dpi;
otx2_logtype_mbox;
+ otx2_logtype_nix;
otx2_logtype_npa;
otx2_logtype_npc;
- otx2_logtype_nix;
otx2_logtype_sso;
- otx2_logtype_tm;
otx2_logtype_tim;
-
+ otx2_logtype_tm;
otx2_mbox_alloc_msg_rsp;
otx2_mbox_get_rsp;
otx2_mbox_get_rsp_tmo;
otx2_mbox_id2name;
otx2_mbox_msg_send;
otx2_mbox_wait_for_rsp;
-
- otx2_intra_dev_get_cfg;
otx2_npa_lf_active;
otx2_npa_lf_obj_get;
otx2_npa_lf_obj_ref;
otx2_npa_pf_func_get;
otx2_npa_set_defaults;
+ otx2_register_irq;
otx2_sso_pf_func_get;
otx2_sso_pf_func_set;
-
- otx2_disable_irqs;
otx2_unregister_irq;
- otx2_register_irq;
local: *;
};
diff --git a/drivers/common/qat/Makefile b/drivers/common/qat/Makefile
index 792058d..63d8efb 100644
--- a/drivers/common/qat/Makefile
+++ b/drivers/common/qat/Makefile
@@ -49,8 +49,6 @@ ifdef build_qat
# library name
LIB = librte_pmd_qat.a
- # library version
- LIBABIVER := 1
# build flags
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -O3
diff --git a/drivers/compress/isal/Makefile b/drivers/compress/isal/Makefile
index 95904f6..6438b75 100644
--- a/drivers/compress/isal/Makefile
+++ b/drivers/compress/isal/Makefile
@@ -17,9 +17,6 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_compressdev
LDLIBS += -lrte_bus_vdev
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_isal_version.map
diff --git a/drivers/compress/isal/rte_pmd_isal_version.map b/drivers/compress/isal/rte_pmd_isal_version.map
index de8e412..f9f17e4 100644
--- a/drivers/compress/isal/rte_pmd_isal_version.map
+++ b/drivers/compress/isal/rte_pmd_isal_version.map
@@ -1,3 +1,3 @@
-DPDK_18.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/compress/octeontx/Makefile b/drivers/compress/octeontx/Makefile
index f34424c..d6324b5 100644
--- a/drivers/compress/octeontx/Makefile
+++ b/drivers/compress/octeontx/Makefile
@@ -6,9 +6,6 @@ include $(RTE_SDK)/mk/rte.vars.mk
# library name
LIB = librte_pmd_octeontx_zip.a
-# library version
-LIBABIVER := 1
-
# build flags
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -O3
diff --git a/drivers/compress/octeontx/rte_pmd_octeontx_compress_version.map b/drivers/compress/octeontx/rte_pmd_octeontx_compress_version.map
index ad6e191..f9f17e4 100644
--- a/drivers/compress/octeontx/rte_pmd_octeontx_compress_version.map
+++ b/drivers/compress/octeontx/rte_pmd_octeontx_compress_version.map
@@ -1,3 +1,3 @@
-DPDK_18.08 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/compress/qat/rte_pmd_qat_version.map b/drivers/compress/qat/rte_pmd_qat_version.map
index ad6e191..f9f17e4 100644
--- a/drivers/compress/qat/rte_pmd_qat_version.map
+++ b/drivers/compress/qat/rte_pmd_qat_version.map
@@ -1,3 +1,3 @@
-DPDK_18.08 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/compress/zlib/Makefile b/drivers/compress/zlib/Makefile
index 5cf8de6..1eba356 100644
--- a/drivers/compress/zlib/Makefile
+++ b/drivers/compress/zlib/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_zlib_version.map
diff --git a/drivers/compress/zlib/rte_pmd_zlib_version.map b/drivers/compress/zlib/rte_pmd_zlib_version.map
index ad6e191..f9f17e4 100644
--- a/drivers/compress/zlib/rte_pmd_zlib_version.map
+++ b/drivers/compress/zlib/rte_pmd_zlib_version.map
@@ -1,3 +1,3 @@
-DPDK_18.08 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/aesni_gcm/Makefile b/drivers/crypto/aesni_gcm/Makefile
index 39eff3d..d8190a2 100644
--- a/drivers/crypto/aesni_gcm/Makefile
+++ b/drivers/crypto/aesni_gcm/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += $(WERROR_FLAGS)
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_aesni_gcm_version.map
diff --git a/drivers/crypto/aesni_gcm/rte_pmd_aesni_gcm_version.map b/drivers/crypto/aesni_gcm/rte_pmd_aesni_gcm_version.map
index dc4d417..f9f17e4 100644
--- a/drivers/crypto/aesni_gcm/rte_pmd_aesni_gcm_version.map
+++ b/drivers/crypto/aesni_gcm/rte_pmd_aesni_gcm_version.map
@@ -1,3 +1,3 @@
-DPDK_16.04 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/aesni_mb/Makefile b/drivers/crypto/aesni_mb/Makefile
index f303534..f1530e7 100644
--- a/drivers/crypto/aesni_mb/Makefile
+++ b/drivers/crypto/aesni_mb/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_aesni_mb_version.map
diff --git a/drivers/crypto/aesni_mb/rte_pmd_aesni_mb_version.map b/drivers/crypto/aesni_mb/rte_pmd_aesni_mb_version.map
index ad607bb..f9f17e4 100644
--- a/drivers/crypto/aesni_mb/rte_pmd_aesni_mb_version.map
+++ b/drivers/crypto/aesni_mb/rte_pmd_aesni_mb_version.map
@@ -1,3 +1,3 @@
-DPDK_2.2 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/armv8/Makefile b/drivers/crypto/armv8/Makefile
index f71f6b1..1252836 100644
--- a/drivers/crypto/armv8/Makefile
+++ b/drivers/crypto/armv8/Makefile
@@ -19,9 +19,6 @@ LIB = librte_pmd_armv8.a
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_armv8_version.map
diff --git a/drivers/crypto/armv8/rte_pmd_armv8_version.map b/drivers/crypto/armv8/rte_pmd_armv8_version.map
index 1f84b68..f9f17e4 100644
--- a/drivers/crypto/armv8/rte_pmd_armv8_version.map
+++ b/drivers/crypto/armv8/rte_pmd_armv8_version.map
@@ -1,3 +1,3 @@
-DPDK_17.02 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/caam_jr/Makefile b/drivers/crypto/caam_jr/Makefile
index fa35b79..1b1f25a 100644
--- a/drivers/crypto/caam_jr/Makefile
+++ b/drivers/crypto/caam_jr/Makefile
@@ -25,9 +25,6 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
# versioning export map
EXPORT_MAP := rte_pmd_caam_jr_version.map
-# library version
-LIBABIVER := 1
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_CAAM_JR) += caam_jr.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_CAAM_JR) += caam_jr_capabilities.c
diff --git a/drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map b/drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map
index 521e51f..f9f17e4 100644
--- a/drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map
+++ b/drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map
@@ -1,4 +1,3 @@
-DPDK_18.11 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/ccp/Makefile b/drivers/crypto/ccp/Makefile
index f51d170..3f5da2a 100644
--- a/drivers/crypto/ccp/Makefile
+++ b/drivers/crypto/ccp/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += -I$(SRCDIR)
CFLAGS += $(WERROR_FLAGS)
-# library version
-LIBABIVER := 1
-
# external library include paths
LDLIBS += -lcrypto
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c
index 19ae915..4256734 100644
--- a/drivers/crypto/ccp/ccp_crypto.c
+++ b/drivers/crypto/ccp/ccp_crypto.c
@@ -2680,7 +2680,9 @@ process_ops_to_enqueue(struct ccp_qp *qp,
struct rte_crypto_op **op,
struct ccp_queue *cmd_q,
uint16_t nb_ops,
- int slots_req)
+ uint16_t total_nb_ops,
+ int slots_req,
+ uint16_t b_idx)
{
int i, result = 0;
struct ccp_batch_info *b_info;
@@ -2701,6 +2703,7 @@ process_ops_to_enqueue(struct ccp_qp *qp,
/* populate batch info necessary for dequeue */
b_info->op_idx = 0;
+ b_info->b_idx = 0;
b_info->lsb_buf_idx = 0;
b_info->desccnt = 0;
b_info->cmd_q = cmd_q;
@@ -2710,7 +2713,7 @@ process_ops_to_enqueue(struct ccp_qp *qp,
b_info->head_offset = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx *
Q_DESC_SIZE);
- for (i = 0; i < nb_ops; i++) {
+ for (i = b_idx; i < (nb_ops+b_idx); i++) {
session = (struct ccp_session *)get_sym_session_private_data(
op[i]->sym->session,
ccp_cryptodev_driver_id);
@@ -2738,7 +2741,7 @@ process_ops_to_enqueue(struct ccp_qp *qp,
session, auth_ctx);
if (op[i]->status !=
RTE_CRYPTO_OP_STATUS_SUCCESS)
- continue;
+ CCP_LOG_ERR("RTE_CRYPTO_OP_STATUS_AUTH_FAILED");
} else
result = ccp_crypto_auth(op[i], cmd_q, b_info);
@@ -2762,6 +2765,8 @@ process_ops_to_enqueue(struct ccp_qp *qp,
}
b_info->opcnt = i;
+ b_info->b_idx = b_idx;
+ b_info->total_nb_ops = total_nb_ops;
b_info->tail_offset = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx *
Q_DESC_SIZE);
@@ -2776,7 +2781,7 @@ process_ops_to_enqueue(struct ccp_qp *qp,
rte_ring_enqueue(qp->processed_pkts, (void *)b_info);
EVP_MD_CTX_destroy(auth_ctx);
- return i;
+ return i-b_idx;
}
static inline void ccp_auth_dq_prepare(struct rte_crypto_op *op)
@@ -2861,8 +2866,8 @@ ccp_prepare_ops(struct ccp_qp *qp,
}
min_ops = RTE_MIN(nb_ops, b_info->opcnt);
- for (i = 0; i < min_ops; i++) {
- op_d[i] = b_info->op[b_info->op_idx++];
+ for (i = b_info->b_idx; i < min_ops; i++) {
+ op_d[i] = b_info->op[b_info->b_idx + b_info->op_idx++];
session = (struct ccp_session *)get_sym_session_private_data(
op_d[i]->sym->session,
ccp_cryptodev_driver_id);
@@ -2903,7 +2908,8 @@ ccp_prepare_ops(struct ccp_qp *qp,
int
process_ops_to_dequeue(struct ccp_qp *qp,
struct rte_crypto_op **op,
- uint16_t nb_ops)
+ uint16_t nb_ops,
+ uint16_t *total_nb_ops)
{
struct ccp_batch_info *b_info;
uint32_t cur_head_offset;
@@ -2918,6 +2924,7 @@ process_ops_to_dequeue(struct ccp_qp *qp,
if (b_info->auth_ctr == b_info->opcnt)
goto success;
+ *total_nb_ops = b_info->total_nb_ops;
cur_head_offset = CCP_READ_REG(b_info->cmd_q->reg_base,
CMD_Q_HEAD_LO_BASE);
@@ -2927,7 +2934,7 @@ process_ops_to_dequeue(struct ccp_qp *qp,
qp->b_info = b_info;
return 0;
}
- } else {
+ } else if (b_info->tail_offset != b_info->head_offset) {
if ((cur_head_offset >= b_info->head_offset) ||
(cur_head_offset < b_info->tail_offset)) {
qp->b_info = b_info;
@@ -2937,6 +2944,7 @@ process_ops_to_dequeue(struct ccp_qp *qp,
success:
+ *total_nb_ops = b_info->total_nb_ops;
nb_ops = ccp_prepare_ops(qp, op, b_info, nb_ops);
rte_atomic64_add(&b_info->cmd_q->free_slots, b_info->desccnt);
b_info->desccnt = 0;
diff --git a/drivers/crypto/ccp/ccp_crypto.h b/drivers/crypto/ccp/ccp_crypto.h
index 882b398..8e6d03e 100644
--- a/drivers/crypto/ccp/ccp_crypto.h
+++ b/drivers/crypto/ccp/ccp_crypto.h
@@ -353,7 +353,9 @@ int process_ops_to_enqueue(struct ccp_qp *qp,
struct rte_crypto_op **op,
struct ccp_queue *cmd_q,
uint16_t nb_ops,
- int slots_req);
+ uint16_t total_nb_ops,
+ int slots_req,
+ uint16_t b_idx);
/**
* process crypto ops to be dequeued
@@ -365,7 +367,8 @@ int process_ops_to_enqueue(struct ccp_qp *qp,
*/
int process_ops_to_dequeue(struct ccp_qp *qp,
struct rte_crypto_op **op,
- uint16_t nb_ops);
+ uint16_t nb_ops,
+ uint16_t *total_nb_ops);
/**
diff --git a/drivers/crypto/ccp/ccp_dev.h b/drivers/crypto/ccp/ccp_dev.h
index de3e4bc..f4ad9ea 100644
--- a/drivers/crypto/ccp/ccp_dev.h
+++ b/drivers/crypto/ccp/ccp_dev.h
@@ -59,7 +59,7 @@
#define CMD_Q_RUN 0x1
#define CMD_Q_SIZE 0x1F
#define CMD_Q_SHIFT 3
-#define COMMANDS_PER_QUEUE 2048
+#define COMMANDS_PER_QUEUE 8192
#define QUEUE_SIZE_VAL ((ffs(COMMANDS_PER_QUEUE) - 2) & \
CMD_Q_SIZE)
diff --git a/drivers/crypto/ccp/ccp_pmd_ops.c b/drivers/crypto/ccp/ccp_pmd_ops.c
index d5041f0..a19e85e 100644
--- a/drivers/crypto/ccp/ccp_pmd_ops.c
+++ b/drivers/crypto/ccp/ccp_pmd_ops.c
@@ -47,9 +47,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 20, \
+ .min = 1, \
.max = 20, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -89,9 +89,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 28, \
+ .min = 1, \
.max = 28, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -173,9 +173,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 32, \
+ .min = 1, \
.max = 32, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -257,9 +257,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 48, \
+ .min = 1, \
.max = 48, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -341,9 +341,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 64, \
+ .min = 1, \
.max = 64, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -383,9 +383,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 64, \
+ .min = 1, \
.max = 64, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
@@ -536,9 +536,9 @@
.increment = 1 \
}, \
.digest_size = { \
- .min = 16, \
+ .min = 1, \
.max = 16, \
- .increment = 0 \
+ .increment = 1 \
}, \
.aad_size = { 0 } \
}, } \
diff --git a/drivers/crypto/ccp/ccp_pmd_private.h b/drivers/crypto/ccp/ccp_pmd_private.h
index 7f2979e..1c4118e 100644
--- a/drivers/crypto/ccp/ccp_pmd_private.h
+++ b/drivers/crypto/ccp/ccp_pmd_private.h
@@ -31,9 +31,9 @@
#endif
/**< Maximum queue pairs supported by CCP PMD */
-#define CCP_PMD_MAX_QUEUE_PAIRS 1
+#define CCP_PMD_MAX_QUEUE_PAIRS 8
#define CCP_NB_MAX_DESCRIPTORS 1024
-#define CCP_MAX_BURST 64
+#define CCP_MAX_BURST 256
#include "ccp_dev.h"
@@ -50,8 +50,10 @@ struct ccp_batch_info {
struct rte_crypto_op *op[CCP_MAX_BURST];
/**< optable populated at enque time from app*/
int op_idx;
+ uint16_t b_idx;
struct ccp_queue *cmd_q;
uint16_t opcnt;
+ uint16_t total_nb_ops;
/**< no. of crypto ops in batch*/
int desccnt;
/**< no. of ccp queue descriptors*/
diff --git a/drivers/crypto/ccp/rte_ccp_pmd.c b/drivers/crypto/ccp/rte_ccp_pmd.c
index 4810d79..38cb1fe 100644
--- a/drivers/crypto/ccp/rte_ccp_pmd.c
+++ b/drivers/crypto/ccp/rte_ccp_pmd.c
@@ -22,6 +22,7 @@
*/
static unsigned int ccp_pmd_init_done;
uint8_t ccp_cryptodev_driver_id;
+uint8_t cryptodev_cnt;
struct ccp_pmd_init_params {
struct rte_cryptodev_pmd_init_params def_p;
@@ -201,30 +202,46 @@ ccp_pmd_enqueue_burst(void *queue_pair, struct rte_crypto_op **ops,
struct ccp_queue *cmd_q;
struct rte_cryptodev *dev = qp->dev;
uint16_t i, enq_cnt = 0, slots_req = 0;
+ uint16_t tmp_ops = nb_ops, b_idx, cur_ops = 0;
if (nb_ops == 0)
return 0;
if (unlikely(rte_ring_full(qp->processed_pkts) != 0))
return 0;
+ if (tmp_ops >= cryptodev_cnt)
+ cur_ops = nb_ops / cryptodev_cnt + (nb_ops)%cryptodev_cnt;
+ else
+ cur_ops = tmp_ops;
+ while (tmp_ops) {
+ b_idx = nb_ops - tmp_ops;
+ slots_req = 0;
+ if (cur_ops <= tmp_ops) {
+ tmp_ops -= cur_ops;
+ } else {
+ cur_ops = tmp_ops;
+ tmp_ops = 0;
+ }
+ for (i = 0; i < cur_ops; i++) {
+ sess = get_ccp_session(qp, ops[i + b_idx]);
+ if (unlikely(sess == NULL) && (i == 0)) {
+ qp->qp_stats.enqueue_err_count++;
+ return 0;
+ } else if (sess == NULL) {
+ cur_ops = i;
+ break;
+ }
+ slots_req += ccp_compute_slot_count(sess);
+ }
- for (i = 0; i < nb_ops; i++) {
- sess = get_ccp_session(qp, ops[i]);
- if (unlikely(sess == NULL) && (i == 0)) {
- qp->qp_stats.enqueue_err_count++;
+ cmd_q = ccp_allot_queue(dev, slots_req);
+ if (unlikely(cmd_q == NULL))
return 0;
- } else if (sess == NULL) {
- nb_ops = i;
- break;
- }
- slots_req += ccp_compute_slot_count(sess);
+ enq_cnt += process_ops_to_enqueue(qp, ops, cmd_q, cur_ops,
+ nb_ops, slots_req, b_idx);
+ i++;
}
- cmd_q = ccp_allot_queue(dev, slots_req);
- if (unlikely(cmd_q == NULL))
- return 0;
-
- enq_cnt = process_ops_to_enqueue(qp, ops, cmd_q, nb_ops, slots_req);
qp->qp_stats.enqueued_count += enq_cnt;
return enq_cnt;
}
@@ -234,9 +251,16 @@ ccp_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
uint16_t nb_ops)
{
struct ccp_qp *qp = queue_pair;
- uint16_t nb_dequeued = 0, i;
+ uint16_t nb_dequeued = 0, i, total_nb_ops;
+
+ nb_dequeued = process_ops_to_dequeue(qp, ops, nb_ops, &total_nb_ops);
- nb_dequeued = process_ops_to_dequeue(qp, ops, nb_ops);
+ if (total_nb_ops) {
+ while (nb_dequeued != total_nb_ops) {
+ nb_dequeued = process_ops_to_dequeue(qp,
+ ops, nb_ops, &total_nb_ops);
+ }
+ }
/* Free session if a session-less crypto op */
for (i = 0; i < nb_dequeued; i++)
@@ -296,7 +320,6 @@ cryptodev_ccp_create(const char *name,
{
struct rte_cryptodev *dev;
struct ccp_private *internals;
- uint8_t cryptodev_cnt = 0;
if (init_params->def_p.name[0] == '\0')
strlcpy(init_params->def_p.name, name,
diff --git a/drivers/crypto/ccp/rte_pmd_ccp_version.map b/drivers/crypto/ccp/rte_pmd_ccp_version.map
index 9b9ab1a..f9f17e4 100644
--- a/drivers/crypto/ccp/rte_pmd_ccp_version.map
+++ b/drivers/crypto/ccp/rte_pmd_ccp_version.map
@@ -1,4 +1,3 @@
-DPDK_18.05 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/dpaa2_sec/Makefile b/drivers/crypto/dpaa2_sec/Makefile
index ba30a95..96b9c78 100644
--- a/drivers/crypto/dpaa2_sec/Makefile
+++ b/drivers/crypto/dpaa2_sec/Makefile
@@ -33,9 +33,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/mempool/dpaa2/
# versioning export map
EXPORT_MAP := rte_pmd_dpaa2_sec_version.map
-# library version
-LIBABIVER := 2
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC) += dpaa2_sec_dpseci.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA2_SEC) += mc/dpseci.c
diff --git a/drivers/crypto/dpaa2_sec/meson.build b/drivers/crypto/dpaa2_sec/meson.build
index 9d1b170..ab9c8c8 100644
--- a/drivers/crypto/dpaa2_sec/meson.build
+++ b/drivers/crypto/dpaa2_sec/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
index 0bfb986..5952d64 100644
--- a/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
+++ b/drivers/crypto/dpaa2_sec/rte_pmd_dpaa2_sec_version.map
@@ -1,12 +1,8 @@
-DPDK_17.05 {
-
- local: *;
-};
-
-DPDK_18.11 {
+DPDK_20.0 {
global:
dpaa2_sec_eventq_attach;
dpaa2_sec_eventq_detach;
-} DPDK_17.05;
+ local: *;
+};
diff --git a/drivers/crypto/dpaa_sec/Makefile b/drivers/crypto/dpaa_sec/Makefile
index 9acccaa..fbfd775 100644
--- a/drivers/crypto/dpaa_sec/Makefile
+++ b/drivers/crypto/dpaa_sec/Makefile
@@ -27,9 +27,6 @@ LDLIBS += -lrte_cryptodev
# versioning export map
EXPORT_MAP := rte_pmd_dpaa_sec_version.map
-# library version
-LIBABIVER := 1
-
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA_SEC) += dpaa_sec.c
diff --git a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
index cc7f216..8580fa1 100644
--- a/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
+++ b/drivers/crypto/dpaa_sec/rte_pmd_dpaa_sec_version.map
@@ -1,12 +1,8 @@
-DPDK_17.11 {
-
- local: *;
-};
-
-DPDK_19.11 {
+DPDK_20.0 {
global:
dpaa_sec_eventq_attach;
dpaa_sec_eventq_detach;
-} DPDK_17.11;
+ local: *;
+};
diff --git a/drivers/crypto/kasumi/Makefile b/drivers/crypto/kasumi/Makefile
index 3de2f97..26f5137 100644
--- a/drivers/crypto/kasumi/Makefile
+++ b/drivers/crypto/kasumi/Makefile
@@ -17,9 +17,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_kasumi_version.map
diff --git a/drivers/crypto/kasumi/rte_pmd_kasumi_version.map b/drivers/crypto/kasumi/rte_pmd_kasumi_version.map
index 8ffeca9..f9f17e4 100644
--- a/drivers/crypto/kasumi/rte_pmd_kasumi_version.map
+++ b/drivers/crypto/kasumi/rte_pmd_kasumi_version.map
@@ -1,3 +1,3 @@
-DPDK_16.07 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/mvsam/Makefile b/drivers/crypto/mvsam/Makefile
index 2b4d036..f0641ae 100644
--- a/drivers/crypto/mvsam/Makefile
+++ b/drivers/crypto/mvsam/Makefile
@@ -24,9 +24,6 @@ CFLAGS += -I$(LIBMUSDK_PATH)/include
CFLAGS += -DMVCONF_TYPES_PUBLIC
CFLAGS += -DMVCONF_DMA_PHYS_ADDR_T_PUBLIC
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_mvsam_version.map
diff --git a/drivers/crypto/mvsam/rte_pmd_mvsam_version.map b/drivers/crypto/mvsam/rte_pmd_mvsam_version.map
index a753031..f9f17e4 100644
--- a/drivers/crypto/mvsam/rte_pmd_mvsam_version.map
+++ b/drivers/crypto/mvsam/rte_pmd_mvsam_version.map
@@ -1,3 +1,3 @@
-DPDK_17.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/nitrox/Makefile b/drivers/crypto/nitrox/Makefile
index f569927..fc42ac8 100644
--- a/drivers/crypto/nitrox/Makefile
+++ b/drivers/crypto/nitrox/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_nitrox_version.map
diff --git a/drivers/crypto/nitrox/rte_pmd_nitrox_version.map b/drivers/crypto/nitrox/rte_pmd_nitrox_version.map
index 406964d..f9f17e4 100644
--- a/drivers/crypto/nitrox/rte_pmd_nitrox_version.map
+++ b/drivers/crypto/nitrox/rte_pmd_nitrox_version.map
@@ -1,3 +1,3 @@
-DPDK_19.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/null/Makefile b/drivers/crypto/null/Makefile
index 9e6400c..4595055 100644
--- a/drivers/crypto/null/Makefile
+++ b/drivers/crypto/null/Makefile
@@ -14,9 +14,6 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_cryptodev
LDLIBS += -lrte_bus_vdev
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_null_crypto_version.map
diff --git a/drivers/crypto/null/rte_pmd_null_crypto_version.map b/drivers/crypto/null/rte_pmd_null_crypto_version.map
index dc4d417..f9f17e4 100644
--- a/drivers/crypto/null/rte_pmd_null_crypto_version.map
+++ b/drivers/crypto/null/rte_pmd_null_crypto_version.map
@@ -1,3 +1,3 @@
-DPDK_16.04 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/octeontx/Makefile b/drivers/crypto/octeontx/Makefile
index 2752cbc..08a99c8 100644
--- a/drivers/crypto/octeontx/Makefile
+++ b/drivers/crypto/octeontx/Makefile
@@ -7,9 +7,6 @@ include $(RTE_SDK)/mk/rte.vars.mk
# library name
LIB = librte_pmd_octeontx_crypto.a
-# library version
-LIBABIVER := 1
-
# build flags
CFLAGS += $(WERROR_FLAGS)
diff --git a/drivers/crypto/octeontx/rte_pmd_octeontx_crypto_version.map b/drivers/crypto/octeontx/rte_pmd_octeontx_crypto_version.map
index 521e51f..f9f17e4 100644
--- a/drivers/crypto/octeontx/rte_pmd_octeontx_crypto_version.map
+++ b/drivers/crypto/octeontx/rte_pmd_octeontx_crypto_version.map
@@ -1,4 +1,3 @@
-DPDK_18.11 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/octeontx2/Makefile b/drivers/crypto/octeontx2/Makefile
index ce116b8..f7d6c37 100644
--- a/drivers/crypto/octeontx2/Makefile
+++ b/drivers/crypto/octeontx2/Makefile
@@ -7,9 +7,6 @@ include $(RTE_SDK)/mk/rte.vars.mk
# library name
LIB = librte_pmd_octeontx2_crypto.a
-# library version
-LIBABIVER := 1
-
# build flags
CFLAGS += $(WERROR_FLAGS)
diff --git a/drivers/crypto/octeontx2/rte_pmd_octeontx2_crypto_version.map b/drivers/crypto/octeontx2/rte_pmd_octeontx2_crypto_version.map
index b7b7c91..f9f17e4 100644
--- a/drivers/crypto/octeontx2/rte_pmd_octeontx2_crypto_version.map
+++ b/drivers/crypto/octeontx2/rte_pmd_octeontx2_crypto_version.map
@@ -1,4 +1,3 @@
-DPDK_19.11 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/openssl/Makefile b/drivers/crypto/openssl/Makefile
index ae6c3bc..58a26ec 100644
--- a/drivers/crypto/openssl/Makefile
+++ b/drivers/crypto/openssl/Makefile
@@ -11,9 +11,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_openssl_version.map
diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
index d68713e..91f0283 100644
--- a/drivers/crypto/openssl/rte_openssl_pmd.c
+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
@@ -798,12 +798,12 @@ get_session(struct openssl_qp *qp, struct rte_crypto_op *op)
*/
static inline int
process_openssl_encryption_update(struct rte_mbuf *mbuf_src, int offset,
- uint8_t **dst, int srclen, EVP_CIPHER_CTX *ctx)
+ uint8_t **dst, int srclen, EVP_CIPHER_CTX *ctx, uint8_t inplace)
{
struct rte_mbuf *m;
int dstlen;
int l, n = srclen;
- uint8_t *src;
+ uint8_t *src, temp[EVP_CIPHER_CTX_block_size(ctx)];
for (m = mbuf_src; m != NULL && offset > rte_pktmbuf_data_len(m);
m = m->next)
@@ -813,6 +813,8 @@ process_openssl_encryption_update(struct rte_mbuf *mbuf_src, int offset,
return -1;
src = rte_pktmbuf_mtod_offset(m, uint8_t *, offset);
+ if (inplace)
+ *dst = src;
l = rte_pktmbuf_data_len(m) - offset;
if (srclen <= l) {
@@ -829,8 +831,24 @@ process_openssl_encryption_update(struct rte_mbuf *mbuf_src, int offset,
n -= l;
for (m = m->next; (m != NULL) && (n > 0); m = m->next) {
+ uint8_t diff = l - dstlen, rem;
+
src = rte_pktmbuf_mtod(m, uint8_t *);
- l = rte_pktmbuf_data_len(m) < n ? rte_pktmbuf_data_len(m) : n;
+ l = RTE_MIN(rte_pktmbuf_data_len(m), n);
+ if (diff && inplace) {
+ rem = RTE_MIN(l,
+ (EVP_CIPHER_CTX_block_size(ctx) - diff));
+ if (EVP_EncryptUpdate(ctx, temp,
+ &dstlen, src, rem) <= 0)
+ return -1;
+ n -= rem;
+ rte_memcpy(*dst, temp, diff);
+ rte_memcpy(src, temp + diff, rem);
+ src += rem;
+ l -= rem;
+ }
+ if (inplace)
+ *dst = src;
if (EVP_EncryptUpdate(ctx, *dst, &dstlen, src, l) <= 0)
return -1;
*dst += dstlen;
@@ -842,12 +860,12 @@ process_openssl_encryption_update(struct rte_mbuf *mbuf_src, int offset,
static inline int
process_openssl_decryption_update(struct rte_mbuf *mbuf_src, int offset,
- uint8_t **dst, int srclen, EVP_CIPHER_CTX *ctx)
+ uint8_t **dst, int srclen, EVP_CIPHER_CTX *ctx, uint8_t inplace)
{
struct rte_mbuf *m;
int dstlen;
int l, n = srclen;
- uint8_t *src;
+ uint8_t *src, temp[EVP_CIPHER_CTX_block_size(ctx)];
for (m = mbuf_src; m != NULL && offset > rte_pktmbuf_data_len(m);
m = m->next)
@@ -857,6 +875,8 @@ process_openssl_decryption_update(struct rte_mbuf *mbuf_src, int offset,
return -1;
src = rte_pktmbuf_mtod_offset(m, uint8_t *, offset);
+ if (inplace)
+ *dst = src;
l = rte_pktmbuf_data_len(m) - offset;
if (srclen <= l) {
@@ -873,8 +893,24 @@ process_openssl_decryption_update(struct rte_mbuf *mbuf_src, int offset,
n -= l;
for (m = m->next; (m != NULL) && (n > 0); m = m->next) {
+ uint8_t diff = l - dstlen, rem;
+
src = rte_pktmbuf_mtod(m, uint8_t *);
- l = rte_pktmbuf_data_len(m) < n ? rte_pktmbuf_data_len(m) : n;
+ l = RTE_MIN(rte_pktmbuf_data_len(m), n);
+ if (diff && inplace) {
+ rem = RTE_MIN(l,
+ (EVP_CIPHER_CTX_block_size(ctx) - diff));
+ if (EVP_DecryptUpdate(ctx, temp,
+ &dstlen, src, rem) <= 0)
+ return -1;
+ n -= rem;
+ rte_memcpy(*dst, temp, diff);
+ rte_memcpy(src, temp + diff, rem);
+ src += rem;
+ l -= rem;
+ }
+ if (inplace)
+ *dst = src;
if (EVP_DecryptUpdate(ctx, *dst, &dstlen, src, l) <= 0)
return -1;
*dst += dstlen;
@@ -887,7 +923,8 @@ process_openssl_decryption_update(struct rte_mbuf *mbuf_src, int offset,
/** Process standard openssl cipher encryption */
static int
process_openssl_cipher_encrypt(struct rte_mbuf *mbuf_src, uint8_t *dst,
- int offset, uint8_t *iv, int srclen, EVP_CIPHER_CTX *ctx)
+ int offset, uint8_t *iv, int srclen, EVP_CIPHER_CTX *ctx,
+ uint8_t inplace)
{
int totlen;
@@ -897,7 +934,7 @@ process_openssl_cipher_encrypt(struct rte_mbuf *mbuf_src, uint8_t *dst,
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (process_openssl_encryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, inplace))
goto process_cipher_encrypt_err;
if (EVP_EncryptFinal_ex(ctx, dst, &totlen) <= 0)
@@ -936,7 +973,8 @@ process_cipher_encrypt_err:
/** Process standard openssl cipher decryption */
static int
process_openssl_cipher_decrypt(struct rte_mbuf *mbuf_src, uint8_t *dst,
- int offset, uint8_t *iv, int srclen, EVP_CIPHER_CTX *ctx)
+ int offset, uint8_t *iv, int srclen, EVP_CIPHER_CTX *ctx,
+ uint8_t inplace)
{
int totlen;
@@ -946,7 +984,7 @@ process_openssl_cipher_decrypt(struct rte_mbuf *mbuf_src, uint8_t *dst,
EVP_CIPHER_CTX_set_padding(ctx, 0);
if (process_openssl_decryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, inplace))
goto process_cipher_decrypt_err;
if (EVP_DecryptFinal_ex(ctx, dst, &totlen) <= 0)
@@ -1033,7 +1071,7 @@ process_openssl_auth_encryption_gcm(struct rte_mbuf *mbuf_src, int offset,
if (srclen > 0)
if (process_openssl_encryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, 0))
goto process_auth_encryption_gcm_err;
/* Workaround open ssl bug in version less then 1.0.1f */
@@ -1078,7 +1116,7 @@ process_openssl_auth_encryption_ccm(struct rte_mbuf *mbuf_src, int offset,
if (srclen > 0)
if (process_openssl_encryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, 0))
goto process_auth_encryption_ccm_err;
if (EVP_EncryptFinal_ex(ctx, dst, &len) <= 0)
@@ -1115,7 +1153,7 @@ process_openssl_auth_decryption_gcm(struct rte_mbuf *mbuf_src, int offset,
if (srclen > 0)
if (process_openssl_decryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, 0))
goto process_auth_decryption_gcm_err;
/* Workaround open ssl bug in version less then 1.0.1f */
@@ -1161,7 +1199,7 @@ process_openssl_auth_decryption_ccm(struct rte_mbuf *mbuf_src, int offset,
if (srclen > 0)
if (process_openssl_decryption_update(mbuf_src, offset, &dst,
- srclen, ctx))
+ srclen, ctx, 0))
return -EFAULT;
return 0;
@@ -1376,13 +1414,16 @@ process_openssl_cipher_op
{
uint8_t *dst, *iv;
int srclen, status;
+ uint8_t inplace = (mbuf_src == mbuf_dst) ? 1 : 0;
EVP_CIPHER_CTX *ctx_copy;
/*
- * Segmented destination buffer is not supported for
- * encryption/decryption
+ * Segmented OOP destination buffer is not supported for encryption/
+ * decryption. In case of des3ctr, even inplace segmented buffers are
+ * not supported.
*/
- if (!rte_pktmbuf_is_contiguous(mbuf_dst)) {
+ if (!rte_pktmbuf_is_contiguous(mbuf_dst) &&
+ (!inplace || sess->cipher.mode != OPENSSL_CIPHER_LIB)) {
op->status = RTE_CRYPTO_OP_STATUS_ERROR;
return;
}
@@ -1400,11 +1441,11 @@ process_openssl_cipher_op
if (sess->cipher.direction == RTE_CRYPTO_CIPHER_OP_ENCRYPT)
status = process_openssl_cipher_encrypt(mbuf_src, dst,
op->sym->cipher.data.offset, iv,
- srclen, ctx_copy);
+ srclen, ctx_copy, inplace);
else
status = process_openssl_cipher_decrypt(mbuf_src, dst,
op->sym->cipher.data.offset, iv,
- srclen, ctx_copy);
+ srclen, ctx_copy, inplace);
else
status = process_openssl_cipher_des3ctr(mbuf_src, dst,
op->sym->cipher.data.offset, iv,
@@ -1449,7 +1490,7 @@ process_openssl_docsis_bpi_op(struct rte_crypto_op *op,
/* Encrypt with the block aligned stream with CBC mode */
status = process_openssl_cipher_encrypt(mbuf_src, dst,
op->sym->cipher.data.offset, iv,
- srclen, sess->cipher.ctx);
+ srclen, sess->cipher.ctx, 0);
if (last_block_len) {
/* Point at last block */
dst += srclen;
@@ -1499,7 +1540,7 @@ process_openssl_docsis_bpi_op(struct rte_crypto_op *op,
/* Decrypt with CBC mode */
status |= process_openssl_cipher_decrypt(mbuf_src, dst,
op->sym->cipher.data.offset, iv,
- srclen, sess->cipher.ctx);
+ srclen, sess->cipher.ctx, 0);
}
}
@@ -2137,6 +2178,7 @@ cryptodev_openssl_create(const char *name,
dev->feature_flags = RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO |
RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |
RTE_CRYPTODEV_FF_CPU_AESNI |
+ RTE_CRYPTODEV_FF_IN_PLACE_SGL |
RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT |
RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT |
RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO |
diff --git a/drivers/crypto/openssl/rte_pmd_openssl_version.map b/drivers/crypto/openssl/rte_pmd_openssl_version.map
index cc5829e..f9f17e4 100644
--- a/drivers/crypto/openssl/rte_pmd_openssl_version.map
+++ b/drivers/crypto/openssl/rte_pmd_openssl_version.map
@@ -1,3 +1,3 @@
-DPDK_16.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/scheduler/Makefile b/drivers/crypto/scheduler/Makefile
index a9514e3..67aac02 100644
--- a/drivers/crypto/scheduler/Makefile
+++ b/drivers/crypto/scheduler/Makefile
@@ -13,9 +13,6 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_cryptodev -lrte_kvargs -lrte_reorder
LDLIBS += -lrte_bus_vdev
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_crypto_scheduler_version.map
diff --git a/drivers/crypto/scheduler/rte_pmd_crypto_scheduler_version.map b/drivers/crypto/scheduler/rte_pmd_crypto_scheduler_version.map
index 5c43127..077afed 100644
--- a/drivers/crypto/scheduler/rte_pmd_crypto_scheduler_version.map
+++ b/drivers/crypto/scheduler/rte_pmd_crypto_scheduler_version.map
@@ -1,21 +1,16 @@
-DPDK_17.02 {
+DPDK_20.0 {
global:
rte_cryptodev_scheduler_load_user_scheduler;
- rte_cryptodev_scheduler_slave_attach;
- rte_cryptodev_scheduler_slave_detach;
- rte_cryptodev_scheduler_ordering_set;
- rte_cryptodev_scheduler_ordering_get;
-
-};
-
-DPDK_17.05 {
- global:
-
rte_cryptodev_scheduler_mode_get;
rte_cryptodev_scheduler_mode_set;
rte_cryptodev_scheduler_option_get;
rte_cryptodev_scheduler_option_set;
+ rte_cryptodev_scheduler_ordering_get;
+ rte_cryptodev_scheduler_ordering_set;
+ rte_cryptodev_scheduler_slave_attach;
+ rte_cryptodev_scheduler_slave_detach;
rte_cryptodev_scheduler_slaves_get;
-} DPDK_17.02;
+ local: *;
+};
diff --git a/drivers/crypto/snow3g/Makefile b/drivers/crypto/snow3g/Makefile
index 37f77db..4086c57 100644
--- a/drivers/crypto/snow3g/Makefile
+++ b/drivers/crypto/snow3g/Makefile
@@ -17,9 +17,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_snow3g_version.map
diff --git a/drivers/crypto/snow3g/rte_pmd_snow3g_version.map b/drivers/crypto/snow3g/rte_pmd_snow3g_version.map
index dc4d417..f9f17e4 100644
--- a/drivers/crypto/snow3g/rte_pmd_snow3g_version.map
+++ b/drivers/crypto/snow3g/rte_pmd_snow3g_version.map
@@ -1,3 +1,3 @@
-DPDK_16.04 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/virtio/Makefile b/drivers/crypto/virtio/Makefile
index be7b828..32e2e4d 100644
--- a/drivers/crypto/virtio/Makefile
+++ b/drivers/crypto/virtio/Makefile
@@ -17,8 +17,6 @@ CFLAGS += $(WERROR_FLAGS)
EXPORT_MAP := rte_pmd_virtio_crypto_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/crypto/virtio/rte_pmd_virtio_crypto_version.map b/drivers/crypto/virtio/rte_pmd_virtio_crypto_version.map
index de8e412..f9f17e4 100644
--- a/drivers/crypto/virtio/rte_pmd_virtio_crypto_version.map
+++ b/drivers/crypto/virtio/rte_pmd_virtio_crypto_version.map
@@ -1,3 +1,3 @@
-DPDK_18.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/crypto/zuc/Makefile b/drivers/crypto/zuc/Makefile
index 8d625aa..a01bb6e 100644
--- a/drivers/crypto/zuc/Makefile
+++ b/drivers/crypto/zuc/Makefile
@@ -17,9 +17,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -DALLOW_EXPERIMENTAL_API
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_zuc_version.map
diff --git a/drivers/crypto/zuc/rte_pmd_zuc_version.map b/drivers/crypto/zuc/rte_pmd_zuc_version.map
index cc5829e..f9f17e4 100644
--- a/drivers/crypto/zuc/rte_pmd_zuc_version.map
+++ b/drivers/crypto/zuc/rte_pmd_zuc_version.map
@@ -1,3 +1,3 @@
-DPDK_16.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/dpaa/Makefile b/drivers/event/dpaa/Makefile
index befb21b..2f53efd 100644
--- a/drivers/event/dpaa/Makefile
+++ b/drivers/event/dpaa/Makefile
@@ -27,8 +27,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/crypto/dpaa_sec
EXPORT_MAP := rte_pmd_dpaa_event_version.map
-LIBABIVER := 1
-
# Interfaces with DPDK
SRCS-$(CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV) += dpaa_eventdev.c
diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c
index b8761c6..a7d57ed 100644
--- a/drivers/event/dpaa/dpaa_eventdev.c
+++ b/drivers/event/dpaa/dpaa_eventdev.c
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017 NXP
+ * Copyright 2017-2019 NXP
*/
#include <assert.h>
diff --git a/drivers/event/dpaa/rte_pmd_dpaa_event_version.map b/drivers/event/dpaa/rte_pmd_dpaa_event_version.map
index 179140f..f9f17e4 100644
--- a/drivers/event/dpaa/rte_pmd_dpaa_event_version.map
+++ b/drivers/event/dpaa/rte_pmd_dpaa_event_version.map
@@ -1,4 +1,3 @@
-DPDK_18.02 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/dpaa2/Makefile b/drivers/event/dpaa2/Makefile
index a29284f..1cd3b88 100644
--- a/drivers/event/dpaa2/Makefile
+++ b/drivers/event/dpaa2/Makefile
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause
-# Copyright 2017 NXP
+# Copyright 2017,2019 NXP
#
include $(RTE_SDK)/mk/rte.vars.mk
@@ -31,8 +31,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/crypto/dpaa2_sec
# versioning export map
EXPORT_MAP := rte_pmd_dpaa2_event_version.map
-LIBABIVER := 2
-
# depends on fslmc bus which uses experimental API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/event/dpaa2/meson.build b/drivers/event/dpaa2/meson.build
index 72f97d4..ca914cc 100644
--- a/drivers/event/dpaa2/meson.build
+++ b/drivers/event/dpaa2/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/event/dpaa2/rte_pmd_dpaa2_event_version.map b/drivers/event/dpaa2/rte_pmd_dpaa2_event_version.map
index 1c0b755..f9f17e4 100644
--- a/drivers/event/dpaa2/rte_pmd_dpaa2_event_version.map
+++ b/drivers/event/dpaa2/rte_pmd_dpaa2_event_version.map
@@ -1,3 +1,3 @@
-DPDK_17.08 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/dsw/Makefile b/drivers/event/dsw/Makefile
index 922fe2e..f6e7dda 100644
--- a/drivers/event/dsw/Makefile
+++ b/drivers/event/dsw/Makefile
@@ -18,8 +18,6 @@ LDLIBS += -lrte_ring
LDLIBS += -lrte_eventdev
LDLIBS += -lrte_bus_vdev
-LIBABIVER := 1
-
EXPORT_MAP := rte_pmd_dsw_event_version.map
SRCS-$(CONFIG_RTE_LIBRTE_PMD_DSW_EVENTDEV) += \
diff --git a/drivers/event/dsw/rte_pmd_dsw_event_version.map b/drivers/event/dsw/rte_pmd_dsw_event_version.map
index 24bd5cd..f9f17e4 100644
--- a/drivers/event/dsw/rte_pmd_dsw_event_version.map
+++ b/drivers/event/dsw/rte_pmd_dsw_event_version.map
@@ -1,3 +1,3 @@
-DPDK_18.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/octeontx/Makefile b/drivers/event/octeontx/Makefile
index 2c92ccb..c1233e0 100644
--- a/drivers/event/octeontx/Makefile
+++ b/drivers/event/octeontx/Makefile
@@ -20,8 +20,6 @@ LDLIBS += -lrte_bus_vdev -lrte_ethdev
EXPORT_MAP := rte_pmd_octeontx_event_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/event/octeontx/rte_pmd_octeontx_event_version.map b/drivers/event/octeontx/rte_pmd_octeontx_event_version.map
index 5352e7e..f9f17e4 100644
--- a/drivers/event/octeontx/rte_pmd_octeontx_event_version.map
+++ b/drivers/event/octeontx/rte_pmd_octeontx_event_version.map
@@ -1,3 +1,3 @@
-DPDK_17.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
index e4e7c44..f9e9324 100644
--- a/drivers/event/octeontx/ssovf_evdev.c
+++ b/drivers/event/octeontx/ssovf_evdev.c
@@ -77,6 +77,7 @@ ssovf_mbox_getwork_tmo_set(uint32_t timeout_ns)
}
struct ssovf_mbox_grp_pri {
+ uint8_t vhgrp_id;
uint8_t wgt_left; /* Read only */
uint8_t weight;
uint8_t affinity;
@@ -95,6 +96,7 @@ ssovf_mbox_priority_set(uint8_t queue, uint8_t prio)
hdr.msg = SSO_GRP_SET_PRIORITY;
hdr.vfid = queue;
+ grp.vhgrp_id = queue;
grp.weight = 0xff;
grp.affinity = 0xff;
grp.priority = prio / 32; /* Normalize to 0 to 7 */
@@ -433,7 +435,7 @@ ssovf_eth_rx_adapter_queue_add(const struct rte_eventdev *dev,
pki_qos.mmask.f_grptag_ok = 1;
pki_qos.mmask.f_grptag_bad = 1;
- pki_qos.tag_type = queue_conf->ev.sched_type;
+ pki_qos.qos_entry.tag_type = queue_conf->ev.sched_type;
pki_qos.qos_entry.port_add = 0;
pki_qos.qos_entry.ggrp_ok = queue_conf->ev.queue_id;
pki_qos.qos_entry.ggrp_bad = queue_conf->ev.queue_id;
@@ -780,6 +782,7 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
return 0;
}
+ octeontx_mbox_init();
ret = ssovf_info(&oinfo);
if (ret) {
ssovf_log_err("Failed to probe and validate ssovfs %d", ret);
diff --git a/drivers/event/octeontx/ssovf_probe.c b/drivers/event/octeontx/ssovf_probe.c
index b3db596..4da7d1a 100644
--- a/drivers/event/octeontx/ssovf_probe.c
+++ b/drivers/event/octeontx/ssovf_probe.c
@@ -19,8 +19,6 @@
#define SSO_MAX_VHGRP (64)
#define SSO_MAX_VHWS (32)
-#define SSO_VHGRP_AQ_THR (0x1E0ULL)
-
struct ssovf_res {
uint16_t domain;
uint16_t vfid;
@@ -183,7 +181,8 @@ ssowvf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
sdev.total_ssowvfs++;
if (vfid == 0) {
ram_mbox_base = ssovf_bar(OCTEONTX_SSO_HWS, 0, 4);
- if (octeontx_mbox_set_ram_mbox_base(ram_mbox_base)) {
+ if (octeontx_mbox_set_ram_mbox_base(ram_mbox_base,
+ res->domain)) {
mbox_log_err("Invalid Failed to set ram mbox base");
return -EINVAL;
}
@@ -259,7 +258,7 @@ ssovf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
if (vfid == 0) {
reg = ssovf_bar(OCTEONTX_SSO_GROUP, 0, 0);
reg += SSO_VHGRP_PF_MBOX(1);
- if (octeontx_mbox_set_reg(reg)) {
+ if (octeontx_mbox_set_reg(reg, res->domain)) {
mbox_log_err("Invalid Failed to set mbox_reg");
return -EINVAL;
}
diff --git a/drivers/event/octeontx/ssovf_worker.h b/drivers/event/octeontx/ssovf_worker.h
index d1d3a52..c4f886d 100644
--- a/drivers/event/octeontx/ssovf_worker.h
+++ b/drivers/event/octeontx/ssovf_worker.h
@@ -30,8 +30,7 @@ ssovf_octeontx_wqe_to_pkt(uint64_t work, uint16_t port_info)
octtx_wqe_t *wqe = (octtx_wqe_t *)(uintptr_t)work;
/* Get mbuf from wqe */
- mbuf = (struct rte_mbuf *)((uintptr_t)wqe -
- OCTTX_PACKET_WQE_SKIP);
+ mbuf = (struct rte_mbuf *)((uintptr_t)wqe - OCTTX_PACKET_WQE_SKIP);
rte_prefetch_non_temporal(mbuf);
mbuf->packet_type =
ptype_table[wqe->s.w2.lcty][wqe->s.w2.lety][wqe->s.w2.lfty];
@@ -46,6 +45,16 @@ ssovf_octeontx_wqe_to_pkt(uint64_t work, uint16_t port_info)
return mbuf;
}
+static __rte_always_inline void
+ssovf_octeontx_wqe_free(uint64_t work)
+{
+ octtx_wqe_t *wqe = (octtx_wqe_t *)(uintptr_t)work;
+ struct rte_mbuf *mbuf;
+
+ mbuf = (struct rte_mbuf *)((uintptr_t)wqe - OCTTX_PACKET_WQE_SKIP);
+ rte_pktmbuf_free(mbuf);
+}
+
static __rte_always_inline uint16_t
ssows_get_work(struct ssows *ws, struct rte_event *ev)
{
@@ -59,9 +68,13 @@ ssows_get_work(struct ssows *ws, struct rte_event *ev)
ws->cur_grp = sched_type_queue >> 2;
sched_type_queue = sched_type_queue << 38;
ev->event = sched_type_queue | (get_work0 & 0xffffffff);
+
if (get_work1 && ev->event_type == RTE_EVENT_TYPE_ETHDEV) {
ev->mbuf = ssovf_octeontx_wqe_to_pkt(get_work1,
(ev->event >> 20) & 0x7F);
+ } else if (unlikely((get_work0 & 0xFFFFFFFF) == 0xFFFFFFFF)) {
+ ssovf_octeontx_wqe_free(get_work1);
+ return 0;
} else {
ev->u64 = get_work1;
}
diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c
index abbc9a7..caa1290 100644
--- a/drivers/event/octeontx/timvf_evdev.c
+++ b/drivers/event/octeontx/timvf_evdev.c
@@ -231,17 +231,15 @@ timvf_ring_create(struct rte_event_timer_adapter *adptr)
{
char pool_name[25];
int ret;
+ uint8_t tim_ring_id;
uint64_t nb_timers;
struct rte_event_timer_adapter_conf *rcfg = &adptr->data->conf;
struct timvf_ring *timr;
- struct timvf_info tinfo;
const char *mempool_ops;
unsigned int mp_flags = 0;
- if (timvf_info(&tinfo) < 0)
- return -ENODEV;
-
- if (adptr->data->id >= tinfo.total_timvfs)
+ tim_ring_id = timvf_get_ring();
+ if (tim_ring_id == UINT8_MAX)
return -ENODEV;
timr = rte_zmalloc("octeontx_timvf_priv",
@@ -259,7 +257,7 @@ timvf_ring_create(struct rte_event_timer_adapter *adptr)
}
timr->clk_src = (int) rcfg->clk_src;
- timr->tim_ring_id = adptr->data->id;
+ timr->tim_ring_id = tim_ring_id;
timr->tck_nsec = RTE_ALIGN_MUL_CEIL(rcfg->timer_tick_ns, 10);
timr->max_tout = rcfg->max_tmo_ns;
timr->nb_bkts = (timr->max_tout / timr->tck_nsec);
@@ -337,8 +335,10 @@ static int
timvf_ring_free(struct rte_event_timer_adapter *adptr)
{
struct timvf_ring *timr = adptr->data->adapter_priv;
+
rte_mempool_free(timr->chunk_pool);
rte_free(timr->bkt);
+ timvf_release_ring(timr->tim_ring_id);
rte_free(adptr->data->adapter_priv);
return 0;
}
diff --git a/drivers/event/octeontx/timvf_evdev.h b/drivers/event/octeontx/timvf_evdev.h
index 0185593..d0e5921 100644
--- a/drivers/event/octeontx/timvf_evdev.h
+++ b/drivers/event/octeontx/timvf_evdev.h
@@ -115,11 +115,6 @@
extern int otx_logtype_timvf;
static const uint16_t nb_chunk_slots = (TIM_CHUNK_SIZE / 16) - 1;
-struct timvf_info {
- uint16_t domain; /* Domain id */
- uint8_t total_timvfs; /* Total timvf available in domain */
-};
-
enum timvf_clk_src {
TIM_CLK_SRC_SCLK = RTE_EVENT_TIMER_ADAPTER_CPU_CLK,
TIM_CLK_SRC_GPIO = RTE_EVENT_TIMER_ADAPTER_EXT_CLK0,
@@ -196,7 +191,8 @@ bkt_and(uint32_t rel_bkt, uint32_t nb_bkts)
return rel_bkt & (nb_bkts - 1);
}
-int timvf_info(struct timvf_info *tinfo);
+uint8_t timvf_get_ring(void);
+void timvf_release_ring(uint8_t vfid);
void *timvf_bar(uint8_t id, uint8_t bar);
int timvf_timer_adapter_caps_get(const struct rte_eventdev *dev, uint64_t flags,
uint32_t *caps, const struct rte_event_timer_adapter_ops **ops,
diff --git a/drivers/event/octeontx/timvf_probe.c b/drivers/event/octeontx/timvf_probe.c
index af87625..59bba31 100644
--- a/drivers/event/octeontx/timvf_probe.c
+++ b/drivers/event/octeontx/timvf_probe.c
@@ -20,6 +20,7 @@
#define TIM_MAX_RINGS (64)
struct timvf_res {
+ uint8_t in_use;
uint16_t domain;
uint16_t vfid;
void *bar0;
@@ -34,50 +35,65 @@ struct timdev {
static struct timdev tdev;
-int
-timvf_info(struct timvf_info *tinfo)
+uint8_t
+timvf_get_ring(void)
{
+ uint16_t global_domain = octeontx_get_global_domain();
int i;
- struct ssovf_info info;
- if (tinfo == NULL)
- return -EINVAL;
+ for (i = 0; i < tdev.total_timvfs; i++) {
+ if (tdev.rings[i].domain != global_domain)
+ continue;
+ if (tdev.rings[i].in_use)
+ continue;
- if (!tdev.total_timvfs)
- return -ENODEV;
+ tdev.rings[i].in_use = true;
+ return tdev.rings[i].vfid;
+ }
- if (ssovf_info(&info) < 0)
- return -EINVAL;
+ return UINT8_MAX;
+}
+
+void
+timvf_release_ring(uint8_t tim_ring_id)
+{
+ uint16_t global_domain = octeontx_get_global_domain();
+ int i;
for (i = 0; i < tdev.total_timvfs; i++) {
- if (info.domain != tdev.rings[i].domain) {
- timvf_log_err("GRP error, vfid=%d/%d domain=%d/%d %p",
- i, tdev.rings[i].vfid,
- info.domain, tdev.rings[i].domain,
- tdev.rings[i].bar0);
- return -EINVAL;
- }
+ if (tdev.rings[i].domain != global_domain)
+ continue;
+ if (tdev.rings[i].vfid == tim_ring_id)
+ tdev.rings[i].in_use = false;
}
-
- tinfo->total_timvfs = tdev.total_timvfs;
- tinfo->domain = info.domain;
- return 0;
}
void*
-timvf_bar(uint8_t id, uint8_t bar)
+timvf_bar(uint8_t vfid, uint8_t bar)
{
+ uint16_t global_domain = octeontx_get_global_domain();
+ struct timvf_res *res = NULL;
+ int i;
+
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return NULL;
- if (id > tdev.total_timvfs)
+ for (i = 0; i < tdev.total_timvfs; i++) {
+ if (tdev.rings[i].domain != global_domain)
+ continue;
+ if (tdev.rings[i].vfid == vfid)
+ res = &tdev.rings[i];
+
+ }
+
+ if (res == NULL)
return NULL;
switch (bar) {
case 0:
- return tdev.rings[id].bar0;
+ return res->bar0;
case 4:
- return tdev.rings[id].bar4;
+ return res->bar4;
default:
return NULL;
}
@@ -118,6 +134,7 @@ timvf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
res->bar2 = pci_dev->mem_resource[2].addr;
res->bar4 = pci_dev->mem_resource[4].addr;
res->domain = (val >> 7) & 0xffff;
+ res->in_use = false;
tdev.total_timvfs++;
rte_wmb();
diff --git a/drivers/event/octeontx2/Makefile b/drivers/event/octeontx2/Makefile
index 8289f61..6dab69c 100644
--- a/drivers/event/octeontx2/Makefile
+++ b/drivers/event/octeontx2/Makefile
@@ -27,8 +27,6 @@ endif
EXPORT_MAP := rte_pmd_octeontx2_event_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/event/octeontx2/otx2_evdev.h b/drivers/event/octeontx2/otx2_evdev.h
index 530060f..231a12a 100644
--- a/drivers/event/octeontx2/otx2_evdev.h
+++ b/drivers/event/octeontx2/otx2_evdev.h
@@ -14,6 +14,7 @@
#include "otx2_dev.h"
#include "otx2_ethdev.h"
#include "otx2_mempool.h"
+#include "otx2_tim_evdev.h"
#define EVENTDEV_NAME_OCTEONTX2_PMD otx2_eventdev
@@ -137,9 +138,12 @@ struct otx2_sso_evdev {
struct rte_mempool *xaq_pool;
uint64_t rx_offloads;
uint64_t tx_offloads;
+ uint64_t adptr_xae_cnt;
uint16_t rx_adptr_pool_cnt;
- uint32_t adptr_xae_cnt;
uint64_t *rx_adptr_pools;
+ uint16_t tim_adptr_ring_cnt;
+ uint16_t *timer_adptr_rings;
+ uint64_t *timer_adptr_sz;
/* Dev args */
uint8_t dual_ws;
uint8_t selftest;
diff --git a/drivers/event/octeontx2/otx2_evdev_adptr.c b/drivers/event/octeontx2/otx2_evdev_adptr.c
index d8a06a5..233cba2 100644
--- a/drivers/event/octeontx2/otx2_evdev_adptr.c
+++ b/drivers/event/octeontx2/otx2_evdev_adptr.c
@@ -199,41 +199,87 @@ fail:
void
sso_updt_xae_cnt(struct otx2_sso_evdev *dev, void *data, uint32_t event_type)
{
+ int i;
+
switch (event_type) {
case RTE_EVENT_TYPE_ETHDEV:
{
struct otx2_eth_rxq *rxq = data;
- int i, match = false;
uint64_t *old_ptr;
for (i = 0; i < dev->rx_adptr_pool_cnt; i++) {
if ((uint64_t)rxq->pool == dev->rx_adptr_pools[i])
- match = true;
- }
-
- if (!match) {
- dev->rx_adptr_pool_cnt++;
- old_ptr = dev->rx_adptr_pools;
- dev->rx_adptr_pools = rte_realloc(dev->rx_adptr_pools,
- sizeof(uint64_t) *
- dev->rx_adptr_pool_cnt
- , 0);
- if (dev->rx_adptr_pools == NULL) {
- dev->adptr_xae_cnt += rxq->pool->size;
- dev->rx_adptr_pools = old_ptr;
- dev->rx_adptr_pool_cnt--;
return;
- }
- dev->rx_adptr_pools[dev->rx_adptr_pool_cnt - 1] =
- (uint64_t)rxq->pool;
+ }
+ dev->rx_adptr_pool_cnt++;
+ old_ptr = dev->rx_adptr_pools;
+ dev->rx_adptr_pools = rte_realloc(dev->rx_adptr_pools,
+ sizeof(uint64_t) *
+ dev->rx_adptr_pool_cnt, 0);
+ if (dev->rx_adptr_pools == NULL) {
dev->adptr_xae_cnt += rxq->pool->size;
+ dev->rx_adptr_pools = old_ptr;
+ dev->rx_adptr_pool_cnt--;
+ return;
}
+ dev->rx_adptr_pools[dev->rx_adptr_pool_cnt - 1] =
+ (uint64_t)rxq->pool;
+
+ dev->adptr_xae_cnt += rxq->pool->size;
break;
}
case RTE_EVENT_TYPE_TIMER:
{
- dev->adptr_xae_cnt += (*(uint64_t *)data);
+ struct otx2_tim_ring *timr = data;
+ uint16_t *old_ring_ptr;
+ uint64_t *old_sz_ptr;
+
+ for (i = 0; i < dev->tim_adptr_ring_cnt; i++) {
+ if (timr->ring_id != dev->timer_adptr_rings[i])
+ continue;
+ if (timr->nb_timers == dev->timer_adptr_sz[i])
+ return;
+ dev->adptr_xae_cnt -= dev->timer_adptr_sz[i];
+ dev->adptr_xae_cnt += timr->nb_timers;
+ dev->timer_adptr_sz[i] = timr->nb_timers;
+
+ return;
+ }
+
+ dev->tim_adptr_ring_cnt++;
+ old_ring_ptr = dev->timer_adptr_rings;
+ old_sz_ptr = dev->timer_adptr_sz;
+
+ dev->timer_adptr_rings = rte_realloc(dev->timer_adptr_rings,
+ sizeof(uint16_t) *
+ dev->tim_adptr_ring_cnt,
+ 0);
+ if (dev->timer_adptr_rings == NULL) {
+ dev->adptr_xae_cnt += timr->nb_timers;
+ dev->timer_adptr_rings = old_ring_ptr;
+ dev->tim_adptr_ring_cnt--;
+ return;
+ }
+
+ dev->timer_adptr_sz = rte_realloc(dev->timer_adptr_sz,
+ sizeof(uint64_t) *
+ dev->tim_adptr_ring_cnt,
+ 0);
+
+ if (dev->timer_adptr_sz == NULL) {
+ dev->adptr_xae_cnt += timr->nb_timers;
+ dev->timer_adptr_sz = old_sz_ptr;
+ dev->tim_adptr_ring_cnt--;
+ return;
+ }
+
+ dev->timer_adptr_rings[dev->tim_adptr_ring_cnt - 1] =
+ timr->ring_id;
+ dev->timer_adptr_sz[dev->tim_adptr_ring_cnt - 1] =
+ timr->nb_timers;
+
+ dev->adptr_xae_cnt += timr->nb_timers;
break;
}
default:
diff --git a/drivers/event/octeontx2/otx2_tim_evdev.c b/drivers/event/octeontx2/otx2_tim_evdev.c
index e8316a6..b275c69 100644
--- a/drivers/event/octeontx2/otx2_tim_evdev.c
+++ b/drivers/event/octeontx2/otx2_tim_evdev.c
@@ -124,6 +124,7 @@ tim_chnk_pool_create(struct otx2_tim_ring *tim_ring,
char pool_name[25];
int rc;
+ cache_sz /= rte_lcore_count();
/* Create chunk pool. */
if (rcfg->flags & RTE_EVENT_TIMER_ADAPTER_F_SP_PUT) {
mp_flags = MEMPOOL_F_SP_PUT | MEMPOOL_F_SC_GET;
@@ -138,10 +139,9 @@ tim_chnk_pool_create(struct otx2_tim_ring *tim_ring,
cache_sz = RTE_MEMPOOL_CACHE_MAX_SIZE;
if (!tim_ring->disable_npa) {
- /* NPA need not have cache as free is not visible to SW */
tim_ring->chunk_pool = rte_mempool_create_empty(pool_name,
tim_ring->nb_chunks, tim_ring->chunk_sz,
- 0, 0, rte_socket_id(), mp_flags);
+ cache_sz, 0, rte_socket_id(), mp_flags);
if (tim_ring->chunk_pool == NULL) {
otx2_err("Unable to create chunkpool.");
@@ -254,7 +254,6 @@ otx2_tim_ring_create(struct rte_event_timer_adapter *adptr)
struct tim_ring_req *free_req;
struct tim_lf_alloc_req *req;
struct tim_lf_alloc_rsp *rsp;
- uint64_t nb_timers;
int i, rc;
if (dev == NULL)
@@ -300,7 +299,7 @@ otx2_tim_ring_create(struct rte_event_timer_adapter *adptr)
tim_ring->max_tout = rcfg->max_tmo_ns;
tim_ring->nb_bkts = (tim_ring->max_tout / tim_ring->tck_nsec);
tim_ring->chunk_sz = dev->chunk_sz;
- nb_timers = rcfg->nb_timers;
+ tim_ring->nb_timers = rcfg->nb_timers;
tim_ring->disable_npa = dev->disable_npa;
tim_ring->enable_stats = dev->enable_stats;
@@ -316,7 +315,7 @@ otx2_tim_ring_create(struct rte_event_timer_adapter *adptr)
}
}
- tim_ring->nb_chunks = nb_timers / OTX2_TIM_NB_CHUNK_SLOTS(
+ tim_ring->nb_chunks = tim_ring->nb_timers / OTX2_TIM_NB_CHUNK_SLOTS(
tim_ring->chunk_sz);
tim_ring->nb_chunk_slots = OTX2_TIM_NB_CHUNK_SLOTS(tim_ring->chunk_sz);
@@ -373,7 +372,7 @@ otx2_tim_ring_create(struct rte_event_timer_adapter *adptr)
tim_set_fp_ops(tim_ring);
/* Update SSO xae count. */
- sso_updt_xae_cnt(sso_pmd_priv(dev->event_dev), (void *)&nb_timers,
+ sso_updt_xae_cnt(sso_pmd_priv(dev->event_dev), (void *)tim_ring,
RTE_EVENT_TYPE_TIMER);
sso_xae_reconfigure(dev->event_dev);
@@ -390,6 +389,31 @@ rng_mem_err:
return rc;
}
+static void
+otx2_tim_calibrate_start_tsc(struct otx2_tim_ring *tim_ring)
+{
+#define OTX2_TIM_CALIB_ITER 1E6
+ uint32_t real_bkt, bucket;
+ int icount, ecount = 0;
+ uint64_t bkt_cyc;
+
+ for (icount = 0; icount < OTX2_TIM_CALIB_ITER; icount++) {
+ real_bkt = otx2_read64(tim_ring->base + TIM_LF_RING_REL) >> 44;
+ bkt_cyc = rte_rdtsc();
+ bucket = (bkt_cyc - tim_ring->ring_start_cyc) /
+ tim_ring->tck_int;
+ bucket = bucket % (tim_ring->nb_bkts);
+ tim_ring->ring_start_cyc = bkt_cyc - (real_bkt *
+ tim_ring->tck_int);
+ if (bucket != real_bkt)
+ ecount++;
+ }
+ tim_ring->last_updt_cyc = bkt_cyc;
+ otx2_tim_dbg("Bucket mispredict %3.2f distance %d\n",
+ 100 - (((double)(icount - ecount) / (double)icount) * 100),
+ bucket - real_bkt);
+}
+
static int
otx2_tim_ring_start(const struct rte_event_timer_adapter *adptr)
{
@@ -424,8 +448,11 @@ otx2_tim_ring_start(const struct rte_event_timer_adapter *adptr)
tim_ring->ring_start_cyc = rsp->timestarted;
#endif
tim_ring->tck_int = NSEC2TICK(tim_ring->tck_nsec, rte_get_timer_hz());
+ tim_ring->tot_int = tim_ring->tck_int * tim_ring->nb_bkts;
tim_ring->fast_div = rte_reciprocal_value_u64(tim_ring->tck_int);
+ otx2_tim_calibrate_start_tsc(tim_ring);
+
fail:
return rc;
}
diff --git a/drivers/event/octeontx2/otx2_tim_evdev.h b/drivers/event/octeontx2/otx2_tim_evdev.h
index eec0189..56895dc 100644
--- a/drivers/event/octeontx2/otx2_tim_evdev.h
+++ b/drivers/event/octeontx2/otx2_tim_evdev.h
@@ -25,6 +25,7 @@
#define TIM_LF_RAS_INT_W1S (0x308)
#define TIM_LF_RAS_INT_ENA_W1S (0x310)
#define TIM_LF_RAS_INT_ENA_W1C (0x318)
+#define TIM_LF_RING_REL (0x400)
#define TIM_BUCKET_W1_S_CHUNK_REMAINDER (48)
#define TIM_BUCKET_W1_M_CHUNK_REMAINDER ((1ULL << (64 - \
@@ -139,13 +140,15 @@ struct otx2_tim_evdev {
struct otx2_tim_ring {
uintptr_t base;
- struct rte_reciprocal_u64 fast_div;
uint16_t nb_chunk_slots;
uint32_t nb_bkts;
+ uint64_t last_updt_cyc;
uint64_t ring_start_cyc;
+ uint64_t tck_int;
+ uint64_t tot_int;
struct otx2_tim_bkt *bkt;
struct rte_mempool *chunk_pool;
- uint64_t tck_int;
+ struct rte_reciprocal_u64 fast_div;
rte_atomic64_t arm_cnt;
uint8_t prod_type_sp;
uint8_t enable_stats;
@@ -154,6 +157,7 @@ struct otx2_tim_ring {
uint8_t ena_dfb;
uint16_t ring_id;
uint32_t aura;
+ uint64_t nb_timers;
uint64_t tck_nsec;
uint64_t max_tout;
uint64_t nb_chunks;
diff --git a/drivers/event/octeontx2/otx2_tim_worker.c b/drivers/event/octeontx2/otx2_tim_worker.c
index feba61c..104674c 100644
--- a/drivers/event/octeontx2/otx2_tim_worker.c
+++ b/drivers/event/octeontx2/otx2_tim_worker.c
@@ -38,6 +38,23 @@ tim_format_event(const struct rte_event_timer * const tim,
entry->wqe = tim->ev.u64;
}
+static inline void
+tim_sync_start_cyc(struct otx2_tim_ring *tim_ring)
+{
+ uint64_t cur_cyc = rte_rdtsc();
+ uint32_t real_bkt;
+
+ if (cur_cyc - tim_ring->last_updt_cyc > tim_ring->tot_int) {
+ real_bkt = otx2_read64(tim_ring->base + TIM_LF_RING_REL) >> 44;
+ cur_cyc = rte_rdtsc();
+
+ tim_ring->ring_start_cyc = cur_cyc -
+ (real_bkt * tim_ring->tck_int);
+ tim_ring->last_updt_cyc = cur_cyc;
+ }
+
+}
+
static __rte_always_inline uint16_t
tim_timer_arm_burst(const struct rte_event_timer_adapter *adptr,
struct rte_event_timer **tim,
@@ -49,6 +66,7 @@ tim_timer_arm_burst(const struct rte_event_timer_adapter *adptr,
uint16_t index;
int ret;
+ tim_sync_start_cyc(tim_ring);
for (index = 0; index < nb_timers; index++) {
if (tim_arm_checks(tim_ring, tim[index]))
break;
@@ -99,6 +117,7 @@ tim_timer_arm_tmo_brst(const struct rte_event_timer_adapter *adptr,
return 0;
}
+ tim_sync_start_cyc(tim_ring);
while (arr_idx < nb_timers) {
for (idx = 0; idx < OTX2_TIM_MAX_BURST && (arr_idx < nb_timers);
idx++, arr_idx++) {
diff --git a/drivers/event/octeontx2/otx2_tim_worker.h b/drivers/event/octeontx2/otx2_tim_worker.h
index 50db654..af2f864 100644
--- a/drivers/event/octeontx2/otx2_tim_worker.h
+++ b/drivers/event/octeontx2/otx2_tim_worker.h
@@ -7,6 +7,13 @@
#include "otx2_tim_evdev.h"
+static inline uint8_t
+tim_bkt_fetch_lock(uint64_t w1)
+{
+ return (w1 >> TIM_BUCKET_W1_S_LOCK) &
+ TIM_BUCKET_W1_M_LOCK;
+}
+
static inline int16_t
tim_bkt_fetch_rem(uint64_t w1)
{
@@ -108,28 +115,41 @@ tim_bkt_clr_nent(struct otx2_tim_bkt *bktp)
return __atomic_and_fetch(&bktp->w1, v, __ATOMIC_ACQ_REL);
}
-static __rte_always_inline struct otx2_tim_bkt *
+static __rte_always_inline void
tim_get_target_bucket(struct otx2_tim_ring * const tim_ring,
- const uint32_t rel_bkt, const uint8_t flag)
+ const uint32_t rel_bkt, struct otx2_tim_bkt **bkt,
+ struct otx2_tim_bkt **mirr_bkt, const uint8_t flag)
{
const uint64_t bkt_cyc = rte_rdtsc() - tim_ring->ring_start_cyc;
uint32_t bucket = rte_reciprocal_divide_u64(bkt_cyc,
&tim_ring->fast_div) + rel_bkt;
+ uint32_t mirr_bucket = 0;
- if (flag & OTX2_TIM_BKT_MOD)
+ if (flag & OTX2_TIM_BKT_MOD) {
bucket = bucket % tim_ring->nb_bkts;
- if (flag & OTX2_TIM_BKT_AND)
+ mirr_bucket = (bucket + (tim_ring->nb_bkts >> 1)) %
+ tim_ring->nb_bkts;
+ }
+ if (flag & OTX2_TIM_BKT_AND) {
bucket = bucket & (tim_ring->nb_bkts - 1);
+ mirr_bucket = (bucket + (tim_ring->nb_bkts >> 1)) &
+ (tim_ring->nb_bkts - 1);
+ }
- return &tim_ring->bkt[bucket];
+ *bkt = &tim_ring->bkt[bucket];
+ *mirr_bkt = &tim_ring->bkt[mirr_bucket];
}
static struct otx2_tim_ent *
tim_clr_bkt(struct otx2_tim_ring * const tim_ring,
struct otx2_tim_bkt * const bkt)
{
+#define TIM_MAX_OUTSTANDING_OBJ 64
+ void *pend_chunks[TIM_MAX_OUTSTANDING_OBJ];
struct otx2_tim_ent *chunk;
struct otx2_tim_ent *pnext;
+ uint8_t objs = 0;
+
chunk = ((struct otx2_tim_ent *)(uintptr_t)bkt->first_chunk);
chunk = (struct otx2_tim_ent *)(uintptr_t)(chunk +
@@ -137,15 +157,25 @@ tim_clr_bkt(struct otx2_tim_ring * const tim_ring,
while (chunk) {
pnext = (struct otx2_tim_ent *)(uintptr_t)
((chunk + tim_ring->nb_chunk_slots)->w0);
- rte_mempool_put(tim_ring->chunk_pool, chunk);
+ if (objs == TIM_MAX_OUTSTANDING_OBJ) {
+ rte_mempool_put_bulk(tim_ring->chunk_pool, pend_chunks,
+ objs);
+ objs = 0;
+ }
+ pend_chunks[objs++] = chunk;
chunk = pnext;
}
+ if (objs)
+ rte_mempool_put_bulk(tim_ring->chunk_pool, pend_chunks,
+ objs);
+
return (struct otx2_tim_ent *)(uintptr_t)bkt->first_chunk;
}
static struct otx2_tim_ent *
tim_refill_chunk(struct otx2_tim_bkt * const bkt,
+ struct otx2_tim_bkt * const mirr_bkt,
struct otx2_tim_ring * const tim_ring)
{
struct otx2_tim_ent *chunk;
@@ -155,8 +185,8 @@ tim_refill_chunk(struct otx2_tim_bkt * const bkt,
(void **)&chunk)))
return NULL;
if (bkt->nb_entry) {
- *(uint64_t *)(((struct otx2_tim_ent *)(uintptr_t)
- bkt->current_chunk) +
+ *(uint64_t *)(((struct otx2_tim_ent *)
+ mirr_bkt->current_chunk) +
tim_ring->nb_chunk_slots) =
(uintptr_t)chunk;
} else {
@@ -173,6 +203,7 @@ tim_refill_chunk(struct otx2_tim_bkt * const bkt,
static struct otx2_tim_ent *
tim_insert_chunk(struct otx2_tim_bkt * const bkt,
+ struct otx2_tim_bkt * const mirr_bkt,
struct otx2_tim_ring * const tim_ring)
{
struct otx2_tim_ent *chunk;
@@ -183,12 +214,11 @@ tim_insert_chunk(struct otx2_tim_bkt * const bkt,
*(uint64_t *)(chunk + tim_ring->nb_chunk_slots) = 0;
if (bkt->nb_entry) {
*(uint64_t *)(((struct otx2_tim_ent *)(uintptr_t)
- bkt->current_chunk) +
+ mirr_bkt->current_chunk) +
tim_ring->nb_chunk_slots) = (uintptr_t)chunk;
} else {
bkt->first_chunk = (uintptr_t)chunk;
}
-
return chunk;
}
@@ -199,41 +229,69 @@ tim_add_entry_sp(struct otx2_tim_ring * const tim_ring,
const struct otx2_tim_ent * const pent,
const uint8_t flags)
{
+ struct otx2_tim_bkt *mirr_bkt;
struct otx2_tim_ent *chunk;
struct otx2_tim_bkt *bkt;
uint64_t lock_sema;
int16_t rem;
- bkt = tim_get_target_bucket(tim_ring, rel_bkt, flags);
-
__retry:
+ tim_get_target_bucket(tim_ring, rel_bkt, &bkt, &mirr_bkt, flags);
+
/* Get Bucket sema*/
- lock_sema = tim_bkt_fetch_sema(bkt);
+ lock_sema = tim_bkt_fetch_sema_lock(bkt);
/* Bucket related checks. */
- if (unlikely(tim_bkt_get_hbt(lock_sema)))
- goto __retry;
-
+ if (unlikely(tim_bkt_get_hbt(lock_sema))) {
+ if (tim_bkt_get_nent(lock_sema) != 0) {
+ uint64_t hbt_state;
+#ifdef RTE_ARCH_ARM64
+ asm volatile(
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbz %[hbt], 33, dne%= \n"
+ " sevl \n"
+ "rty%=: wfe \n"
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbnz %[hbt], 33, rty%= \n"
+ "dne%=: \n"
+ : [hbt] "=&r" (hbt_state)
+ : [w1] "r" ((&bkt->w1))
+ : "memory"
+ );
+#else
+ do {
+ hbt_state = __atomic_load_n(&bkt->w1,
+ __ATOMIC_ACQUIRE);
+ } while (hbt_state & BIT_ULL(33));
+#endif
+
+ if (!(hbt_state & BIT_ULL(34))) {
+ tim_bkt_dec_lock(bkt);
+ goto __retry;
+ }
+ }
+ }
/* Insert the work. */
rem = tim_bkt_fetch_rem(lock_sema);
if (!rem) {
if (flags & OTX2_TIM_ENA_FB)
- chunk = tim_refill_chunk(bkt, tim_ring);
+ chunk = tim_refill_chunk(bkt, mirr_bkt, tim_ring);
if (flags & OTX2_TIM_ENA_DFB)
- chunk = tim_insert_chunk(bkt, tim_ring);
+ chunk = tim_insert_chunk(bkt, mirr_bkt, tim_ring);
if (unlikely(chunk == NULL)) {
- tim_bkt_set_rem(bkt, 0);
+ bkt->chunk_remainder = 0;
+ tim_bkt_dec_lock(bkt);
tim->impl_opaque[0] = 0;
tim->impl_opaque[1] = 0;
tim->state = RTE_EVENT_TIMER_ERROR;
return -ENOMEM;
}
- bkt->current_chunk = (uintptr_t)chunk;
- tim_bkt_set_rem(bkt, tim_ring->nb_chunk_slots - 1);
+ mirr_bkt->current_chunk = (uintptr_t)chunk;
+ bkt->chunk_remainder = tim_ring->nb_chunk_slots - 1;
} else {
- chunk = (struct otx2_tim_ent *)(uintptr_t)bkt->current_chunk;
+ chunk = (struct otx2_tim_ent *)mirr_bkt->current_chunk;
chunk += tim_ring->nb_chunk_slots - rem;
}
@@ -241,6 +299,7 @@ __retry:
*chunk = *pent;
tim_bkt_inc_nent(bkt);
+ tim_bkt_dec_lock(bkt);
tim->impl_opaque[0] = (uintptr_t)chunk;
tim->impl_opaque[1] = (uintptr_t)bkt;
@@ -256,35 +315,77 @@ tim_add_entry_mp(struct otx2_tim_ring * const tim_ring,
const struct otx2_tim_ent * const pent,
const uint8_t flags)
{
+ struct otx2_tim_bkt *mirr_bkt;
struct otx2_tim_ent *chunk;
struct otx2_tim_bkt *bkt;
uint64_t lock_sema;
int16_t rem;
__retry:
- bkt = tim_get_target_bucket(tim_ring, rel_bkt, flags);
-
+ tim_get_target_bucket(tim_ring, rel_bkt, &bkt, &mirr_bkt, flags);
/* Get Bucket sema*/
lock_sema = tim_bkt_fetch_sema_lock(bkt);
/* Bucket related checks. */
if (unlikely(tim_bkt_get_hbt(lock_sema))) {
- tim_bkt_dec_lock(bkt);
- goto __retry;
+ if (tim_bkt_get_nent(lock_sema) != 0) {
+ uint64_t hbt_state;
+#ifdef RTE_ARCH_ARM64
+ asm volatile(
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbz %[hbt], 33, dne%= \n"
+ " sevl \n"
+ "rty%=: wfe \n"
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbnz %[hbt], 33, rty%= \n"
+ "dne%=: \n"
+ : [hbt] "=&r" (hbt_state)
+ : [w1] "r" ((&bkt->w1))
+ : "memory"
+ );
+#else
+ do {
+ hbt_state = __atomic_load_n(&bkt->w1,
+ __ATOMIC_ACQUIRE);
+ } while (hbt_state & BIT_ULL(33));
+#endif
+
+ if (!(hbt_state & BIT_ULL(34))) {
+ tim_bkt_dec_lock(bkt);
+ goto __retry;
+ }
+ }
}
rem = tim_bkt_fetch_rem(lock_sema);
-
if (rem < 0) {
+#ifdef RTE_ARCH_ARM64
+ asm volatile(
+ " ldaxrh %w[rem], [%[crem]] \n"
+ " tbz %w[rem], 15, dne%= \n"
+ " sevl \n"
+ "rty%=: wfe \n"
+ " ldaxrh %w[rem], [%[crem]] \n"
+ " tbnz %w[rem], 15, rty%= \n"
+ "dne%=: \n"
+ : [rem] "=&r" (rem)
+ : [crem] "r" (&bkt->chunk_remainder)
+ : "memory"
+ );
+#else
+ while (__atomic_load_n(&bkt->chunk_remainder,
+ __ATOMIC_ACQUIRE) < 0)
+ ;
+#endif
/* Goto diff bucket. */
tim_bkt_dec_lock(bkt);
goto __retry;
} else if (!rem) {
/* Only one thread can be here*/
if (flags & OTX2_TIM_ENA_FB)
- chunk = tim_refill_chunk(bkt, tim_ring);
+ chunk = tim_refill_chunk(bkt, mirr_bkt, tim_ring);
if (flags & OTX2_TIM_ENA_DFB)
- chunk = tim_insert_chunk(bkt, tim_ring);
+ chunk = tim_insert_chunk(bkt, mirr_bkt, tim_ring);
if (unlikely(chunk == NULL)) {
tim_bkt_set_rem(bkt, 0);
@@ -294,17 +395,23 @@ __retry:
tim->state = RTE_EVENT_TIMER_ERROR;
return -ENOMEM;
}
- bkt->current_chunk = (uintptr_t)chunk;
- tim_bkt_set_rem(bkt, tim_ring->nb_chunk_slots - 1);
+ *chunk = *pent;
+ while (tim_bkt_fetch_lock(lock_sema) !=
+ (-tim_bkt_fetch_rem(lock_sema)))
+ lock_sema = __atomic_load_n(&bkt->w1, __ATOMIC_ACQUIRE);
+
+ mirr_bkt->current_chunk = (uintptr_t)chunk;
+ __atomic_store_n(&bkt->chunk_remainder,
+ tim_ring->nb_chunk_slots - 1, __ATOMIC_RELEASE);
} else {
- chunk = (struct otx2_tim_ent *)(uintptr_t)bkt->current_chunk;
+ chunk = (struct otx2_tim_ent *)mirr_bkt->current_chunk;
chunk += tim_ring->nb_chunk_slots - rem;
+ *chunk = *pent;
}
/* Copy work entry. */
- *chunk = *pent;
- tim_bkt_dec_lock(bkt);
tim_bkt_inc_nent(bkt);
+ tim_bkt_dec_lock(bkt);
tim->impl_opaque[0] = (uintptr_t)chunk;
tim->impl_opaque[1] = (uintptr_t)bkt;
tim->state = RTE_EVENT_TIMER_ARMED;
@@ -338,6 +445,7 @@ tim_add_entry_brst(struct otx2_tim_ring * const tim_ring,
const uint16_t nb_timers, const uint8_t flags)
{
struct otx2_tim_ent *chunk = NULL;
+ struct otx2_tim_bkt *mirr_bkt;
struct otx2_tim_bkt *bkt;
uint16_t chunk_remainder;
uint16_t index = 0;
@@ -346,7 +454,7 @@ tim_add_entry_brst(struct otx2_tim_ring * const tim_ring,
uint8_t lock_cnt;
__retry:
- bkt = tim_get_target_bucket(tim_ring, rel_bkt, flags);
+ tim_get_target_bucket(tim_ring, rel_bkt, &bkt, &mirr_bkt, flags);
/* Only one thread beyond this. */
lock_sema = tim_bkt_inc_lock(bkt);
@@ -360,8 +468,33 @@ __retry:
/* Bucket related checks. */
if (unlikely(tim_bkt_get_hbt(lock_sema))) {
- tim_bkt_dec_lock(bkt);
- goto __retry;
+ if (tim_bkt_get_nent(lock_sema) != 0) {
+ uint64_t hbt_state;
+#ifdef RTE_ARCH_ARM64
+ asm volatile(
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbz %[hbt], 33, dne%= \n"
+ " sevl \n"
+ "rty%=: wfe \n"
+ " ldaxr %[hbt], [%[w1]] \n"
+ " tbnz %[hbt], 33, rty%= \n"
+ "dne%=: \n"
+ : [hbt] "=&r" (hbt_state)
+ : [w1] "r" ((&bkt->w1))
+ : "memory"
+ );
+#else
+ do {
+ hbt_state = __atomic_load_n(&bkt->w1,
+ __ATOMIC_ACQUIRE);
+ } while (hbt_state & BIT_ULL(33));
+#endif
+
+ if (!(hbt_state & BIT_ULL(34))) {
+ tim_bkt_dec_lock(bkt);
+ goto __retry;
+ }
+ }
}
chunk_remainder = tim_bkt_fetch_rem(lock_sema);
@@ -370,7 +503,7 @@ __retry:
crem = tim_ring->nb_chunk_slots - chunk_remainder;
if (chunk_remainder && crem) {
chunk = ((struct otx2_tim_ent *)
- (uintptr_t)bkt->current_chunk) + crem;
+ mirr_bkt->current_chunk) + crem;
index = tim_cpy_wrk(index, chunk_remainder, chunk, tim,
ents, bkt);
@@ -379,9 +512,9 @@ __retry:
}
if (flags & OTX2_TIM_ENA_FB)
- chunk = tim_refill_chunk(bkt, tim_ring);
+ chunk = tim_refill_chunk(bkt, mirr_bkt, tim_ring);
if (flags & OTX2_TIM_ENA_DFB)
- chunk = tim_insert_chunk(bkt, tim_ring);
+ chunk = tim_insert_chunk(bkt, mirr_bkt, tim_ring);
if (unlikely(chunk == NULL)) {
tim_bkt_dec_lock(bkt);
@@ -390,14 +523,14 @@ __retry:
return crem;
}
*(uint64_t *)(chunk + tim_ring->nb_chunk_slots) = 0;
- bkt->current_chunk = (uintptr_t)chunk;
+ mirr_bkt->current_chunk = (uintptr_t)chunk;
tim_cpy_wrk(index, nb_timers, chunk, tim, ents, bkt);
rem = nb_timers - chunk_remainder;
tim_bkt_set_rem(bkt, tim_ring->nb_chunk_slots - rem);
tim_bkt_add_nent(bkt, rem);
} else {
- chunk = (struct otx2_tim_ent *)(uintptr_t)bkt->current_chunk;
+ chunk = (struct otx2_tim_ent *)mirr_bkt->current_chunk;
chunk += (tim_ring->nb_chunk_slots - chunk_remainder);
tim_cpy_wrk(index, nb_timers, chunk, tim, ents, bkt);
diff --git a/drivers/event/octeontx2/rte_pmd_octeontx2_event_version.map b/drivers/event/octeontx2/rte_pmd_octeontx2_event_version.map
index 41c65c8..f9f17e4 100644
--- a/drivers/event/octeontx2/rte_pmd_octeontx2_event_version.map
+++ b/drivers/event/octeontx2/rte_pmd_octeontx2_event_version.map
@@ -1,4 +1,3 @@
-DPDK_19.08 {
+DPDK_20.0 {
local: *;
};
-
diff --git a/drivers/event/opdl/Makefile b/drivers/event/opdl/Makefile
index bf50a60..6aab556 100644
--- a/drivers/event/opdl/Makefile
+++ b/drivers/event/opdl/Makefile
@@ -20,9 +20,6 @@ endif
LDLIBS += -lrte_eal -lrte_eventdev -lrte_kvargs
LDLIBS += -lrte_bus_vdev -lrte_mbuf -lrte_mempool
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_opdl_event_version.map
diff --git a/drivers/event/opdl/rte_pmd_opdl_event_version.map b/drivers/event/opdl/rte_pmd_opdl_event_version.map
index 58b9427..f9f17e4 100644
--- a/drivers/event/opdl/rte_pmd_opdl_event_version.map
+++ b/drivers/event/opdl/rte_pmd_opdl_event_version.map
@@ -1,3 +1,3 @@
-DPDK_18.02 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/skeleton/Makefile b/drivers/event/skeleton/Makefile
index 0f7f07e..dc85ad3 100644
--- a/drivers/event/skeleton/Makefile
+++ b/drivers/event/skeleton/Makefile
@@ -16,8 +16,6 @@ LDLIBS += -lrte_bus_vdev
EXPORT_MAP := rte_pmd_skeleton_event_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/event/skeleton/rte_pmd_skeleton_event_version.map b/drivers/event/skeleton/rte_pmd_skeleton_event_version.map
index 8591cc0..f9f17e4 100644
--- a/drivers/event/skeleton/rte_pmd_skeleton_event_version.map
+++ b/drivers/event/skeleton/rte_pmd_skeleton_event_version.map
@@ -1,4 +1,3 @@
-DPDK_17.05 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/event/sw/Makefile b/drivers/event/sw/Makefile
index c6600e8..17937e2 100644
--- a/drivers/event/sw/Makefile
+++ b/drivers/event/sw/Makefile
@@ -20,9 +20,6 @@ LDLIBS += -lrte_eal -lrte_eventdev -lrte_kvargs -lrte_ring
LDLIBS += -lrte_mempool -lrte_mbuf
LDLIBS += -lrte_bus_vdev
-# library version
-LIBABIVER := 1
-
# versioning export map
EXPORT_MAP := rte_pmd_sw_event_version.map
diff --git a/drivers/event/sw/rte_pmd_sw_event_version.map b/drivers/event/sw/rte_pmd_sw_event_version.map
index 5352e7e..f9f17e4 100644
--- a/drivers/event/sw/rte_pmd_sw_event_version.map
+++ b/drivers/event/sw/rte_pmd_sw_event_version.map
@@ -1,3 +1,3 @@
-DPDK_17.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/mempool/bucket/Makefile b/drivers/mempool/bucket/Makefile
index d6660b0..1dc0079 100644
--- a/drivers/mempool/bucket/Makefile
+++ b/drivers/mempool/bucket/Makefile
@@ -21,8 +21,6 @@ LDLIBS += -lrte_eal -lrte_mempool -lrte_ring
EXPORT_MAP := rte_mempool_bucket_version.map
-LIBABIVER := 1
-
SRCS-$(CONFIG_RTE_DRIVER_MEMPOOL_BUCKET) += rte_mempool_bucket.c
include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/drivers/mempool/bucket/rte_mempool_bucket_version.map b/drivers/mempool/bucket/rte_mempool_bucket_version.map
index 9b9ab1a..f9f17e4 100644
--- a/drivers/mempool/bucket/rte_mempool_bucket_version.map
+++ b/drivers/mempool/bucket/rte_mempool_bucket_version.map
@@ -1,4 +1,3 @@
-DPDK_18.05 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/mempool/dpaa/Makefile b/drivers/mempool/dpaa/Makefile
index 534e007..8c786dd 100644
--- a/drivers/mempool/dpaa/Makefile
+++ b/drivers/mempool/dpaa/Makefile
@@ -19,9 +19,6 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
# versioning export map
EXPORT_MAP := rte_mempool_dpaa_version.map
-# Lbrary version
-LIBABIVER := 1
-
# depends on dpaa bus which uses experimental API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
index 60bf50b..9eebaf7 100644
--- a/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
+++ b/drivers/mempool/dpaa/rte_mempool_dpaa_version.map
@@ -1,4 +1,4 @@
-DPDK_17.11 {
+DPDK_20.0 {
global:
rte_dpaa_bpid_info;
diff --git a/drivers/mempool/dpaa2/Makefile b/drivers/mempool/dpaa2/Makefile
index bdb9410..52565be 100644
--- a/drivers/mempool/dpaa2/Makefile
+++ b/drivers/mempool/dpaa2/Makefile
@@ -18,9 +18,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/qbman/include
# versioning export map
EXPORT_MAP := rte_mempool_dpaa2_version.map
-# Lbrary version
-LIBABIVER := 2
-
# depends on fslmc bus which uses experimental API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
index b5084c1..48887be 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016 NXP
+ * Copyright 2016-2019 NXP
*
*/
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
index 9369461..fa0f228 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016 NXP
+ * Copyright 2016-2019 NXP
*
*/
diff --git a/drivers/mempool/dpaa2/meson.build b/drivers/mempool/dpaa2/meson.build
index 3d25ba0..d79fc31 100644
--- a/drivers/mempool/dpaa2/meson.build
+++ b/drivers/mempool/dpaa2/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
index b45e7a9..cd4bc88 100644
--- a/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
+++ b/drivers/mempool/dpaa2/rte_mempool_dpaa2_version.map
@@ -1,16 +1,10 @@
-DPDK_17.05 {
+DPDK_20.0 {
global:
rte_dpaa2_bpid_info;
rte_dpaa2_mbuf_alloc_bulk;
-
- local: *;
-};
-
-DPDK_18.05 {
- global:
-
rte_dpaa2_mbuf_from_buf_addr;
rte_dpaa2_mbuf_pool_bpid;
-} DPDK_17.05;
+ local: *;
+};
diff --git a/drivers/mempool/octeontx/Makefile b/drivers/mempool/octeontx/Makefile
index 25efc5c..ee54c66 100644
--- a/drivers/mempool/octeontx/Makefile
+++ b/drivers/mempool/octeontx/Makefile
@@ -15,8 +15,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
EXPORT_MAP := rte_mempool_octeontx_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/mempool/octeontx/octeontx_fpavf.c b/drivers/mempool/octeontx/octeontx_fpavf.c
index baabc01..c97267d 100644
--- a/drivers/mempool/octeontx/octeontx_fpavf.c
+++ b/drivers/mempool/octeontx/octeontx_fpavf.c
@@ -119,20 +119,22 @@ RTE_INIT(otx_pool_init_log)
static int
octeontx_fpa_gpool_alloc(unsigned int object_size)
{
+ uint16_t global_domain = octeontx_get_global_domain();
struct fpavf_res *res = NULL;
- uint16_t gpool;
unsigned int sz128;
+ int i;
sz128 = FPA_OBJSZ_2_CACHE_LINE(object_size);
- for (gpool = 0; gpool < FPA_VF_MAX; gpool++) {
+ for (i = 0; i < FPA_VF_MAX; i++) {
/* Skip VF that is not mapped Or _inuse */
- if ((fpadev.pool[gpool].bar0 == NULL) ||
- (fpadev.pool[gpool].is_inuse == true))
+ if ((fpadev.pool[i].bar0 == NULL) ||
+ (fpadev.pool[i].is_inuse == true) ||
+ (fpadev.pool[i].domain_id != global_domain))
continue;
- res = &fpadev.pool[gpool];
+ res = &fpadev.pool[i];
RTE_ASSERT(res->domain_id != (uint16_t)~0);
RTE_ASSERT(res->vf_id != (uint16_t)~0);
@@ -140,15 +142,34 @@ octeontx_fpa_gpool_alloc(unsigned int object_size)
if (res->sz128 == 0) {
res->sz128 = sz128;
+ fpavf_log_dbg("gpool %d blk_sz %d\n", res->vf_id,
+ sz128);
- fpavf_log_dbg("gpool %d blk_sz %d\n", gpool, sz128);
- return gpool;
+ return res->vf_id;
}
}
return -ENOSPC;
}
+static __rte_always_inline struct fpavf_res *
+octeontx_get_fpavf(uint16_t gpool)
+{
+ uint16_t global_domain = octeontx_get_global_domain();
+ int i;
+
+ for (i = 0; i < FPA_VF_MAX; i++) {
+ if (fpadev.pool[i].domain_id != global_domain)
+ continue;
+ if (fpadev.pool[i].vf_id != gpool)
+ continue;
+
+ return &fpadev.pool[i];
+ }
+
+ return NULL;
+}
+
/* lock is taken by caller */
static __rte_always_inline uintptr_t
octeontx_fpa_gpool2handle(uint16_t gpool)
@@ -156,8 +177,10 @@ octeontx_fpa_gpool2handle(uint16_t gpool)
struct fpavf_res *res = NULL;
RTE_ASSERT(gpool < FPA_VF_MAX);
+ res = octeontx_get_fpavf(gpool);
+ if (res == NULL)
+ return 0;
- res = &fpadev.pool[gpool];
return (uintptr_t)res->bar0 | gpool;
}
@@ -182,7 +205,7 @@ octeontx_fpa_handle_valid(uintptr_t handle)
continue;
/* validate gpool */
- if (gpool != i)
+ if (gpool != fpadev.pool[i].vf_id)
return false;
res = &fpadev.pool[i];
@@ -212,7 +235,10 @@ octeontx_fpapf_pool_setup(unsigned int gpool, unsigned int buf_size,
struct octeontx_mbox_fpa_cfg cfg;
int ret = -1;
- fpa = &fpadev.pool[gpool];
+ fpa = octeontx_get_fpavf(gpool);
+ if (fpa == NULL)
+ return -EINVAL;
+
memsz = FPA_ROUND_UP(max_buf_count / fpa->stack_ln_ptr, FPA_LN_SIZE) *
FPA_LN_SIZE;
@@ -278,7 +304,11 @@ octeontx_fpapf_pool_destroy(unsigned int gpool_index)
struct fpavf_res *fpa = NULL;
int ret = -1;
- fpa = &fpadev.pool[gpool_index];
+ fpa = octeontx_get_fpavf(gpool_index);
+ if (fpa == NULL) {
+ ret = -EINVAL;
+ goto err;
+ }
hdr.coproc = FPA_COPROC;
hdr.msg = FPA_CONFIGSET;
@@ -422,6 +452,7 @@ err:
static __rte_always_inline int
octeontx_fpavf_free(unsigned int gpool)
{
+ struct fpavf_res *res = octeontx_get_fpavf(gpool);
int ret = 0;
if (gpool >= FPA_MAX_POOL) {
@@ -430,7 +461,8 @@ octeontx_fpavf_free(unsigned int gpool)
}
/* Pool is free */
- fpadev.pool[gpool].is_inuse = false;
+ if (res != NULL)
+ res->is_inuse = false;
err:
return ret;
@@ -439,8 +471,10 @@ err:
static __rte_always_inline int
octeontx_gpool_free(uint16_t gpool)
{
- if (fpadev.pool[gpool].sz128 != 0) {
- fpadev.pool[gpool].sz128 = 0;
+ struct fpavf_res *res = octeontx_get_fpavf(gpool);
+
+ if (res && res->sz128 != 0) {
+ res->sz128 = 0;
return 0;
}
return -EINVAL;
@@ -460,8 +494,8 @@ octeontx_fpa_bufpool_block_size(uintptr_t handle)
/* get the gpool */
gpool = octeontx_fpa_bufpool_gpool(handle);
- res = &fpadev.pool[gpool];
- return FPA_CACHE_LINE_2_OBJSZ(res->sz128);
+ res = octeontx_get_fpavf(gpool);
+ return res ? FPA_CACHE_LINE_2_OBJSZ(res->sz128) : 0;
}
int
@@ -507,6 +541,7 @@ octeontx_fpa_bufpool_create(unsigned int object_size, unsigned int object_count,
RTE_SET_USED(node_id);
RTE_BUILD_BUG_ON(sizeof(struct rte_mbuf) > OCTEONTX_FPAVF_BUF_OFFSET);
+ octeontx_mbox_init();
object_size = RTE_CACHE_LINE_ROUNDUP(object_size);
if (object_size > FPA_MAX_OBJ_SIZE) {
errno = EINVAL;
@@ -721,6 +756,7 @@ octeontx_fpavf_identify(void *bar0)
uint16_t domain_id;
uint16_t vf_id;
uint64_t stack_ln_ptr;
+ static uint16_t vf_idx;
val = fpavf_read64((void *)((uintptr_t)bar0 +
FPA_VF_VHAURA_CNT_THRESHOLD(0)));
@@ -730,23 +766,18 @@ octeontx_fpavf_identify(void *bar0)
stack_ln_ptr = fpavf_read64((void *)((uintptr_t)bar0 +
FPA_VF_VHPOOL_THRESHOLD(0)));
- if (vf_id >= FPA_VF_MAX) {
+ if (vf_idx >= FPA_VF_MAX) {
fpavf_log_err("vf_id(%d) greater than max vf (32)\n", vf_id);
- return -1;
- }
-
- if (fpadev.pool[vf_id].is_inuse) {
- fpavf_log_err("vf_id %d is_inuse\n", vf_id);
- return -1;
+ return -E2BIG;
}
- fpadev.pool[vf_id].domain_id = domain_id;
- fpadev.pool[vf_id].vf_id = vf_id;
- fpadev.pool[vf_id].bar0 = bar0;
- fpadev.pool[vf_id].stack_ln_ptr = stack_ln_ptr;
+ fpadev.pool[vf_idx].domain_id = domain_id;
+ fpadev.pool[vf_idx].vf_id = vf_id;
+ fpadev.pool[vf_idx].bar0 = bar0;
+ fpadev.pool[vf_idx].stack_ln_ptr = stack_ln_ptr;
/* SUCCESS */
- return vf_id;
+ return vf_idx++;
}
/* FPAVF pcie device aka mempool probe */
diff --git a/drivers/mempool/octeontx/rte_mempool_octeontx_version.map b/drivers/mempool/octeontx/rte_mempool_octeontx_version.map
index a753031..f9f17e4 100644
--- a/drivers/mempool/octeontx/rte_mempool_octeontx_version.map
+++ b/drivers/mempool/octeontx/rte_mempool_octeontx_version.map
@@ -1,3 +1,3 @@
-DPDK_17.11 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/mempool/octeontx2/Makefile b/drivers/mempool/octeontx2/Makefile
index 4961a4a..337babf 100644
--- a/drivers/mempool/octeontx2/Makefile
+++ b/drivers/mempool/octeontx2/Makefile
@@ -27,8 +27,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
EXPORT_MAP := rte_mempool_octeontx2_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
index d703368..d4f81ae 100644
--- a/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
+++ b/drivers/mempool/octeontx2/rte_mempool_octeontx2_version.map
@@ -1,8 +1,8 @@
-DPDK_19.08 {
+DPDK_20.0 {
global:
- otx2_npa_lf_init;
otx2_npa_lf_fini;
+ otx2_npa_lf_init;
local: *;
};
diff --git a/drivers/mempool/ring/Makefile b/drivers/mempool/ring/Makefile
index ddab522..8624502 100644
--- a/drivers/mempool/ring/Makefile
+++ b/drivers/mempool/ring/Makefile
@@ -14,8 +14,6 @@ LDLIBS += -lrte_eal -lrte_mempool -lrte_ring
EXPORT_MAP := rte_mempool_ring_version.map
-LIBABIVER := 1
-
SRCS-$(CONFIG_RTE_DRIVER_MEMPOOL_RING) += rte_mempool_ring.c
include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/drivers/mempool/ring/rte_mempool_ring_version.map b/drivers/mempool/ring/rte_mempool_ring_version.map
index 8591cc0..f9f17e4 100644
--- a/drivers/mempool/ring/rte_mempool_ring_version.map
+++ b/drivers/mempool/ring/rte_mempool_ring_version.map
@@ -1,4 +1,3 @@
-DPDK_17.05 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/mempool/stack/Makefile b/drivers/mempool/stack/Makefile
index 1681a62..97c3dab 100644
--- a/drivers/mempool/stack/Makefile
+++ b/drivers/mempool/stack/Makefile
@@ -18,8 +18,6 @@ LDLIBS += -lrte_eal -lrte_mempool -lrte_stack
EXPORT_MAP := rte_mempool_stack_version.map
-LIBABIVER := 1
-
SRCS-$(CONFIG_RTE_DRIVER_MEMPOOL_STACK) += rte_mempool_stack.c
include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/drivers/mempool/stack/rte_mempool_stack_version.map b/drivers/mempool/stack/rte_mempool_stack_version.map
index 8591cc0..f9f17e4 100644
--- a/drivers/mempool/stack/rte_mempool_stack_version.map
+++ b/drivers/mempool/stack/rte_mempool_stack_version.map
@@ -1,4 +1,3 @@
-DPDK_17.05 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/meson.build b/drivers/meson.build
index b7fdfb7..32d68aa 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -9,8 +9,8 @@ endif
dpdk_driver_classes = ['common',
'bus',
'mempool', # depends on common and bus.
- 'raw', # depends on common and bus.
- 'net', # depends on common, bus, mempool and raw.
+ 'net', # depends on common, bus, mempool
+ 'raw', # depends on common, bus and net.
'crypto', # depends on common, bus and mempool (net in future).
'compress', # depends on common, bus, mempool.
'event', # depends on common, bus, mempool and net.
@@ -41,7 +41,6 @@ foreach class:dpdk_driver_classes
build = true # set to false to disable, e.g. missing deps
reason = '<unknown reason>' # set if build == false to explain
name = drv
- version = 1
allow_experimental_apis = false
sources = []
objs = []
@@ -124,12 +123,19 @@ foreach class:dpdk_driver_classes
output: out_filename,
depends: [pmdinfogen, tmp_lib])
- if get_option('per_library_versions')
- lib_version = '@0@.1'.format(version)
- so_version = '@0@'.format(version)
+ version_map = '@0@/@1@/@2@_version.map'.format(
+ meson.current_source_dir(),
+ drv_path, lib_name)
+
+ is_experimental = run_command(is_experimental_cmd,
+ files(version_map)).returncode()
+
+ if is_experimental != 0
+ lib_version = experimental_abi_version
+ so_version = experimental_abi_version
else
- lib_version = major_version
- so_version = major_version
+ lib_version = abi_version
+ so_version = abi_version
endif
# now build the static driver
diff --git a/drivers/net/af_packet/Makefile b/drivers/net/af_packet/Makefile
index 39a1e0d..91dbf0a 100644
--- a/drivers/net/af_packet/Makefile
+++ b/drivers/net/af_packet/Makefile
@@ -13,8 +13,6 @@ LIB = librte_pmd_af_packet.a
EXPORT_MAP := rte_pmd_af_packet_version.map
-LIBABIVER := 1
-
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
diff --git a/drivers/net/af_packet/rte_pmd_af_packet_version.map b/drivers/net/af_packet/rte_pmd_af_packet_version.map
index ef35398..f9f17e4 100644
--- a/drivers/net/af_packet/rte_pmd_af_packet_version.map
+++ b/drivers/net/af_packet/rte_pmd_af_packet_version.map
@@ -1,4 +1,3 @@
-DPDK_2.0 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/af_xdp/Makefile b/drivers/net/af_xdp/Makefile
index eeba6b6..55db608 100644
--- a/drivers/net/af_xdp/Makefile
+++ b/drivers/net/af_xdp/Makefile
@@ -10,8 +10,6 @@ LIB = librte_pmd_af_xdp.a
EXPORT_MAP := rte_pmd_af_xdp_version.map
-LIBABIVER := 1
-
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
diff --git a/drivers/net/af_xdp/rte_pmd_af_xdp_version.map b/drivers/net/af_xdp/rte_pmd_af_xdp_version.map
index c6db030..f9f17e4 100644
--- a/drivers/net/af_xdp/rte_pmd_af_xdp_version.map
+++ b/drivers/net/af_xdp/rte_pmd_af_xdp_version.map
@@ -1,3 +1,3 @@
-DPDK_19.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/ark/Makefile b/drivers/net/ark/Makefile
index 34d341c..c02080b 100644
--- a/drivers/net/ark/Makefile
+++ b/drivers/net/ark/Makefile
@@ -13,8 +13,6 @@ CFLAGS += $(WERROR_FLAGS) -Werror
EXPORT_MAP := rte_pmd_ark_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/net/ark/rte_pmd_ark_version.map b/drivers/net/ark/rte_pmd_ark_version.map
index 1062e04..f9f17e4 100644
--- a/drivers/net/ark/rte_pmd_ark_version.map
+++ b/drivers/net/ark/rte_pmd_ark_version.map
@@ -1,4 +1,3 @@
-DPDK_17.05 {
- local: *;
-
+DPDK_20.0 {
+ local: *;
};
diff --git a/drivers/net/atlantic/Makefile b/drivers/net/atlantic/Makefile
index fc12e6a..016e369 100644
--- a/drivers/net/atlantic/Makefile
+++ b/drivers/net/atlantic/Makefile
@@ -14,8 +14,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
EXPORT_MAP := rte_pmd_atlantic_version.map
-LIBABIVER := 1
-
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_ethdev -lrte_net
LDLIBS += -lrte_bus_pci
diff --git a/drivers/net/atlantic/rte_pmd_atlantic_version.map b/drivers/net/atlantic/rte_pmd_atlantic_version.map
index b16faa9..9b04838 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic_version.map
+++ b/drivers/net/atlantic/rte_pmd_atlantic_version.map
@@ -1,5 +1,4 @@
-DPDK_18.11 {
-
+DPDK_20.0 {
local: *;
};
@@ -13,4 +12,3 @@ EXPERIMENTAL {
rte_pmd_atl_macsec_select_txsa;
rte_pmd_atl_macsec_select_rxsa;
};
-
diff --git a/drivers/net/avp/Makefile b/drivers/net/avp/Makefile
index a753765..8c12d3b 100644
--- a/drivers/net/avp/Makefile
+++ b/drivers/net/avp/Makefile
@@ -17,8 +17,6 @@ LDLIBS += -lrte_bus_pci
EXPORT_MAP := rte_pmd_avp_version.map
-LIBABIVER := 1
-
# install public header files to enable compilation of the hypervisor level
# dpdk application
SYMLINK-$(CONFIG_RTE_LIBRTE_AVP_PMD)-include += rte_avp_common.h
diff --git a/drivers/net/avp/rte_pmd_avp_version.map b/drivers/net/avp/rte_pmd_avp_version.map
index 5352e7e..f9f17e4 100644
--- a/drivers/net/avp/rte_pmd_avp_version.map
+++ b/drivers/net/avp/rte_pmd_avp_version.map
@@ -1,3 +1,3 @@
-DPDK_17.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/axgbe/Makefile b/drivers/net/axgbe/Makefile
index bcdcd54..0097a93 100644
--- a/drivers/net/axgbe/Makefile
+++ b/drivers/net/axgbe/Makefile
@@ -14,8 +14,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
EXPORT_MAP := rte_pmd_axgbe_version.map
-LIBABIVER := 1
-
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool
LDLIBS += -lrte_pci -lrte_bus_pci
LDLIBS += -lrte_ethdev -lrte_net
diff --git a/drivers/net/axgbe/rte_pmd_axgbe_version.map b/drivers/net/axgbe/rte_pmd_axgbe_version.map
index de8e412..f9f17e4 100644
--- a/drivers/net/axgbe/rte_pmd_axgbe_version.map
+++ b/drivers/net/axgbe/rte_pmd_axgbe_version.map
@@ -1,3 +1,3 @@
-DPDK_18.05 {
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/bnx2x/Makefile b/drivers/net/bnx2x/Makefile
index adead9d..5f6c39e 100644
--- a/drivers/net/bnx2x/Makefile
+++ b/drivers/net/bnx2x/Makefile
@@ -20,8 +20,6 @@ LDLIBS += -lrte_bus_pci
EXPORT_MAP := rte_pmd_bnx2x_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/net/bnx2x/rte_pmd_bnx2x_version.map b/drivers/net/bnx2x/rte_pmd_bnx2x_version.map
index bd8138a..f9f17e4 100644
--- a/drivers/net/bnx2x/rte_pmd_bnx2x_version.map
+++ b/drivers/net/bnx2x/rte_pmd_bnx2x_version.map
@@ -1,4 +1,3 @@
-DPDK_2.1 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/bnxt/Makefile b/drivers/net/bnxt/Makefile
index 21a5650..b77532b 100644
--- a/drivers/net/bnxt/Makefile
+++ b/drivers/net/bnxt/Makefile
@@ -13,8 +13,6 @@ LIB = librte_pmd_bnxt.a
EXPORT_MAP := rte_pmd_bnxt_version.map
-LIBABIVER := 2
-
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 06033e3..c70b072 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -758,6 +758,7 @@ bnxt_receive_function(__rte_unused struct rte_eth_dev *eth_dev)
DEV_RX_OFFLOAD_UDP_CKSUM |
DEV_RX_OFFLOAD_TCP_CKSUM |
DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |
+ DEV_RX_OFFLOAD_RSS_HASH |
DEV_RX_OFFLOAD_VLAN_FILTER))) {
PMD_DRV_LOG(INFO, "Using vector mode receive for port %d\n",
eth_dev->data->port_id);
@@ -1270,7 +1271,7 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev,
{
struct bnxt *bp = eth_dev->data->dev_private;
struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf;
- struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
+ struct bnxt_vnic_info *vnic = BNXT_GET_DEFAULT_VNIC(bp);
uint16_t tbl_size = bnxt_rss_hash_tbl_size(bp);
uint16_t idx, sft;
int i, rc;
@@ -1327,7 +1328,7 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev,
uint16_t reta_size)
{
struct bnxt *bp = eth_dev->data->dev_private;
- struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
+ struct bnxt_vnic_info *vnic = BNXT_GET_DEFAULT_VNIC(bp);
uint16_t tbl_size = bnxt_rss_hash_tbl_size(bp);
uint16_t idx, sft, i;
int rc;
@@ -1401,7 +1402,7 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,
memcpy(&bp->rss_conf, rss_conf, sizeof(*rss_conf));
/* Update the default RSS VNIC(s) */
- vnic = &bp->vnic_info[0];
+ vnic = BNXT_GET_DEFAULT_VNIC(bp);
vnic->hash_type = bnxt_rte_to_hwrm_hash_types(rss_conf->rss_hf);
/*
@@ -1427,7 +1428,7 @@ static int bnxt_rss_hash_conf_get_op(struct rte_eth_dev *eth_dev,
struct rte_eth_rss_conf *rss_conf)
{
struct bnxt *bp = eth_dev->data->dev_private;
- struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
+ struct bnxt_vnic_info *vnic = BNXT_GET_DEFAULT_VNIC(bp);
int len, rc;
uint32_t hash_types;
@@ -1963,7 +1964,7 @@ bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev,
{
struct bnxt *bp = dev->data->dev_private;
/* Default Filter is tied to VNIC 0 */
- struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
+ struct bnxt_vnic_info *vnic = BNXT_GET_DEFAULT_VNIC(bp);
struct bnxt_filter_info *filter;
int rc;
@@ -2377,7 +2378,7 @@ bnxt_match_and_validate_ether_filter(struct bnxt *bp,
goto exit;
}
- vnic0 = &bp->vnic_info[0];
+ vnic0 = BNXT_GET_DEFAULT_VNIC(bp);
vnic = &bp->vnic_info[efilter->queue];
if (vnic == NULL) {
PMD_DRV_LOG(ERR, "Invalid queue %d\n", efilter->queue);
@@ -2436,7 +2437,7 @@ bnxt_ethertype_filter(struct rte_eth_dev *dev,
return -EINVAL;
}
- vnic0 = &bp->vnic_info[0];
+ vnic0 = BNXT_GET_DEFAULT_VNIC(bp);
vnic = &bp->vnic_info[efilter->queue];
switch (filter_op) {
@@ -2651,7 +2652,7 @@ bnxt_cfg_ntuple_filter(struct bnxt *bp,
goto free_filter;
vnic = &bp->vnic_info[nfilter->queue];
- vnic0 = &bp->vnic_info[0];
+ vnic0 = BNXT_GET_DEFAULT_VNIC(bp);
filter1 = STAILQ_FIRST(&vnic0->filter);
if (filter1 == NULL) {
ret = -EINVAL;
@@ -2944,7 +2945,7 @@ bnxt_parse_fdir_filter(struct bnxt *bp,
return -EINVAL;
}
- vnic0 = &bp->vnic_info[0];
+ vnic0 = BNXT_GET_DEFAULT_VNIC(bp);
vnic = &bp->vnic_info[fdir->action.rx_queue];
if (vnic == NULL) {
PMD_DRV_LOG(ERR, "Invalid queue %d\n", fdir->action.rx_queue);
@@ -4027,49 +4028,60 @@ static void bnxt_cancel_fw_health_check(struct bnxt *bp)
bp->flags &= ~BNXT_FLAG_FW_HEALTH_CHECK_SCHEDULED;
}
-static bool bnxt_vf_pciid(uint16_t id)
+static bool bnxt_vf_pciid(uint16_t device_id)
{
- if (id == BROADCOM_DEV_ID_57304_VF ||
- id == BROADCOM_DEV_ID_57406_VF ||
- id == BROADCOM_DEV_ID_5731X_VF ||
- id == BROADCOM_DEV_ID_5741X_VF ||
- id == BROADCOM_DEV_ID_57414_VF ||
- id == BROADCOM_DEV_ID_STRATUS_NIC_VF1 ||
- id == BROADCOM_DEV_ID_STRATUS_NIC_VF2 ||
- id == BROADCOM_DEV_ID_58802_VF ||
- id == BROADCOM_DEV_ID_57500_VF1 ||
- id == BROADCOM_DEV_ID_57500_VF2)
+ switch (device_id) {
+ case BROADCOM_DEV_ID_57304_VF:
+ case BROADCOM_DEV_ID_57406_VF:
+ case BROADCOM_DEV_ID_5731X_VF:
+ case BROADCOM_DEV_ID_5741X_VF:
+ case BROADCOM_DEV_ID_57414_VF:
+ case BROADCOM_DEV_ID_STRATUS_NIC_VF1:
+ case BROADCOM_DEV_ID_STRATUS_NIC_VF2:
+ case BROADCOM_DEV_ID_58802_VF:
+ case BROADCOM_DEV_ID_57500_VF1:
+ case BROADCOM_DEV_ID_57500_VF2:
+ /* FALLTHROUGH */
return true;
- return false;
+ default:
+ return false;
+ }
}
-static bool bnxt_thor_device(uint16_t id)
+static bool bnxt_thor_device(uint16_t device_id)
{
- if (id == BROADCOM_DEV_ID_57508 ||
- id == BROADCOM_DEV_ID_57504 ||
- id == BROADCOM_DEV_ID_57502 ||
- id == BROADCOM_DEV_ID_57508_MF1 ||
- id == BROADCOM_DEV_ID_57504_MF1 ||
- id == BROADCOM_DEV_ID_57502_MF1 ||
- id == BROADCOM_DEV_ID_57508_MF2 ||
- id == BROADCOM_DEV_ID_57504_MF2 ||
- id == BROADCOM_DEV_ID_57502_MF2 ||
- id == BROADCOM_DEV_ID_57500_VF1 ||
- id == BROADCOM_DEV_ID_57500_VF2)
+ switch (device_id) {
+ case BROADCOM_DEV_ID_57508:
+ case BROADCOM_DEV_ID_57504:
+ case BROADCOM_DEV_ID_57502:
+ case BROADCOM_DEV_ID_57508_MF1:
+ case BROADCOM_DEV_ID_57504_MF1:
+ case BROADCOM_DEV_ID_57502_MF1:
+ case BROADCOM_DEV_ID_57508_MF2:
+ case BROADCOM_DEV_ID_57504_MF2:
+ case BROADCOM_DEV_ID_57502_MF2:
+ case BROADCOM_DEV_ID_57500_VF1:
+ case BROADCOM_DEV_ID_57500_VF2:
+ /* FALLTHROUGH */
return true;
-
- return false;
+ default:
+ return false;
+ }
}
bool bnxt_stratus_device(struct bnxt *bp)
{
- uint16_t id = bp->pdev->id.device_id;
+ uint16_t device_id = bp->pdev->id.device_id;
- if (id == BROADCOM_DEV_ID_STRATUS_NIC ||
- id == BROADCOM_DEV_ID_STRATUS_NIC_VF1 ||
- id == BROADCOM_DEV_ID_STRATUS_NIC_VF2)
+ switch (device_id) {
+ case BROADCOM_DEV_ID_STRATUS_NIC:
+ case BROADCOM_DEV_ID_STRATUS_NIC_VF1:
+ case BROADCOM_DEV_ID_STRATUS_NIC_VF2:
+ /* FALLTHROUGH */
return true;
- return false;
+ default:
+ return false;
+ }
}
static int bnxt_init_board(struct rte_eth_dev *eth_dev)
@@ -4582,10 +4594,6 @@ static int bnxt_init_fw(struct bnxt *bp)
if (rc)
bp->flags &= ~BNXT_FLAG_FW_CAP_ERROR_RECOVERY;
- if (mtu >= RTE_ETHER_MIN_MTU && mtu <= BNXT_MAX_MTU &&
- mtu != bp->eth_dev->data->mtu)
- bp->eth_dev->data->mtu = mtu;
-
bnxt_hwrm_port_led_qcaps(bp);
return 0;
diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c
index 5af5714..76e9584 100644
--- a/drivers/net/bnxt/bnxt_flow.c
+++ b/drivers/net/bnxt/bnxt_flow.c
@@ -177,14 +177,6 @@ bnxt_validate_and_parse_flow_type(struct bnxt *bp,
return -rte_errno;
}
- if (!item->spec || !item->mask) {
- rte_flow_error_set(error, EINVAL,
- RTE_FLOW_ERROR_TYPE_ITEM,
- item,
- "spec/mask is NULL");
- return -rte_errno;
- }
-
switch (item->type) {
case RTE_FLOW_ITEM_TYPE_ANY:
inner =
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 2cba007..b1f908e 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -692,7 +692,12 @@ int bnxt_hwrm_func_qcaps(struct bnxt *bp)
bp->flags |= BNXT_FLAG_NEW_RM;
}
- return rc;
+ /* On older FW,
+ * bnxt_hwrm_func_resc_qcaps can fail and cause init failure.
+ * But the error can be ignored. Return success.
+ */
+
+ return 0;
}
/* VNIC cap covers capability of all VNICs. So no need to pass vnic_id */
@@ -901,7 +906,7 @@ int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp)
rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
- HWRM_CHECK_RESULT();
+ HWRM_CHECK_RESULT_SILENT();
if (BNXT_VF(bp)) {
bp->max_rsscos_ctx = rte_le_to_cpu_16(resp->max_rsscos_ctx);
@@ -2973,8 +2978,7 @@ static int bnxt_hwrm_pf_func_cfg(struct bnxt *bp, int tx_rings)
}
req.flags = rte_cpu_to_le_32(bp->pf.func_cfg_flags);
- req.mtu = rte_cpu_to_le_16(RTE_MIN(bp->eth_dev->data->mtu,
- BNXT_MAX_MTU)); //FW adds hdr sizes
+ req.mtu = rte_cpu_to_le_16(BNXT_MAX_MTU);
req.mru = rte_cpu_to_le_16(BNXT_VNIC_MRU(bp->eth_dev->data->mtu));
req.num_rsscos_ctxs = rte_cpu_to_le_16(bp->max_rsscos_ctx);
req.num_stat_ctxs = rte_cpu_to_le_16(bp->max_stat_ctx);
@@ -4188,7 +4192,6 @@ int bnxt_hwrm_clear_em_filter(struct bnxt *bp, struct bnxt_filter_info *filter)
if (filter->fw_em_filter_id == UINT64_MAX)
return 0;
- PMD_DRV_LOG(ERR, "Clear EM filter\n");
HWRM_PREP(req, CFA_EM_FLOW_FREE, BNXT_USE_KONG(bp));
req.em_filter_id = rte_cpu_to_le_64(filter->fw_em_filter_id);
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index 94f105d..457ebed 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -104,6 +104,7 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
pools = bp->rx_cosq_cnt ? bp->rx_cosq_cnt : pools;
}
+ pools = RTE_MIN(pools, bp->rx_cp_nr_rings);
nb_q_per_grp = bp->rx_cp_nr_rings / pools;
bp->rx_num_qs_per_vnic = nb_q_per_grp;
PMD_DRV_LOG(DEBUG, "pools = %u nb_q_per_grp = %u\n",
diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c
index 52a4bad..104342e 100644
--- a/drivers/net/bnxt/bnxt_vnic.c
+++ b/drivers/net/bnxt/bnxt_vnic.c
@@ -75,12 +75,13 @@ struct bnxt_vnic_info *bnxt_alloc_vnic(struct bnxt *bp)
void bnxt_free_all_vnics(struct bnxt *bp)
{
- struct bnxt_vnic_info *temp;
+ struct bnxt_vnic_info *vnic;
unsigned int i;
- for (i = 0; i < bp->nr_vnics; i++) {
- temp = &bp->vnic_info[i];
- STAILQ_INSERT_TAIL(&bp->free_vnic_list, temp, next);
+ for (i = 0; i < bp->max_vnics; i++) {
+ vnic = &bp->vnic_info[i];
+ STAILQ_INSERT_TAIL(&bp->free_vnic_list, vnic, next);
+ vnic->rx_queue_cnt = 0;
}
}
diff --git a/drivers/net/bnxt/meson.build b/drivers/net/bnxt/meson.build
index 4dda28f..0c311d2 100644
--- a/drivers/net/bnxt/meson.build
+++ b/drivers/net/bnxt/meson.build
@@ -2,7 +2,6 @@
# Copyright(c) 2018 Intel Corporation
install_headers('rte_pmd_bnxt.h')
-version = 2
sources = files('bnxt_cpr.c',
'bnxt_ethdev.c',
'bnxt_filter.c',
diff --git a/drivers/net/bnxt/rte_pmd_bnxt_version.map b/drivers/net/bnxt/rte_pmd_bnxt_version.map
index 4750d40..bb52562 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt_version.map
+++ b/drivers/net/bnxt/rte_pmd_bnxt_version.map
@@ -1,4 +1,4 @@
-DPDK_17.08 {
+DPDK_20.0 {
global:
rte_pmd_bnxt_get_vf_rx_status;
@@ -10,13 +10,13 @@ DPDK_17.08 {
rte_pmd_bnxt_set_tx_loopback;
rte_pmd_bnxt_set_vf_mac_addr;
rte_pmd_bnxt_set_vf_mac_anti_spoof;
+ rte_pmd_bnxt_set_vf_persist_stats;
rte_pmd_bnxt_set_vf_rate_limit;
rte_pmd_bnxt_set_vf_rxmode;
rte_pmd_bnxt_set_vf_vlan_anti_spoof;
rte_pmd_bnxt_set_vf_vlan_filter;
rte_pmd_bnxt_set_vf_vlan_insert;
rte_pmd_bnxt_set_vf_vlan_stripq;
- rte_pmd_bnxt_set_vf_persist_stats;
local: *;
};
diff --git a/drivers/net/bonding/Makefile b/drivers/net/bonding/Makefile
index 26c1782..a64296d 100644
--- a/drivers/net/bonding/Makefile
+++ b/drivers/net/bonding/Makefile
@@ -18,8 +18,6 @@ LDLIBS += -lrte_bus_vdev
EXPORT_MAP := rte_pmd_bond_version.map
-LIBABIVER := 2
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/net/bonding/meson.build b/drivers/net/bonding/meson.build
index 6267210..d133375 100644
--- a/drivers/net/bonding/meson.build
+++ b/drivers/net/bonding/meson.build
@@ -2,7 +2,6 @@
# Copyright(c) 2017 Intel Corporation
name = 'bond' #, james bond :-)
-version = 2
allow_experimental_apis = true
sources = files('rte_eth_bond_api.c', 'rte_eth_bond_pmd.c', 'rte_eth_bond_flow.c',
'rte_eth_bond_args.c', 'rte_eth_bond_8023ad.c', 'rte_eth_bond_alb.c')
diff --git a/drivers/net/bonding/rte_pmd_bond_version.map b/drivers/net/bonding/rte_pmd_bond_version.map
index 00d955c..270c7d5 100644
--- a/drivers/net/bonding/rte_pmd_bond_version.map
+++ b/drivers/net/bonding/rte_pmd_bond_version.map
@@ -1,9 +1,21 @@
-DPDK_2.0 {
+DPDK_20.0 {
global:
+ rte_eth_bond_8023ad_agg_selection_get;
+ rte_eth_bond_8023ad_agg_selection_set;
+ rte_eth_bond_8023ad_conf_get;
+ rte_eth_bond_8023ad_dedicated_queues_disable;
+ rte_eth_bond_8023ad_dedicated_queues_enable;
+ rte_eth_bond_8023ad_ext_collect;
+ rte_eth_bond_8023ad_ext_collect_get;
+ rte_eth_bond_8023ad_ext_distrib;
+ rte_eth_bond_8023ad_ext_distrib_get;
+ rte_eth_bond_8023ad_ext_slowtx;
+ rte_eth_bond_8023ad_setup;
rte_eth_bond_8023ad_slave_info;
rte_eth_bond_active_slaves_get;
rte_eth_bond_create;
+ rte_eth_bond_free;
rte_eth_bond_link_monitoring_set;
rte_eth_bond_mac_address_reset;
rte_eth_bond_mac_address_set;
@@ -19,36 +31,3 @@ DPDK_2.0 {
local: *;
};
-
-DPDK_2.1 {
- global:
-
- rte_eth_bond_free;
-
-} DPDK_2.0;
-
-DPDK_16.04 {
-};
-
-DPDK_16.07 {
- global:
-
- rte_eth_bond_8023ad_ext_collect;
- rte_eth_bond_8023ad_ext_collect_get;
- rte_eth_bond_8023ad_ext_distrib;
- rte_eth_bond_8023ad_ext_distrib_get;
- rte_eth_bond_8023ad_ext_slowtx;
-
-} DPDK_16.04;
-
-DPDK_17.08 {
- global:
-
- rte_eth_bond_8023ad_dedicated_queues_enable;
- rte_eth_bond_8023ad_dedicated_queues_disable;
- rte_eth_bond_8023ad_agg_selection_get;
- rte_eth_bond_8023ad_agg_selection_set;
- rte_eth_bond_8023ad_conf_get;
- rte_eth_bond_8023ad_setup;
-
-} DPDK_16.07;
diff --git a/drivers/net/cxgbe/Makefile b/drivers/net/cxgbe/Makefile
index d809f47..79c6e1d 100644
--- a/drivers/net/cxgbe/Makefile
+++ b/drivers/net/cxgbe/Makefile
@@ -14,8 +14,6 @@ CFLAGS += $(WERROR_FLAGS)
EXPORT_MAP := rte_pmd_cxgbe_version.map
-LIBABIVER := 1
-
#
# CFLAGS for gcc/clang
#
diff --git a/drivers/net/cxgbe/rte_pmd_cxgbe_version.map b/drivers/net/cxgbe/rte_pmd_cxgbe_version.map
index bd8138a..f9f17e4 100644
--- a/drivers/net/cxgbe/rte_pmd_cxgbe_version.map
+++ b/drivers/net/cxgbe/rte_pmd_cxgbe_version.map
@@ -1,4 +1,3 @@
-DPDK_2.1 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/dpaa/Makefile b/drivers/net/dpaa/Makefile
index 395e4d9..8e049b2 100644
--- a/drivers/net/dpaa/Makefile
+++ b/drivers/net/dpaa/Makefile
@@ -25,8 +25,6 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
EXPORT_MAP := rte_pmd_dpaa_version.map
-LIBABIVER := 1
-
# depends on dpaa bus which uses experimental API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/net/dpaa/dpaa_ethdev.h b/drivers/net/dpaa/dpaa_ethdev.h
index 7e51b0e..da06f1f 100644
--- a/drivers/net/dpaa/dpaa_ethdev.h
+++ b/drivers/net/dpaa/dpaa_ethdev.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2014-2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2017 NXP
+ * Copyright 2017-2019 NXP
*
*/
#ifndef __DPAA_ETHDEV_H__
diff --git a/drivers/net/dpaa/rte_pmd_dpaa_version.map b/drivers/net/dpaa/rte_pmd_dpaa_version.map
index 8cb4500..f403a15 100644
--- a/drivers/net/dpaa/rte_pmd_dpaa_version.map
+++ b/drivers/net/dpaa/rte_pmd_dpaa_version.map
@@ -1,12 +1,9 @@
-DPDK_17.11 {
-
- local: *;
-};
-
-DPDK_18.08 {
+DPDK_20.0 {
global:
dpaa_eth_eventq_attach;
dpaa_eth_eventq_detach;
rte_pmd_dpaa_set_tx_loopback;
-} DPDK_17.11;
+
+ local: *;
+};
diff --git a/drivers/net/dpaa2/Makefile b/drivers/net/dpaa2/Makefile
index e5a2d3f..cdd9115 100644
--- a/drivers/net/dpaa2/Makefile
+++ b/drivers/net/dpaa2/Makefile
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
-# Copyright 2016 NXP
+# Copyright 2016-2019 NXP
#
include $(RTE_SDK)/mk/rte.vars.mk
@@ -24,9 +24,6 @@ CFLAGS += -I$(RTE_SDK)/drivers/mempool/dpaa2
# versioning export map
EXPORT_MAP := rte_pmd_dpaa2_version.map
-# library version
-LIBABIVER := 2
-
# depends on fslmc bus which uses experimental API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
index 47a8bda..34de0d1 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016-2018 NXP
+ * Copyright 2016-2019 NXP
*
*/
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
index 699e4c0..4dd7be1 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni_annot.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved.
- * Copyright 2016 NXP
+ * Copyright 2016,2019 NXP
*
*/
diff --git a/drivers/net/dpaa2/mc/dpdmux.c b/drivers/net/dpaa2/mc/dpdmux.c
index 7962213..63f1ec7 100644
--- a/drivers/net/dpaa2/mc/dpdmux.c
+++ b/drivers/net/dpaa2/mc/dpdmux.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*
*/
#include <fsl_mc_sys.h>
diff --git a/drivers/net/dpaa2/mc/dpni.c b/drivers/net/dpaa2/mc/dpni.c
index 0950ee0..683d7bc 100644
--- a/drivers/net/dpaa2/mc/dpni.c
+++ b/drivers/net/dpaa2/mc/dpni.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
- * Copyright 2016 NXP
+ * Copyright 2016-2019 NXP
*
*/
#include <fsl_mc_sys.h>
diff --git a/drivers/net/dpaa2/mc/fsl_dpdmux.h b/drivers/net/dpaa2/mc/fsl_dpdmux.h
index c69cb7a..accd1ef 100644
--- a/drivers/net/dpaa2/mc/fsl_dpdmux.h
+++ b/drivers/net/dpaa2/mc/fsl_dpdmux.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*
*/
#ifndef __FSL_DPDMUX_H
diff --git a/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h b/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h
index a36349f..a60b2eb 100644
--- a/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h
+++ b/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*
*/
#ifndef _FSL_DPDMUX_CMD_H
diff --git a/drivers/net/dpaa2/mc/fsl_dpni.h b/drivers/net/dpaa2/mc/fsl_dpni.h
index 51b39bd..598911d 100644
--- a/drivers/net/dpaa2/mc/fsl_dpni.h
+++ b/drivers/net/dpaa2/mc/fsl_dpni.h
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
*
* Copyright 2013-2016 Freescale Semiconductor Inc.
- * Copyright 2016-2017 NXP
+ * Copyright 2016-2019 NXP
*
*/
#ifndef __FSL_DPNI_H
diff --git a/drivers/net/dpaa2/meson.build b/drivers/net/dpaa2/meson.build
index 1a4ab21..571cdb7 100644
--- a/drivers/net/dpaa2/meson.build
+++ b/drivers/net/dpaa2/meson.build
@@ -1,8 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
-version = 2
-
if not is_linux
build = false
reason = 'only supported on linux'
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2.h b/drivers/net/dpaa2/rte_pmd_dpaa2.h
index 7052d9d..ca7bf7d 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2.h
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2.h
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2018 NXP
+ * Copyright 2018-2019 NXP
*/
#ifndef _RTE_PMD_DPAA2_H
diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
index d1b4cdb..f2bb793 100644
--- a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
+++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map
@@ -1,15 +1,11 @@
-DPDK_17.05 {
-
- local: *;
-};
-
-DPDK_17.11 {
+DPDK_20.0 {
global:
dpaa2_eth_eventq_attach;
dpaa2_eth_eventq_detach;
-} DPDK_17.05;
+ local: *;
+};
EXPERIMENTAL {
global:
@@ -17,4 +13,4 @@ EXPERIMENTAL {
rte_pmd_dpaa2_mux_flow_create;
rte_pmd_dpaa2_set_custom_hash;
rte_pmd_dpaa2_set_timestamp;
-} DPDK_17.11;
+};
diff --git a/drivers/net/e1000/Makefile b/drivers/net/e1000/Makefile
index 0ed6276..d93a522 100644
--- a/drivers/net/e1000/Makefile
+++ b/drivers/net/e1000/Makefile
@@ -17,8 +17,6 @@ LDLIBS += -lrte_bus_pci
EXPORT_MAP := rte_pmd_e1000_version.map
-LIBABIVER := 1
-
ifeq ($(CONFIG_RTE_TOOLCHAIN_ICC),y)
#
# CFLAGS for icc
diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 9a88b50..080cbe2 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -1121,9 +1121,9 @@ eth_em_link_update(struct rte_eth_dev *dev, int wait_to_complete)
struct e1000_hw *hw =
E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
struct rte_eth_link link;
- int link_check, count;
+ int link_up, count;
- link_check = 0;
+ link_up = 0;
hw->mac.get_link_status = 1;
/* possible wait-to-complete in up to 9 seconds */
@@ -1133,31 +1133,31 @@ eth_em_link_update(struct rte_eth_dev *dev, int wait_to_complete)
case e1000_media_type_copper:
/* Do the work to read phy */
e1000_check_for_link(hw);
- link_check = !hw->mac.get_link_status;
+ link_up = !hw->mac.get_link_status;
break;
case e1000_media_type_fiber:
e1000_check_for_link(hw);
- link_check = (E1000_READ_REG(hw, E1000_STATUS) &
+ link_up = (E1000_READ_REG(hw, E1000_STATUS) &
E1000_STATUS_LU);
break;
case e1000_media_type_internal_serdes:
e1000_check_for_link(hw);
- link_check = hw->mac.serdes_has_link;
+ link_up = hw->mac.serdes_has_link;
break;
default:
break;
}
- if (link_check || wait_to_complete == 0)
+ if (link_up || wait_to_complete == 0)
break;
rte_delay_ms(EM_LINK_UPDATE_CHECK_INTERVAL);
}
memset(&link, 0, sizeof(link));
/* Now we check if a transition has happened */
- if (link_check && (link.link_status == ETH_LINK_DOWN)) {
+ if (link_up) {
uint16_t duplex, speed;
hw->mac.ops.get_link_up_info(hw, &speed, &duplex);
link.link_duplex = (duplex == FULL_DUPLEX) ?
@@ -1167,7 +1167,7 @@ eth_em_link_update(struct rte_eth_dev *dev, int wait_to_complete)
link.link_status = ETH_LINK_UP;
link.link_autoneg = !(dev->data->dev_conf.link_speeds &
ETH_LINK_SPEED_FIXED);
- } else if (!link_check && (link.link_status == ETH_LINK_UP)) {
+ } else {
link.link_speed = ETH_SPEED_NUM_NONE;
link.link_duplex = ETH_LINK_HALF_DUPLEX;
link.link_status = ETH_LINK_DOWN;
diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 2d2dc9c..a3e30db 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -891,6 +891,8 @@ eth_igb_dev_init(struct rte_eth_dev *eth_dev)
/* enable support intr */
igb_intr_enable(eth_dev);
+ eth_igb_dev_set_link_down(eth_dev);
+
/* initialize filter info */
memset(filter_info, 0,
sizeof(struct e1000_filter_info));
diff --git a/drivers/net/e1000/rte_pmd_e1000_version.map b/drivers/net/e1000/rte_pmd_e1000_version.map
index ef35398..f9f17e4 100644
--- a/drivers/net/e1000/rte_pmd_e1000_version.map
+++ b/drivers/net/e1000/rte_pmd_e1000_version.map
@@ -1,4 +1,3 @@
-DPDK_2.0 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/ena/Makefile b/drivers/net/ena/Makefile
index 8336b76..b44daa8 100644
--- a/drivers/net/ena/Makefile
+++ b/drivers/net/ena/Makefile
@@ -12,8 +12,6 @@ CFLAGS += $(WERROR_FLAGS) -O2
INCLUDES :=-I$(SRCDIR) -I$(SRCDIR)/base/ena_defs -I$(SRCDIR)/base
EXPORT_MAP := rte_pmd_ena_version.map
-LIBABIVER := 1
-
# rte_fbarray is not yet part of stable API
CFLAGS += -DALLOW_EXPERIMENTAL_API
diff --git a/drivers/net/ena/rte_pmd_ena_version.map b/drivers/net/ena/rte_pmd_ena_version.map
index 349c6e1..f9f17e4 100644
--- a/drivers/net/ena/rte_pmd_ena_version.map
+++ b/drivers/net/ena/rte_pmd_ena_version.map
@@ -1,4 +1,3 @@
-DPDK_16.04 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/enetc/Makefile b/drivers/net/enetc/Makefile
index 4498bc5..7276026 100644
--- a/drivers/net/enetc/Makefile
+++ b/drivers/net/enetc/Makefile
@@ -12,8 +12,6 @@ CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -I$(RTE_SDK)/drivers/common/dpaax
EXPORT_MAP := rte_pmd_enetc_version.map
-LIBABIVER := 1
-
SRCS-$(CONFIG_RTE_LIBRTE_ENETC_PMD) += enetc_ethdev.c
SRCS-$(CONFIG_RTE_LIBRTE_ENETC_PMD) += enetc_rxtx.c
diff --git a/drivers/net/enetc/rte_pmd_enetc_version.map b/drivers/net/enetc/rte_pmd_enetc_version.map
index 521e51f..f9f17e4 100644
--- a/drivers/net/enetc/rte_pmd_enetc_version.map
+++ b/drivers/net/enetc/rte_pmd_enetc_version.map
@@ -1,4 +1,3 @@
-DPDK_18.11 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/enic/Makefile b/drivers/net/enic/Makefile
index 4e0c83d..316088a 100644
--- a/drivers/net/enic/Makefile
+++ b/drivers/net/enic/Makefile
@@ -11,8 +11,6 @@ LIB = librte_pmd_enic.a
EXPORT_MAP := rte_pmd_enic_version.map
-LIBABIVER := 1
-
# Experimental APIs used: rte_intr_ack
CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += -I$(SRCDIR)/base/
diff --git a/drivers/net/enic/rte_pmd_enic_version.map b/drivers/net/enic/rte_pmd_enic_version.map
index ef35398..f9f17e4 100644
--- a/drivers/net/enic/rte_pmd_enic_version.map
+++ b/drivers/net/enic/rte_pmd_enic_version.map
@@ -1,4 +1,3 @@
-DPDK_2.0 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/failsafe/Makefile b/drivers/net/failsafe/Makefile
index 0d840a2..bebc905 100644
--- a/drivers/net/failsafe/Makefile
+++ b/drivers/net/failsafe/Makefile
@@ -9,8 +9,6 @@ LIB = librte_pmd_failsafe.a
EXPORT_MAP := rte_pmd_failsafe_version.map
-LIBABIVER := 1
-
# Sources are stored in SRCS-y
SRCS-$(CONFIG_RTE_LIBRTE_PMD_FAILSAFE) += failsafe.c
SRCS-$(CONFIG_RTE_LIBRTE_PMD_FAILSAFE) += failsafe_args.c
diff --git a/drivers/net/failsafe/rte_pmd_failsafe_version.map b/drivers/net/failsafe/rte_pmd_failsafe_version.map
index b6d2840..f9f17e4 100644
--- a/drivers/net/failsafe/rte_pmd_failsafe_version.map
+++ b/drivers/net/failsafe/rte_pmd_failsafe_version.map
@@ -1,4 +1,3 @@
-DPDK_17.08 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/fm10k/Makefile b/drivers/net/fm10k/Makefile
index 55e9cd5..722bf1e 100644
--- a/drivers/net/fm10k/Makefile
+++ b/drivers/net/fm10k/Makefile
@@ -14,8 +14,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API
EXPORT_MAP := rte_pmd_fm10k_version.map
-LIBABIVER := 1
-
ifeq ($(CONFIG_RTE_TOOLCHAIN_ICC),y)
#
# CFLAGS for icc
diff --git a/drivers/net/fm10k/fm10k_rxtx.c b/drivers/net/fm10k/fm10k_rxtx.c
index 5c31121..4accaa2 100644
--- a/drivers/net/fm10k/fm10k_rxtx.c
+++ b/drivers/net/fm10k/fm10k_rxtx.c
@@ -611,6 +611,8 @@ static inline void tx_xmit_pkt(struct fm10k_tx_queue *q, struct rte_mbuf *mb)
/* set vlan if requested */
if (mb->ol_flags & PKT_TX_VLAN_PKT)
q->hw_ring[q->next_free].vlan = mb->vlan_tci;
+ else
+ q->hw_ring[q->next_free].vlan = 0;
q->sw_ring[q->next_free] = mb;
q->hw_ring[q->next_free].buffer_addr =
diff --git a/drivers/net/fm10k/rte_pmd_fm10k_version.map b/drivers/net/fm10k/rte_pmd_fm10k_version.map
index ef35398..f9f17e4 100644
--- a/drivers/net/fm10k/rte_pmd_fm10k_version.map
+++ b/drivers/net/fm10k/rte_pmd_fm10k_version.map
@@ -1,4 +1,3 @@
-DPDK_2.0 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/hinic/Makefile b/drivers/net/hinic/Makefile
index b78fd8d..87fd843 100644
--- a/drivers/net/hinic/Makefile
+++ b/drivers/net/hinic/Makefile
@@ -24,8 +24,6 @@ LDLIBS += -lpthread
EXPORT_MAP := rte_pmd_hinic_version.map
-LIBABIVER := 1
-
#
# CFLAGS for 32-bits platforms
#
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index ddfe082..803a39e 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -2964,14 +2964,10 @@ static int hinic_func_init(struct rte_eth_dev *eth_dev)
/* EAL is SECONDARY and eth_dev is already created */
if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
- rc = rte_intr_callback_register(&pci_dev->intr_handle,
- hinic_dev_interrupt_handler,
- (void *)eth_dev);
- if (rc)
- PMD_DRV_LOG(ERR, "Initialize %s failed in secondary process",
- eth_dev->data->name);
+ PMD_DRV_LOG(INFO, "Initialize %s in secondary process",
+ eth_dev->data->name);
- return rc;
+ return 0;
}
nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
diff --git a/drivers/net/hinic/rte_pmd_hinic_version.map b/drivers/net/hinic/rte_pmd_hinic_version.map
index 9a61188..f9f17e4 100644
--- a/drivers/net/hinic/rte_pmd_hinic_version.map
+++ b/drivers/net/hinic/rte_pmd_hinic_version.map
@@ -1,4 +1,3 @@
-DPDK_19.08 {
-
+DPDK_20.0 {
local: *;
};
diff --git a/drivers/net/hns3/Makefile b/drivers/net/hns3/Makefile
index cbbbe04..ae0ee7e 100644
--- a/drivers/net/hns3/Makefile
+++ b/drivers/net/hns3/Makefile
@@ -23,8 +23,6 @@ LDLIBS += -lrte_bus_pci
EXPORT_MAP := rte_pmd_hns3_version.map
-LIBABIVER := 1
-
#
# all source are stored in SRCS-y
#
diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c
index 3435bce..7231571 100644
--- a/drivers/net/hns3/hns3_ethdev.c
+++ b/drivers/net/hns3/hns3_ethdev.c
@@ -282,6 +282,11 @@ hns3_add_dev_vlan_table(struct hns3_adapter *hns, uint16_t vlan_id,
struct hns3_hw *hw = &hns->hw;
struct hns3_pf *pf = &hns->pf;
+ LIST_FOREACH(vlan_entry, &pf->vlan_list, next) {
+ if (vlan_entry->vlan_id == vlan_id)
+ return;
+ }
+
vlan_entry = rte_zmalloc("hns3_vlan_tbl", sizeof(*vlan_entry), 0);
if (vlan_entry == NULL) {
hns3_err(hw, "Failed to malloc hns3 vlan table");
diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h
index 9710e45..e9a3fe4 100644
--- a/drivers/net/hns3/hns3_ethdev.h
+++ b/drivers/net/hns3/hns3_ethdev.h
@@ -43,6 +43,7 @@
#define HNS3_MAX_MTU (HNS3_MAX_FRAME_LEN - HNS3_ETH_OVERHEAD)
#define HNS3_DEFAULT_MTU 1500UL
#define HNS3_DEFAULT_FRAME_LEN (HNS3_DEFAULT_MTU + HNS3_ETH_OVERHEAD)
+#define HNS3_MIN_PKT_SIZE 60
#define HNS3_4_TCS 4
#define HNS3_8_TCS 8
diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c
index 4036749..b1736e7 100644
--- a/drivers/net/hns3/hns3_ethdev_vf.c
+++ b/drivers/net/hns3/hns3_ethdev_vf.c
@@ -1097,6 +1097,14 @@ err_init_hardware:
}
static int
+hns3vf_clear_vport_list(struct hns3_hw *hw)
+{
+ return hns3_send_mbx_msg(hw, HNS3_MBX_HANDLE_VF_TBL,
+ HNS3_MBX_VPORT_LIST_CLEAR, NULL, 0, false,
+ NULL, 0);
+}
+
+static int
hns3vf_init_vf(struct rte_eth_dev *eth_dev)
{
struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
@@ -1147,6 +1155,12 @@ hns3vf_init_vf(struct rte_eth_dev *eth_dev)
rte_eth_random_addr(hw->mac.mac_addr); /* Generate a random mac addr */
+ ret = hns3vf_clear_vport_list(hw);
+ if (ret) {
+ PMD_INIT_LOG(ERR, "Failed to clear tbl list: %d", ret);
+ goto err_get_config;
+ }
+
ret = hns3vf_init_hardware(hns);
if (ret)
goto err_get_config;
@@ -1232,6 +1246,7 @@ hns3vf_dev_stop(struct rte_eth_dev *eth_dev)
hns3_dev_release_mbufs(hns);
hw->adapter_state = HNS3_NIC_CONFIGURED;
}
+ rte_eal_alarm_cancel(hns3vf_service_handler, eth_dev);
rte_spinlock_unlock(&hw->lock);
}
@@ -1251,7 +1266,6 @@ hns3vf_dev_close(struct rte_eth_dev *eth_dev)