Merge ~arif-ali/ubuntu/+source/dpdk:ubuntu/jammy-devel-lp2067480 into ubuntu/+source/dpdk:ubuntu/jammy-devel

Proposed by Arif Ali
Status: Merged
Merged at revision: 7405bf90b95f630c59735a1c4ecdb9644c616545
Proposed branch: ~arif-ali/ubuntu/+source/dpdk:ubuntu/jammy-devel-lp2067480
Merge into: ubuntu/+source/dpdk:ubuntu/jammy-devel
Diff against target: 11874 lines (+3625/-1514)
269 files modified
.mailmap (+19/-3)
VERSION (+1/-1)
app/dumpcap/main.c (+12/-4)
app/pdump/main.c (+15/-8)
app/proc-info/main.c (+2/-1)
app/test-bbdev/test_bbdev_perf.c (+34/-34)
app/test-pmd/bpf_cmd.c (+1/-1)
app/test-pmd/cmdline.c (+286/-292)
app/test-pmd/cmdline_flow.c (+3/-12)
app/test-pmd/config.c (+9/-6)
app/test-pmd/csumonly.c (+6/-11)
app/test-pmd/ieee1588fwd.c (+12/-3)
app/test-pmd/parameters.c (+2/-2)
app/test-pmd/testpmd.c (+38/-41)
app/test-pmd/testpmd.h (+2/-1)
app/test/test_common.c (+17/-14)
app/test/test_cryptodev.c (+16/-3)
app/test/test_cryptodev_asym.c (+18/-15)
app/test/test_eal_flags.c (+3/-3)
app/test/test_event_crypto_adapter.c (+10/-14)
app/test/test_fbarray.c (+186/-21)
app/test/test_link_bonding.c (+1/-1)
app/test/test_link_bonding_rssconf.c (+0/-1)
app/test/test_power_cpufreq.c (+18/-3)
buildtools/pmdinfogen.py (+7/-6)
config/arm/arm32_armv8_linux_gcc (+1/-0)
config/arm/arm64_armada_linux_gcc (+1/-0)
config/arm/arm64_armv8_linux_clang_ubuntu (+1/-0)
config/arm/arm64_armv8_linux_gcc (+1/-0)
config/arm/arm64_bluefield_linux_gcc (+1/-0)
config/arm/arm64_centriq2400_linux_gcc (+1/-0)
config/arm/arm64_cn10k_linux_gcc (+1/-0)
config/arm/arm64_dpaa_linux_gcc (+1/-0)
config/arm/arm64_emag_linux_gcc (+1/-0)
config/arm/arm64_graviton2_linux_gcc (+1/-0)
config/arm/arm64_kunpeng920_linux_gcc (+1/-0)
config/arm/arm64_kunpeng930_linux_gcc (+1/-0)
config/arm/arm64_n1sdp_linux_gcc (+1/-0)
config/arm/arm64_n2_linux_gcc (+1/-0)
config/arm/arm64_octeontx2_linux_gcc (+1/-0)
config/arm/arm64_stingray_linux_gcc (+1/-0)
config/arm/arm64_thunderx2_linux_gcc (+1/-0)
config/arm/arm64_thunderxt88_linux_gcc (+1/-0)
config/x86/cross-mingw (+1/-0)
debian/changelog (+8/-0)
devtools/git-log-fixes.sh (+1/-1)
doc/guides/nics/features.rst (+20/-14)
doc/guides/prog_guide/img/mbuf1.svg (+1/-1)
doc/guides/prog_guide/img/mbuf2.svg (+3/-3)
doc/guides/prog_guide/mbuf_lib.rst (+4/-4)
doc/guides/rel_notes/release_21_11.rst (+639/-0)
doc/guides/sample_app_ug/l2_forward_crypto.rst (+1/-1)
doc/guides/sample_app_ug/l3_forward_power_man.rst (+3/-0)
doc/guides/testpmd_app_ug/testpmd_funcs.rst (+1/-1)
drivers/baseband/la12xx/bbdev_la12xx.c (+4/-0)
drivers/bus/dpaa/base/fman/fman.c (+27/-2)
drivers/bus/dpaa/base/fman/fman_hw.c (+5/-4)
drivers/bus/dpaa/base/qbman/process.c (+4/-3)
drivers/bus/dpaa/base/qbman/qman.c (+31/-23)
drivers/bus/dpaa/dpaa_bus.c (+4/-1)
drivers/bus/fslmc/qbman/qbman_debug.c (+32/-17)
drivers/bus/pci/linux/pci_uio.c (+4/-1)
drivers/bus/pci/linux/pci_vfio.c (+14/-14)
drivers/bus/pci/pci_common_uio.c (+29/-19)
drivers/bus/vdev/vdev.c (+1/-1)
drivers/common/cnxk/roc_irq.c (+1/-1)
drivers/common/cnxk/roc_npc.c (+26/-7)
drivers/common/cnxk/roc_platform.c (+1/-1)
drivers/common/cnxk/roc_platform.h (+2/-1)
drivers/common/dpaax/caamflib/desc/pdcp.h (+20/-0)
drivers/common/dpaax/caamflib/desc/sdap.h (+9/-1)
drivers/common/dpaax/dpaax_iova_table.c (+6/-7)
drivers/common/iavf/iavf_prototype.h (+1/-0)
drivers/common/iavf/version.map (+1/-0)
drivers/common/mlx5/mlx5_common_utils.h (+1/-1)
drivers/common/mlx5/mlx5_devx_cmds.c (+3/-3)
drivers/common/mlx5/mlx5_devx_cmds.h (+1/-0)
drivers/common/mlx5/mlx5_prm.h (+30/-3)
drivers/common/mlx5/windows/mlx5_win_defs.h (+0/-12)
drivers/compress/mlx5/mlx5_compress.c (+2/-2)
drivers/crypto/bcmfs/bcmfs_device.c (+2/-2)
drivers/crypto/cnxk/cnxk_ae.h (+21/-9)
drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c (+2/-1)
drivers/crypto/ipsec_mb/meson.build (+1/-1)
drivers/crypto/mlx5/mlx5_crypto.c (+1/-1)
drivers/crypto/openssl/rte_openssl_pmd.c (+20/-29)
drivers/dma/idxd/dpdk_idxd_cfg.py (+35/-11)
drivers/dma/idxd/idxd_pci.c (+1/-1)
drivers/event/cnxk/cnxk_eventdev.c (+1/-1)
drivers/event/octeontx/ssovf_evdev.c (+13/-3)
drivers/event/sw/iq_chunk.h (+0/-2)
drivers/event/sw/sw_evdev.c (+1/-4)
drivers/net/af_packet/rte_eth_af_packet.c (+3/-2)
drivers/net/af_xdp/rte_eth_af_xdp.c (+10/-0)
drivers/net/ark/ark_ethdev_tx.c (+15/-9)
drivers/net/axgbe/axgbe_common.h (+0/-2)
drivers/net/axgbe/axgbe_dev.c (+40/-27)
drivers/net/axgbe/axgbe_ethdev.c (+5/-0)
drivers/net/axgbe/axgbe_ethdev.h (+2/-0)
drivers/net/axgbe/axgbe_mdio.c (+38/-6)
drivers/net/axgbe/axgbe_phy_impl.c (+21/-13)
drivers/net/bnx2x/bnx2x.c (+7/-12)
drivers/net/bnx2x/bnx2x_stats.c (+0/-4)
drivers/net/bnxt/bnxt_ethdev.c (+0/-1)
drivers/net/bnxt/bnxt_txr.c (+12/-5)
drivers/net/bnxt/tf_core/tf_msg.c (+1/-1)
drivers/net/cnxk/cn10k_ethdev.c (+16/-2)
drivers/net/cnxk/cn10k_tx.h (+2/-1)
drivers/net/cnxk/cn9k_ethdev.c (+15/-2)
drivers/net/cnxk/cnxk_ethdev.c (+8/-1)
drivers/net/cnxk/cnxk_ethdev.h (+7/-0)
drivers/net/cnxk/cnxk_ethdev_ops.c (+7/-0)
drivers/net/dpaa/dpaa_ethdev.c (+4/-2)
drivers/net/dpaa/dpaa_rxtx.c (+1/-1)
drivers/net/e1000/base/e1000_base.c (+1/-1)
drivers/net/e1000/em_ethdev.c (+3/-0)
drivers/net/e1000/igb_ethdev.c (+2/-2)
drivers/net/ena/base/ena_plat_dpdk.h (+0/-6)
drivers/net/ena/ena_ethdev.c (+5/-10)
drivers/net/fm10k/fm10k_ethdev.c (+33/-6)
drivers/net/hns3/hns3_common.c (+1/-1)
drivers/net/hns3/hns3_ethdev.c (+3/-1)
drivers/net/hns3/hns3_ethdev.h (+8/-0)
drivers/net/hns3/hns3_ethdev_vf.c (+2/-0)
drivers/net/hns3/hns3_fdir.c (+1/-0)
drivers/net/hns3/hns3_flow.c (+6/-1)
drivers/net/hns3/hns3_intr.c (+6/-0)
drivers/net/hns3/hns3_regs.c (+3/-11)
drivers/net/hns3/hns3_rss.c (+2/-4)
drivers/net/hns3/hns3_rss.h (+2/-4)
drivers/net/hns3/hns3_rxtx.c (+64/-76)
drivers/net/i40e/base/i40e_adminq.c (+17/-2)
drivers/net/i40e/base/i40e_common.c (+4/-38)
drivers/net/i40e/base/i40e_diag.c (+6/-6)
drivers/net/i40e/base/i40e_nvm.c (+8/-8)
drivers/net/i40e/i40e_ethdev.c (+5/-1)
drivers/net/i40e/i40e_flow.c (+65/-12)
drivers/net/i40e/i40e_rxtx.c (+9/-0)
drivers/net/i40e/i40e_rxtx_vec_avx512.c (+7/-0)
drivers/net/iavf/iavf_ethdev.c (+6/-14)
drivers/net/iavf/iavf_rxtx.c (+5/-1)
drivers/net/iavf/iavf_rxtx_vec_avx512.c (+7/-0)
drivers/net/iavf/iavf_vchnl.c (+3/-2)
drivers/net/ice/base/ice_adminq_cmd.h (+3/-3)
drivers/net/ice/base/ice_bitops.h (+2/-2)
drivers/net/ice/base/ice_common.c (+4/-4)
drivers/net/ice/base/ice_controlq.c (+21/-2)
drivers/net/ice/base/ice_flex_pipe.c (+3/-5)
drivers/net/ice/base/ice_lan_tx_rx.h (+3/-4)
drivers/net/ice/base/ice_nvm.c (+54/-16)
drivers/net/ice/base/ice_sched.c (+4/-5)
drivers/net/ice/base/ice_switch.c (+4/-5)
drivers/net/ice/ice_hash.c (+15/-9)
drivers/net/ice/ice_rxtx.c (+8/-3)
drivers/net/ice/ice_rxtx_vec_avx512.c (+7/-0)
drivers/net/ionic/ionic_osdep.h (+22/-8)
drivers/net/ixgbe/base/ixgbe_82599.c (+5/-3)
drivers/net/ixgbe/base/ixgbe_phy.c (+5/-2)
drivers/net/ixgbe/base/ixgbe_type.h (+1/-0)
drivers/net/ixgbe/base/ixgbe_vf.c (+3/-3)
drivers/net/ixgbe/ixgbe_ethdev.c (+17/-13)
drivers/net/memif/rte_eth_memif.c (+9/-1)
drivers/net/mlx5/linux/mlx5_ethdev_os.c (+13/-10)
drivers/net/mlx5/linux/mlx5_os.c (+6/-5)
drivers/net/mlx5/mlx5.c (+1/-1)
drivers/net/mlx5/mlx5.h (+6/-1)
drivers/net/mlx5/mlx5_ethdev.c (+10/-0)
drivers/net/mlx5/mlx5_flow_aso.c (+3/-3)
drivers/net/mlx5/mlx5_flow_dv.c (+7/-2)
drivers/net/mlx5/mlx5_flow_flex.c (+19/-13)
drivers/net/mlx5/mlx5_flow_meter.c (+2/-2)
drivers/net/mlx5/mlx5_rx.c (+1/-1)
drivers/net/mlx5/mlx5_rx.h (+1/-0)
drivers/net/mlx5/mlx5_rxq.c (+12/-1)
drivers/net/mlx5/mlx5_rxtx_vec_altivec.h (+7/-8)
drivers/net/mlx5/mlx5_rxtx_vec_neon.h (+13/-14)
drivers/net/mlx5/mlx5_rxtx_vec_sse.h (+4/-5)
drivers/net/mlx5/mlx5_tx.c (+4/-4)
drivers/net/mlx5/mlx5_txq.c (+8/-0)
drivers/net/mlx5/mlx5_utils.c (+2/-1)
drivers/net/mlx5/windows/mlx5_os.c (+5/-3)
drivers/net/mvneta/mvneta_ethdev.c (+6/-0)
drivers/net/netvsc/hn_ethdev.c (+9/-0)
drivers/net/netvsc/hn_rxtx.c (+79/-10)
drivers/net/nfb/nfb_rx.c (+1/-1)
drivers/net/nfb/nfb_tx.c (+1/-1)
drivers/net/nfp/meson.build (+1/-0)
drivers/net/nfp/nfp_ethdev.c (+19/-6)
drivers/net/ngbe/base/ngbe_devids.h (+1/-0)
drivers/net/ngbe/base/ngbe_hw.c (+3/-0)
drivers/net/ngbe/base/ngbe_regs.h (+2/-0)
drivers/net/ngbe/ngbe_ethdev.c (+48/-31)
drivers/net/ngbe/ngbe_ethdev.h (+1/-0)
drivers/net/ngbe/ngbe_rxtx.c (+5/-0)
drivers/net/ngbe/ngbe_rxtx.h (+2/-0)
drivers/net/pcap/pcap_ethdev.c (+23/-16)
drivers/net/sfc/sfc_mae.c (+5/-8)
drivers/net/softnic/rte_eth_softnic_meter.c (+1/-0)
drivers/net/tap/rte_eth_tap.c (+1/-1)
drivers/net/tap/tap_flow.c (+1/-1)
drivers/net/tap/tap_netlink.c (+2/-1)
drivers/net/txgbe/base/meson.build (+1/-1)
drivers/net/txgbe/base/txgbe_hw.c (+51/-9)
drivers/net/txgbe/base/txgbe_hw.h (+1/-0)
drivers/net/txgbe/base/txgbe_mng.c (+1/-0)
drivers/net/txgbe/base/txgbe_osdep.h (+1/-0)
drivers/net/txgbe/base/txgbe_regs.h (+6/-1)
drivers/net/txgbe/base/txgbe_type.h (+1/-0)
drivers/net/txgbe/txgbe_ethdev.c (+79/-50)
drivers/net/txgbe/txgbe_ethdev.h (+1/-1)
drivers/net/txgbe/txgbe_ethdev_vf.c (+18/-3)
drivers/net/txgbe/txgbe_fdir.c (+3/-0)
drivers/net/txgbe/txgbe_rxtx.c (+50/-35)
drivers/net/txgbe/txgbe_rxtx.h (+2/-0)
drivers/net/virtio/virtio_ethdev.c (+2/-0)
drivers/net/virtio/virtio_user/vhost_user.c (+2/-1)
drivers/net/virtio/virtio_user_ethdev.c (+1/-0)
drivers/net/vmxnet3/vmxnet3_ethdev.c (+1/-0)
drivers/net/vmxnet3/vmxnet3_logs.h (+1/-1)
drivers/raw/ifpga/base/opae_intel_max10.c (+9/-2)
drivers/raw/ifpga/ifpga_rawdev.c (+4/-4)
drivers/vdpa/sfc/sfc_vdpa_hw.c (+0/-2)
examples/eventdev_pipeline/pipeline_worker_generic.c (+8/-4)
examples/l2fwd-event/l2fwd_event.c (+1/-0)
examples/ntb/ntb_fwd.c (+4/-1)
examples/vhost_blk/vhost_blk.c (+1/-1)
kernel/linux/kni/compat.h (+4/-0)
lib/bpf/bpf_convert.c (+1/-1)
lib/bpf/bpf_validate.c (+261/-54)
lib/cmdline/cmdline.c (+1/-0)
lib/cmdline/cmdline_os_unix.c (+6/-0)
lib/cmdline/cmdline_os_windows.c (+14/-0)
lib/cmdline/cmdline_private.h (+4/-1)
lib/cryptodev/rte_cryptodev.c (+14/-0)
lib/cryptodev/rte_cryptodev.h (+2/-2)
lib/dmadev/rte_dmadev.c (+14/-5)
lib/eal/common/eal_common_dev.c (+7/-6)
lib/eal/common/eal_common_fbarray.c (+22/-8)
lib/eal/common/eal_common_options.c (+4/-4)
lib/eal/common/malloc_mp.c (+2/-1)
lib/eal/linux/eal_memalloc.c (+1/-1)
lib/eal/unix/eal_firmware.c (+19/-6)
lib/eal/windows/include/meson.build (+1/-0)
lib/eal/x86/include/rte_io.h (+1/-1)
lib/ethdev/ethdev_pci.h (+15/-3)
lib/ethdev/rte_ethdev.c (+29/-8)
lib/ethdev/rte_flow.c (+25/-4)
lib/eventdev/rte_event_eth_rx_adapter.c (+1/-1)
lib/fib/dir24_8.c (+2/-2)
lib/fib/trie.c (+6/-4)
lib/hash/rte_cuckoo_hash.c (+2/-0)
lib/hash/rte_hash.h (+8/-8)
lib/hash/rte_thash.c (+25/-1)
lib/latencystats/rte_latencystats.c (+1/-1)
lib/member/rte_member_ht.c (+1/-1)
lib/net/rte_net.h (+17/-1)
lib/pcapng/rte_pcapng.c (+2/-1)
lib/power/power_acpi_cpufreq.c (+5/-1)
lib/power/power_common.c (+23/-0)
lib/power/power_common.h (+1/-0)
lib/power/power_cppc_cpufreq.c (+6/-2)
lib/power/power_pstate_cpufreq.c (+5/-1)
lib/power/rte_power_pmd_mgmt.c (+7/-5)
lib/rcu/rte_rcu_qsbr.c (+9/-8)
lib/telemetry/telemetry.c (+1/-1)
lib/telemetry/telemetry_legacy.c (+1/-1)
lib/vhost/vdpa.c (+1/-0)
lib/vhost/vhost_user.c (+2/-1)
lib/vhost/virtio_net.c (+5/-2)
Reviewer Review Type Date Requested Status
Christian Ehrhardt (community) Approve
git-ubuntu import Pending
Review via email: mp+485499@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Christian Ehrhardt (paelzer) wrote :

Review Symbols:
+ = OK
! = Not OK
? = Question
N = Not applicable
S = Skipped

* Changelog:
  - [+] Changelog entry has correct version and targeted codename
  - [+] Correct formatting of changelog items
  - [+] Bug references correct
  - [N] Old content and logical tag match as expected (Package Merge)

* Git/maintenance:
  - [+] Commits are properly split (more important on -dev than on SRUs)

* New patches:
  - [+] No new patches added or dropped (it is odd that the security fix of Oracular isn't here, but it would now be in the new stable release, so it is fine to go forward)

* Many other sections are skipped as they do not apply
* I've compared the content with 23.11.4 upstream content to ensure the source was updates nice, and git can be so nice ... :-)

lappi 12:30:20 ~/work/dpdk/deb_dpdk (detached*) git diff v21.11.9 --dirstat
 100.0% debian/

* Build/Test:
  - we do not have a PPA, but Arif has tested those elsewhere IIRC and we will run testing on both sides so this is fine

This LGTM, thanks for also pulling the upstream release notes into the changelog as I usually did.

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

The former stuck in proposed upload was a stable backport itself and pointing to the same release, hence we should use just the latest changelog stanza (no -v to include both) as the new supersedes the old (leaving the old in there still is correct as it IMHO represents the history of how this went)

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

Without a PPA and without a repo that has the pristine tar for it I need to ensure I get the right/your tarball. For this one I've fetched from upstream via debian/watch again and ensured all matches (it does).

But only after a detour realizing that the old d/watch was broken and pointing at latest. Fixed used, and reset to the former (not something we'd SRU change and it is good in the new releases). Changing it to https://fast.dpdk.org/rel/dpdk-(22.11.*)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) gave me 22.11.8 but I know that 22.11.9 exists. https://fast.dpdk.org/rel/ does not list it and that is what d/watch picks up, but the direct link from https://core.dpdk.org/download/ works. This is just an odd setup of their server, but made me once more check checksums (good) and vs the git tag (matches as well). I've raise this upstream, but I think it isn't more than a lovely riddle (https://dpdkproject.slack.com/archives/CB2UPBU48/p1747997702897519).

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

The riddle is typing right 22.11 != 21.11, all sorted :-) and ready for an upload

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

Uploading dpdk_21.11.9-0ubuntu0.22.04.1.dsc
Uploading dpdk_21.11.9.orig.tar.xz
Uploading dpdk_21.11.9-0ubuntu0.22.04.1.debian.tar.xz
Uploading dpdk_21.11.9-0ubuntu0.22.04.1_source.buildinfo
Uploading dpdk_21.11.9-0ubuntu0.22.04.1_source.changes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.mailmap b/.mailmap
2index 434b0b5..0317d15 100644
3--- a/.mailmap
4+++ b/.mailmap
5@@ -2,7 +2,7 @@ Aakash Sasidharan <asasidharan@marvell.com>
6 Aaro Koskinen <aaro.koskinen@nsn.com>
7 Aaron Campbell <aaron@arbor.net>
8 Aaron Conole <aconole@redhat.com>
9-Abdullah Ömer Yamaç <omer.yamac@ceng.metu.edu.tr>
10+Abdullah Ömer Yamaç <omer.yamac@ceng.metu.edu.tr> <aomeryamac@gmail.com>
11 Abdullah Sevincer <abdullah.sevincer@intel.com>
12 Abed Kamaluddin <akamaluddin@marvell.com>
13 Abhijit Sinha <abhijit.sinha@intel.com>
14@@ -164,6 +164,7 @@ Bert van Leeuwen <bert.vanleeuwen@netronome.com>
15 Bhagyada Modali <bhagyada.modali@amd.com>
16 Bharat Mota <bmota@vmware.com>
17 Bill Hong <bhong@brocade.com>
18+Bill Xiang <xiangwencheng@dayudpu.com>
19 Billy McFall <bmcfall@redhat.com>
20 Billy O'Mahony <billy.o.mahony@intel.com>
21 Bing Zhao <bingz@nvidia.com> <bingz@mellanox.com> <bing.zhao@hxt-semitech.com>
22@@ -212,6 +213,8 @@ Cheng Liu <liucheng11@huawei.com>
23 Cheng Peng <cheng.peng5@zte.com.cn>
24 Chengwen Feng <fengchengwen@huawei.com>
25 Chenmin Sun <chenmin.sun@intel.com>
26+Chenming Chang <ccm@ccm.ink>
27+Chenxingyu Wang <wangchenxingyu@huawei.com>
28 Chenxu Di <chenxux.di@intel.com>
29 Cheryl Houser <chouser@vmware.com>
30 Chinh T Cao <chinh.t.cao@intel.com>
31@@ -470,6 +473,7 @@ Hanoch Haim <hhaim@cisco.com>
32 Hanumanth Pothula <hpothula@marvell.com>
33 Hao Chen <chenh@yusur.tech> <chenhao164@huawei.com>
34 Hao Wu <hao.wu@intel.com>
35+Haoqian He <haoqian.he@smartx.com>
36 Hari Kumar Vemula <hari.kumarx.vemula@intel.com>
37 Harini Ramakrishnan <harini.ramakrishnan@microsoft.com>
38 Hariprasad Govindharajan <hariprasad.govindharajan@intel.com>
39@@ -685,6 +689,7 @@ Junjie Wan <wanjunjie@bytedance.com>
40 Jun Qiu <jun.qiu@jaguarmicro.com>
41 Jun W Zhou <junx.w.zhou@intel.com>
42 Junxiao Shi <git@mail1.yoursunny.com>
43+Jun Wang <junwang01@cestc.cn>
44 Jun Yang <jun.yang@nxp.com>
45 Junyu Jiang <junyux.jiang@intel.com>
46 Juraj Linkeš <juraj.linkes@pantheon.tech>
47@@ -818,6 +823,7 @@ Mahesh Adulla <mahesh.adulla@amd.com>
48 Mahipal Challa <mchalla@marvell.com>
49 Mah Yock Gen <yock.gen.mah@intel.com>
50 Mairtin o Loingsigh <mairtin.oloingsigh@intel.com>
51+Malcolm Bumgardner <mbumgard@cisco.com>
52 Mallesham Jatharakonda <mjatharakonda@oneconvergence.com>
53 Mallesh Koujalagi <malleshx.koujalagi@intel.com>
54 Malvika Gupta <malvika.gupta@arm.com>
55@@ -826,7 +832,6 @@ Mandeep Rohilla <mrohilla@brocade.com>
56 Manish Chopra <manishc@marvell.com>
57 Manish Tomar <manish.tomar@nxp.com>
58 Mao Jiang <maox.jiang@intel.com>
59-Mao YingMing <maoyingming@baidu.com>
60 Marcel Apfelbaum <marcel@redhat.com>
61 Marcel Cornu <marcel.d.cornu@intel.com>
62 Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
63@@ -843,6 +848,7 @@ Marcin Wojtas <mw@semihalf.com>
64 Marcin Zapolski <marcinx.a.zapolski@intel.com>
65 Marco Varlese <mvarlese@suse.de>
66 Marc Sune <marcdevel@gmail.com> <marc.sune@bisdn.de>
67+Marek Mical <marekx.mical@intel.com>
68 Maria Lingemark <maria.lingemark@ericsson.com>
69 Mario Carrillo <mario.alfredo.c.arevalo@intel.com>
70 Mário Kuka <kuka@cesnet.cz>
71@@ -910,6 +916,7 @@ Michael Santana <maicolgabriel@hotmail.com> <msantana@redhat.com>
72 Michael Savisko <michaelsav@nvidia.com>
73 Michael Shamis <michaelsh@marvell.com>
74 Michael S. Tsirkin <mst@redhat.com>
75+Michael Theodore Stolarchuk <mike.stolarchuk@arista.com>
76 Michael Wildt <michael.wildt@broadcom.com>
77 Michal Berger <michallinuxstuff@gmail.com>
78 Michal Jastrzebski <michalx.k.jastrzebski@intel.com>
79@@ -924,6 +931,7 @@ Michal Swiatkowski <michal.swiatkowski@intel.com>
80 Michal Wilczynski <michal.wilczynski@intel.com>
81 Michel Machado <michel@digirati.com.br>
82 Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com>
83+Mihai Brodschi <mihai.brodschi@broadcom.com>
84 Mihai Pogonaru <pogonarumihai@gmail.com>
85 Mike Baucom <michael.baucom@broadcom.com>
86 Mike Pattrick <mkp@redhat.com>
87@@ -981,8 +989,9 @@ Nelson Escobar <neescoba@cisco.com>
88 Nemanja Marjanovic <nemanja.marjanovic@intel.com>
89 Netanel Belgazal <netanel@amazon.com>
90 Netanel Gonen <netanelg@mellanox.com>
91+Niall Meade <niall.meade@intel.com>
92 Niall Power <niall.power@intel.com>
93-Nick Connolly <nick.connolly@mayadata.io>
94+Nick Connolly <nick.connolly@arm.com> <nick.connolly@mayadata.io>
95 Nick Nunley <nicholas.d.nunley@intel.com>
96 Niclas Storm <niclas.storm@ericsson.com>
97 Nicolas Chautru <nicolas.chautru@intel.com>
98@@ -1007,6 +1016,7 @@ Noa Ezra <noae@mellanox.com>
99 Nobuhiro Miki <nmiki@yahoo-corp.jp>
100 Norbert Ciosek <norbertx.ciosek@intel.com>
101 Odi Assli <odia@nvidia.com>
102+Ofer Dagan <ofer.d@claroty.com>
103 Ognjen Joldzic <ognjen.joldzic@gmail.com>
104 Ola Liljedahl <ola.liljedahl@arm.com>
105 Oleg Polyakov <olegp123@walla.co.il>
106@@ -1066,6 +1076,7 @@ Peng Yu <penyu@amazon.com>
107 Peng Zhang <peng.zhang@corigine.com> <peng1x.zhang@intel.com>
108 Pengzhen Liu <liupengzhen3@huawei.com>
109 Peter Mccarthy <peter.mccarthy@intel.com>
110+Peter Morrow <peter@graphiant.com>
111 Peter Spreadborough <peter.spreadborough@broadcom.com>
112 Petr Houska <t-pehous@microsoft.com>
113 Phanendra Vukkisala <pvukkisala@marvell.com>
114@@ -1108,6 +1119,7 @@ Quentin Armitage <quentin@armitage.org.uk>
115 Qun Wan <qun.wan@intel.com>
116 Radha Mohan Chintakuntla <radhac@marvell.com>
117 Radoslaw Biernacki <rad@semihalf.com> <radoslaw.biernacki@linaro.org>
118+Radoslaw Tyl <radoslawx.tyl@intel.com>
119 Radu Bulie <radu-andrei.bulie@nxp.com>
120 Radu Nicolau <radu.nicolau@intel.com>
121 Rafael Ávila de Espíndola <espindola@scylladb.com>
122@@ -1265,6 +1277,7 @@ Shuanglin Wang <shuanglin.wang@broadcom.com>
123 Shuki Katzenelson <shuki@lightbitslabs.com>
124 Shun Hao <shunh@nvidia.com>
125 Shu Shen <shu.shen@radisys.com>
126+Shuo Li <lishuo02@baidu.com>
127 Shweta Choudaha <shweta.choudaha@att.com>
128 Shyam Kumar Shrivastav <shrivastav.shyam@gmail.com>
129 Shy Shyman <shys@nvidia.com> <shys@mellanox.com>
130@@ -1413,6 +1426,7 @@ Vadim Suraev <vadim.suraev@gmail.com>
131 Vakul Garg <vakul.garg@nxp.com>
132 Vamsi Attunuru <vattunuru@marvell.com>
133 Vanshika Shukla <vanshika.shukla@nxp.com>
134+Varun Sethi <v.sethi@nxp.com>
135 Vasily Philipov <vasilyf@mellanox.com>
136 Veerasenareddy Burru <vburru@marvell.com>
137 Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com>
138@@ -1442,6 +1456,7 @@ Vincent Jardin <vincent.jardin@6wind.com>
139 Vincent Li <vincent.mc.li@gmail.com>
140 Vincent S. Cojot <vcojot@redhat.com>
141 Vinh Tran <vinh.t.tran10@gmail.com>
142+Vipin Padmam Ramesh <vipinp@vmware.com>
143 Vipin Varghese <vipin.varghese@amd.com> <vipin.varghese@intel.com>
144 Vipul Ashri <vipul.ashri@oracle.com>
145 Visa Hankala <visa@hankala.org>
146@@ -1558,6 +1573,7 @@ Yi Lu <luyi68@live.com>
147 Yilun Xu <yilun.xu@intel.com>
148 Yinan Wang <yinan.wang@intel.com>
149 Ying A Wang <ying.a.wang@intel.com>
150+Yingming Mao <maoyingming@baidu.com>
151 Yingya Han <yingyax.han@intel.com>
152 Yinjun Zhang <yinjun.zhang@corigine.com>
153 Yipeng Wang <yipeng1.wang@intel.com>
154diff --git a/VERSION b/VERSION
155index cb47ea8..7d69c8e 100644
156--- a/VERSION
157+++ b/VERSION
158@@ -1 +1 @@
159-21.11.7
160+21.11.9
161diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c
162index 44576be..76db233 100644
163--- a/app/dumpcap/main.c
164+++ b/app/dumpcap/main.c
165@@ -78,8 +78,6 @@ struct interface {
166 TAILQ_ENTRY(interface) next;
167 uint16_t port;
168 char name[RTE_ETH_NAME_MAX_LEN];
169-
170- struct rte_rxtx_callback *rx_cb[RTE_MAX_QUEUES_PER_PORT];
171 };
172
173 TAILQ_HEAD(interface_list, interface);
174@@ -789,6 +787,11 @@ int main(int argc, char **argv)
175 {
176 struct rte_ring *r;
177 struct rte_mempool *mp;
178+ struct sigaction action = {
179+ .sa_flags = SA_RESTART,
180+ .sa_handler = signal_handler,
181+ };
182+ struct sigaction origaction;
183 dumpcap_out_t out;
184 char *p;
185
186@@ -814,8 +817,13 @@ int main(int argc, char **argv)
187 start_time = create_timestamp();
188 enable_pdump(r, mp);
189
190- signal(SIGINT, signal_handler);
191- signal(SIGPIPE, SIG_IGN);
192+ sigemptyset(&action.sa_mask);
193+ sigaction(SIGTERM, &action, NULL);
194+ sigaction(SIGINT, &action, NULL);
195+ sigaction(SIGPIPE, &action, NULL);
196+ sigaction(SIGHUP, NULL, &origaction);
197+ if (origaction.sa_handler == SIG_DFL)
198+ sigaction(SIGHUP, &action, NULL);
199
200 enable_primary_monitor();
201
202diff --git a/app/pdump/main.c b/app/pdump/main.c
203index 71fd83d..0986034 100644
204--- a/app/pdump/main.c
205+++ b/app/pdump/main.c
206@@ -573,13 +573,9 @@ disable_primary_monitor(void)
207 }
208
209 static void
210-signal_handler(int sig_num)
211+signal_handler(int sig_num __rte_unused)
212 {
213- if (sig_num == SIGINT) {
214- printf("\n\nSignal %d received, preparing to exit...\n",
215- sig_num);
216- quit_signal = 1;
217- }
218+ quit_signal = 1;
219 }
220
221 static inline int
222@@ -976,6 +972,11 @@ enable_primary_monitor(void)
223 int
224 main(int argc, char **argv)
225 {
226+ struct sigaction action = {
227+ .sa_flags = SA_RESTART,
228+ .sa_handler = signal_handler,
229+ };
230+ struct sigaction origaction;
231 int diag;
232 int ret;
233 int i;
234@@ -984,8 +985,14 @@ main(int argc, char **argv)
235 char mp_flag[] = "--proc-type=secondary";
236 char *argp[argc + 2];
237
238- /* catch ctrl-c so we can print on exit */
239- signal(SIGINT, signal_handler);
240+ /* catch ctrl-c so we can cleanup on exit */
241+ sigemptyset(&action.sa_mask);
242+ sigaction(SIGTERM, &action, NULL);
243+ sigaction(SIGINT, &action, NULL);
244+ sigaction(SIGPIPE, &action, NULL);
245+ sigaction(SIGHUP, NULL, &origaction);
246+ if (origaction.sa_handler == SIG_DFL)
247+ sigaction(SIGHUP, &action, NULL);
248
249 argp[0] = argv[0];
250 argp[1] = n_flag;
251diff --git a/app/proc-info/main.c b/app/proc-info/main.c
252index b52c3ff..8030c10 100644
253--- a/app/proc-info/main.c
254+++ b/app/proc-info/main.c
255@@ -1499,7 +1499,7 @@ main(int argc, char **argv)
256
257 if (mem_info) {
258 meminfo_display();
259- return 0;
260+ goto cleanup;
261 }
262
263 nb_ports = rte_eth_dev_count_avail();
264@@ -1567,6 +1567,7 @@ main(int argc, char **argv)
265 RTE_ETH_FOREACH_DEV(i)
266 rte_eth_dev_close(i);
267
268+cleanup:
269 ret = rte_eal_cleanup();
270 if (ret)
271 printf("Error from rte_eal_cleanup(), %d\n", ret);
272diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
273index 3f2bac6..c15ed34 100644
274--- a/app/test-bbdev/test_bbdev_perf.c
275+++ b/app/test-bbdev/test_bbdev_perf.c
276@@ -2819,15 +2819,6 @@ throughput_intr_lcore_ldpc_dec(void *arg)
277 if (unlikely(num_to_process - enqueued < num_to_enq))
278 num_to_enq = num_to_process - enqueued;
279
280- enq = 0;
281- do {
282- enq += rte_bbdev_enqueue_ldpc_dec_ops(
283- tp->dev_id,
284- queue_id, &ops[enqueued],
285- num_to_enq);
286- } while (unlikely(num_to_enq != enq));
287- enqueued += enq;
288-
289 /* Write to thread burst_sz current number of enqueued
290 * descriptors. It ensures that proper number of
291 * descriptors will be dequeued in callback
292@@ -2837,6 +2828,15 @@ throughput_intr_lcore_ldpc_dec(void *arg)
293 */
294 __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
295
296+ enq = 0;
297+ do {
298+ enq += rte_bbdev_enqueue_ldpc_dec_ops(
299+ tp->dev_id,
300+ queue_id, &ops[enqueued],
301+ num_to_enq);
302+ } while (unlikely(num_to_enq != enq));
303+ enqueued += enq;
304+
305 /* Wait until processing of previous batch is
306 * completed
307 */
308@@ -2907,14 +2907,6 @@ throughput_intr_lcore_dec(void *arg)
309 if (unlikely(num_to_process - enqueued < num_to_enq))
310 num_to_enq = num_to_process - enqueued;
311
312- enq = 0;
313- do {
314- enq += rte_bbdev_enqueue_dec_ops(tp->dev_id,
315- queue_id, &ops[enqueued],
316- num_to_enq);
317- } while (unlikely(num_to_enq != enq));
318- enqueued += enq;
319-
320 /* Write to thread burst_sz current number of enqueued
321 * descriptors. It ensures that proper number of
322 * descriptors will be dequeued in callback
323@@ -2924,6 +2916,14 @@ throughput_intr_lcore_dec(void *arg)
324 */
325 __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
326
327+ enq = 0;
328+ do {
329+ enq += rte_bbdev_enqueue_dec_ops(tp->dev_id,
330+ queue_id, &ops[enqueued],
331+ num_to_enq);
332+ } while (unlikely(num_to_enq != enq));
333+ enqueued += enq;
334+
335 /* Wait until processing of previous batch is
336 * completed
337 */
338@@ -2993,14 +2993,6 @@ throughput_intr_lcore_enc(void *arg)
339 if (unlikely(num_to_process - enqueued < num_to_enq))
340 num_to_enq = num_to_process - enqueued;
341
342- enq = 0;
343- do {
344- enq += rte_bbdev_enqueue_enc_ops(tp->dev_id,
345- queue_id, &ops[enqueued],
346- num_to_enq);
347- } while (unlikely(enq != num_to_enq));
348- enqueued += enq;
349-
350 /* Write to thread burst_sz current number of enqueued
351 * descriptors. It ensures that proper number of
352 * descriptors will be dequeued in callback
353@@ -3010,6 +3002,14 @@ throughput_intr_lcore_enc(void *arg)
354 */
355 __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
356
357+ enq = 0;
358+ do {
359+ enq += rte_bbdev_enqueue_enc_ops(tp->dev_id,
360+ queue_id, &ops[enqueued],
361+ num_to_enq);
362+ } while (unlikely(enq != num_to_enq));
363+ enqueued += enq;
364+
365 /* Wait until processing of previous batch is
366 * completed
367 */
368@@ -3081,15 +3081,6 @@ throughput_intr_lcore_ldpc_enc(void *arg)
369 if (unlikely(num_to_process - enqueued < num_to_enq))
370 num_to_enq = num_to_process - enqueued;
371
372- enq = 0;
373- do {
374- enq += rte_bbdev_enqueue_ldpc_enc_ops(
375- tp->dev_id,
376- queue_id, &ops[enqueued],
377- num_to_enq);
378- } while (unlikely(enq != num_to_enq));
379- enqueued += enq;
380-
381 /* Write to thread burst_sz current number of enqueued
382 * descriptors. It ensures that proper number of
383 * descriptors will be dequeued in callback
384@@ -3099,6 +3090,15 @@ throughput_intr_lcore_ldpc_enc(void *arg)
385 */
386 __atomic_store_n(&tp->burst_sz, num_to_enq, __ATOMIC_RELAXED);
387
388+ enq = 0;
389+ do {
390+ enq += rte_bbdev_enqueue_ldpc_enc_ops(
391+ tp->dev_id,
392+ queue_id, &ops[enqueued],
393+ num_to_enq);
394+ } while (unlikely(enq != num_to_enq));
395+ enqueued += enq;
396+
397 /* Wait until processing of previous batch is
398 * completed
399 */
400diff --git a/app/test-pmd/bpf_cmd.c b/app/test-pmd/bpf_cmd.c
401index 09c8aec..e3bfd97 100644
402--- a/app/test-pmd/bpf_cmd.c
403+++ b/app/test-pmd/bpf_cmd.c
404@@ -137,7 +137,7 @@ cmdline_parse_token_string_t cmd_load_bpf_prm =
405 cmdline_parse_inst_t cmd_operate_bpf_ld_parse = {
406 .f = cmd_operate_bpf_ld_parsed,
407 .data = NULL,
408- .help_str = "bpf-load rx|tx <port> <queue> <J|M|B> <file_name>",
409+ .help_str = "bpf-load rx|tx <port> <queue> <J|M|-> <file_name>",
410 .tokens = {
411 (void *)&cmd_load_bpf_start,
412 (void *)&cmd_load_bpf_dir,
413diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
414index 43857c8..aa4acdc 100644
415--- a/app/test-pmd/cmdline.c
416+++ b/app/test-pmd/cmdline.c
417@@ -68,10 +68,10 @@
418 #include "cmdline_tm.h"
419 #include "bpf_cmd.h"
420
421-static struct cmdline *testpmd_cl;
422-
423 static void cmd_reconfig_device_queue(portid_t id, uint8_t dev, uint8_t queue);
424
425+static struct cmdline *testpmd_cl;
426+
427 /* *** Help command with introduction. *** */
428 struct cmd_help_brief_result {
429 cmdline_fixed_string_t help;
430@@ -17733,289 +17733,289 @@ cmdline_parse_inst_t cmd_show_port_flow_transfer_proxy = {
431
432 /* list of instructions */
433 cmdline_parse_ctx_t main_ctx[] = {
434- (cmdline_parse_inst_t *)&cmd_help_brief,
435- (cmdline_parse_inst_t *)&cmd_help_long,
436- (cmdline_parse_inst_t *)&cmd_quit,
437- (cmdline_parse_inst_t *)&cmd_load_from_file,
438- (cmdline_parse_inst_t *)&cmd_showport,
439- (cmdline_parse_inst_t *)&cmd_showqueue,
440- (cmdline_parse_inst_t *)&cmd_showeeprom,
441- (cmdline_parse_inst_t *)&cmd_showportall,
442- (cmdline_parse_inst_t *)&cmd_representor_info,
443- (cmdline_parse_inst_t *)&cmd_showdevice,
444- (cmdline_parse_inst_t *)&cmd_showcfg,
445- (cmdline_parse_inst_t *)&cmd_showfwdall,
446- (cmdline_parse_inst_t *)&cmd_start,
447- (cmdline_parse_inst_t *)&cmd_start_tx_first,
448- (cmdline_parse_inst_t *)&cmd_start_tx_first_n,
449- (cmdline_parse_inst_t *)&cmd_set_link_up,
450- (cmdline_parse_inst_t *)&cmd_set_link_down,
451- (cmdline_parse_inst_t *)&cmd_reset,
452- (cmdline_parse_inst_t *)&cmd_set_numbers,
453- (cmdline_parse_inst_t *)&cmd_set_log,
454- (cmdline_parse_inst_t *)&cmd_set_rxoffs,
455- (cmdline_parse_inst_t *)&cmd_set_rxpkts,
456- (cmdline_parse_inst_t *)&cmd_set_txpkts,
457- (cmdline_parse_inst_t *)&cmd_set_txsplit,
458- (cmdline_parse_inst_t *)&cmd_set_txtimes,
459- (cmdline_parse_inst_t *)&cmd_set_fwd_list,
460- (cmdline_parse_inst_t *)&cmd_set_fwd_mask,
461- (cmdline_parse_inst_t *)&cmd_set_fwd_mode,
462- (cmdline_parse_inst_t *)&cmd_set_fwd_retry_mode,
463- (cmdline_parse_inst_t *)&cmd_set_burst_tx_retry,
464- (cmdline_parse_inst_t *)&cmd_set_promisc_mode_one,
465- (cmdline_parse_inst_t *)&cmd_set_promisc_mode_all,
466- (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_one,
467- (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_all,
468- (cmdline_parse_inst_t *)&cmd_set_flush_rx,
469- (cmdline_parse_inst_t *)&cmd_set_link_check,
470- (cmdline_parse_inst_t *)&cmd_set_bypass_mode,
471- (cmdline_parse_inst_t *)&cmd_set_bypass_event,
472- (cmdline_parse_inst_t *)&cmd_set_bypass_timeout,
473- (cmdline_parse_inst_t *)&cmd_show_bypass_config,
474+ &cmd_help_brief,
475+ &cmd_help_long,
476+ &cmd_quit,
477+ &cmd_load_from_file,
478+ &cmd_showport,
479+ &cmd_showqueue,
480+ &cmd_showeeprom,
481+ &cmd_showportall,
482+ &cmd_representor_info,
483+ &cmd_showdevice,
484+ &cmd_showcfg,
485+ &cmd_showfwdall,
486+ &cmd_start,
487+ &cmd_start_tx_first,
488+ &cmd_start_tx_first_n,
489+ &cmd_set_link_up,
490+ &cmd_set_link_down,
491+ &cmd_reset,
492+ &cmd_set_numbers,
493+ &cmd_set_log,
494+ &cmd_set_rxoffs,
495+ &cmd_set_rxpkts,
496+ &cmd_set_txpkts,
497+ &cmd_set_txsplit,
498+ &cmd_set_txtimes,
499+ &cmd_set_fwd_list,
500+ &cmd_set_fwd_mask,
501+ &cmd_set_fwd_mode,
502+ &cmd_set_fwd_retry_mode,
503+ &cmd_set_burst_tx_retry,
504+ &cmd_set_promisc_mode_one,
505+ &cmd_set_promisc_mode_all,
506+ &cmd_set_allmulti_mode_one,
507+ &cmd_set_allmulti_mode_all,
508+ &cmd_set_flush_rx,
509+ &cmd_set_link_check,
510+ &cmd_set_bypass_mode,
511+ &cmd_set_bypass_event,
512+ &cmd_set_bypass_timeout,
513+ &cmd_show_bypass_config,
514 #ifdef RTE_NET_BOND
515- (cmdline_parse_inst_t *) &cmd_set_bonding_mode,
516- (cmdline_parse_inst_t *) &cmd_show_bonding_config,
517- (cmdline_parse_inst_t *) &cmd_show_bonding_lacp_info,
518- (cmdline_parse_inst_t *) &cmd_set_bonding_primary,
519- (cmdline_parse_inst_t *) &cmd_add_bonding_slave,
520- (cmdline_parse_inst_t *) &cmd_remove_bonding_slave,
521- (cmdline_parse_inst_t *) &cmd_create_bonded_device,
522- (cmdline_parse_inst_t *) &cmd_set_bond_mac_addr,
523- (cmdline_parse_inst_t *) &cmd_set_balance_xmit_policy,
524- (cmdline_parse_inst_t *) &cmd_set_bond_mon_period,
525- (cmdline_parse_inst_t *) &cmd_set_lacp_dedicated_queues,
526- (cmdline_parse_inst_t *) &cmd_set_bonding_agg_mode_policy,
527+ &cmd_set_bonding_mode,
528+ &cmd_show_bonding_config,
529+ &cmd_show_bonding_lacp_info,
530+ &cmd_set_bonding_primary,
531+ &cmd_add_bonding_slave,
532+ &cmd_remove_bonding_slave,
533+ &cmd_create_bonded_device,
534+ &cmd_set_bond_mac_addr,
535+ &cmd_set_balance_xmit_policy,
536+ &cmd_set_bond_mon_period,
537+ &cmd_set_lacp_dedicated_queues,
538+ &cmd_set_bonding_agg_mode_policy,
539 #endif
540- (cmdline_parse_inst_t *)&cmd_vlan_offload,
541- (cmdline_parse_inst_t *)&cmd_vlan_tpid,
542- (cmdline_parse_inst_t *)&cmd_rx_vlan_filter_all,
543- (cmdline_parse_inst_t *)&cmd_rx_vlan_filter,
544- (cmdline_parse_inst_t *)&cmd_tx_vlan_set,
545- (cmdline_parse_inst_t *)&cmd_tx_vlan_set_qinq,
546- (cmdline_parse_inst_t *)&cmd_tx_vlan_reset,
547- (cmdline_parse_inst_t *)&cmd_tx_vlan_set_pvid,
548- (cmdline_parse_inst_t *)&cmd_csum_set,
549- (cmdline_parse_inst_t *)&cmd_csum_show,
550- (cmdline_parse_inst_t *)&cmd_csum_tunnel,
551- (cmdline_parse_inst_t *)&cmd_csum_mac_swap,
552- (cmdline_parse_inst_t *)&cmd_tso_set,
553- (cmdline_parse_inst_t *)&cmd_tso_show,
554- (cmdline_parse_inst_t *)&cmd_tunnel_tso_set,
555- (cmdline_parse_inst_t *)&cmd_tunnel_tso_show,
556+ &cmd_vlan_offload,
557+ &cmd_vlan_tpid,
558+ &cmd_rx_vlan_filter_all,
559+ &cmd_rx_vlan_filter,
560+ &cmd_tx_vlan_set,
561+ &cmd_tx_vlan_set_qinq,
562+ &cmd_tx_vlan_reset,
563+ &cmd_tx_vlan_set_pvid,
564+ &cmd_csum_set,
565+ &cmd_csum_show,
566+ &cmd_csum_tunnel,
567+ &cmd_csum_mac_swap,
568+ &cmd_tso_set,
569+ &cmd_tso_show,
570+ &cmd_tunnel_tso_set,
571+ &cmd_tunnel_tso_show,
572 #ifdef RTE_LIB_GRO
573- (cmdline_parse_inst_t *)&cmd_gro_enable,
574- (cmdline_parse_inst_t *)&cmd_gro_flush,
575- (cmdline_parse_inst_t *)&cmd_gro_show,
576+ &cmd_gro_enable,
577+ &cmd_gro_flush,
578+ &cmd_gro_show,
579 #endif
580 #ifdef RTE_LIB_GSO
581- (cmdline_parse_inst_t *)&cmd_gso_enable,
582- (cmdline_parse_inst_t *)&cmd_gso_size,
583- (cmdline_parse_inst_t *)&cmd_gso_show,
584+ &cmd_gso_enable,
585+ &cmd_gso_size,
586+ &cmd_gso_show,
587 #endif
588- (cmdline_parse_inst_t *)&cmd_link_flow_control_set,
589- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_rx,
590- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_tx,
591- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_hw,
592- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_lw,
593- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_pt,
594- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_xon,
595- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_macfwd,
596- (cmdline_parse_inst_t *)&cmd_link_flow_control_set_autoneg,
597- (cmdline_parse_inst_t *)&cmd_link_flow_control_show,
598- (cmdline_parse_inst_t *)&cmd_priority_flow_control_set,
599- (cmdline_parse_inst_t *)&cmd_config_dcb,
600- (cmdline_parse_inst_t *)&cmd_read_reg,
601- (cmdline_parse_inst_t *)&cmd_read_reg_bit_field,
602- (cmdline_parse_inst_t *)&cmd_read_reg_bit,
603- (cmdline_parse_inst_t *)&cmd_write_reg,
604- (cmdline_parse_inst_t *)&cmd_write_reg_bit_field,
605- (cmdline_parse_inst_t *)&cmd_write_reg_bit,
606- (cmdline_parse_inst_t *)&cmd_read_rxd_txd,
607- (cmdline_parse_inst_t *)&cmd_stop,
608- (cmdline_parse_inst_t *)&cmd_mac_addr,
609- (cmdline_parse_inst_t *)&cmd_set_fwd_eth_peer,
610- (cmdline_parse_inst_t *)&cmd_set_qmap,
611- (cmdline_parse_inst_t *)&cmd_set_xstats_hide_zero,
612- (cmdline_parse_inst_t *)&cmd_set_record_core_cycles,
613- (cmdline_parse_inst_t *)&cmd_set_record_burst_stats,
614- (cmdline_parse_inst_t *)&cmd_operate_port,
615- (cmdline_parse_inst_t *)&cmd_operate_specific_port,
616- (cmdline_parse_inst_t *)&cmd_operate_attach_port,
617- (cmdline_parse_inst_t *)&cmd_operate_detach_port,
618- (cmdline_parse_inst_t *)&cmd_operate_detach_device,
619- (cmdline_parse_inst_t *)&cmd_set_port_setup_on,
620- (cmdline_parse_inst_t *)&cmd_config_speed_all,
621- (cmdline_parse_inst_t *)&cmd_config_speed_specific,
622- (cmdline_parse_inst_t *)&cmd_config_loopback_all,
623- (cmdline_parse_inst_t *)&cmd_config_loopback_specific,
624- (cmdline_parse_inst_t *)&cmd_config_rx_tx,
625- (cmdline_parse_inst_t *)&cmd_config_mtu,
626- (cmdline_parse_inst_t *)&cmd_config_max_pkt_len,
627- (cmdline_parse_inst_t *)&cmd_config_max_lro_pkt_size,
628- (cmdline_parse_inst_t *)&cmd_config_rx_mode_flag,
629- (cmdline_parse_inst_t *)&cmd_config_rss,
630- (cmdline_parse_inst_t *)&cmd_config_rxtx_ring_size,
631- (cmdline_parse_inst_t *)&cmd_config_rxtx_queue,
632- (cmdline_parse_inst_t *)&cmd_config_deferred_start_rxtx_queue,
633- (cmdline_parse_inst_t *)&cmd_setup_rxtx_queue,
634- (cmdline_parse_inst_t *)&cmd_config_rss_reta,
635- (cmdline_parse_inst_t *)&cmd_showport_reta,
636- (cmdline_parse_inst_t *)&cmd_showport_macs,
637- (cmdline_parse_inst_t *)&cmd_show_port_flow_transfer_proxy,
638- (cmdline_parse_inst_t *)&cmd_config_burst,
639- (cmdline_parse_inst_t *)&cmd_config_thresh,
640- (cmdline_parse_inst_t *)&cmd_config_threshold,
641- (cmdline_parse_inst_t *)&cmd_set_uc_hash_filter,
642- (cmdline_parse_inst_t *)&cmd_set_uc_all_hash_filter,
643- (cmdline_parse_inst_t *)&cmd_vf_mac_addr_filter,
644- (cmdline_parse_inst_t *)&cmd_queue_rate_limit,
645- (cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
646- (cmdline_parse_inst_t *)&cmd_showport_rss_hash,
647- (cmdline_parse_inst_t *)&cmd_showport_rss_hash_key,
648- (cmdline_parse_inst_t *)&cmd_config_rss_hash_key,
649- (cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs,
650- (cmdline_parse_inst_t *)&cmd_dump,
651- (cmdline_parse_inst_t *)&cmd_dump_one,
652+ &cmd_link_flow_control_set,
653+ &cmd_link_flow_control_set_rx,
654+ &cmd_link_flow_control_set_tx,
655+ &cmd_link_flow_control_set_hw,
656+ &cmd_link_flow_control_set_lw,
657+ &cmd_link_flow_control_set_pt,
658+ &cmd_link_flow_control_set_xon,
659+ &cmd_link_flow_control_set_macfwd,
660+ &cmd_link_flow_control_set_autoneg,
661+ &cmd_link_flow_control_show,
662+ &cmd_priority_flow_control_set,
663+ &cmd_config_dcb,
664+ &cmd_read_reg,
665+ &cmd_read_reg_bit_field,
666+ &cmd_read_reg_bit,
667+ &cmd_write_reg,
668+ &cmd_write_reg_bit_field,
669+ &cmd_write_reg_bit,
670+ &cmd_read_rxd_txd,
671+ &cmd_stop,
672+ &cmd_mac_addr,
673+ &cmd_set_fwd_eth_peer,
674+ &cmd_set_qmap,
675+ &cmd_set_xstats_hide_zero,
676+ &cmd_set_record_core_cycles,
677+ &cmd_set_record_burst_stats,
678+ &cmd_operate_port,
679+ &cmd_operate_specific_port,
680+ &cmd_operate_attach_port,
681+ &cmd_operate_detach_port,
682+ &cmd_operate_detach_device,
683+ &cmd_set_port_setup_on,
684+ &cmd_config_speed_all,
685+ &cmd_config_speed_specific,
686+ &cmd_config_loopback_all,
687+ &cmd_config_loopback_specific,
688+ &cmd_config_rx_tx,
689+ &cmd_config_mtu,
690+ &cmd_config_max_pkt_len,
691+ &cmd_config_max_lro_pkt_size,
692+ &cmd_config_rx_mode_flag,
693+ &cmd_config_rss,
694+ &cmd_config_rxtx_ring_size,
695+ &cmd_config_rxtx_queue,
696+ &cmd_config_deferred_start_rxtx_queue,
697+ &cmd_setup_rxtx_queue,
698+ &cmd_config_rss_reta,
699+ &cmd_showport_reta,
700+ &cmd_showport_macs,
701+ &cmd_show_port_flow_transfer_proxy,
702+ &cmd_config_burst,
703+ &cmd_config_thresh,
704+ &cmd_config_threshold,
705+ &cmd_set_uc_hash_filter,
706+ &cmd_set_uc_all_hash_filter,
707+ &cmd_vf_mac_addr_filter,
708+ &cmd_queue_rate_limit,
709+ &cmd_tunnel_udp_config,
710+ &cmd_showport_rss_hash,
711+ &cmd_showport_rss_hash_key,
712+ &cmd_config_rss_hash_key,
713+ &cmd_cleanup_txq_mbufs,
714+ &cmd_dump,
715+ &cmd_dump_one,
716 #ifdef RTE_NET_I40E
717- (cmdline_parse_inst_t *)&cmd_add_del_raw_flow_director,
718+ &cmd_add_del_raw_flow_director,
719 #endif
720- (cmdline_parse_inst_t *)&cmd_set_flow_director_ip_mask,
721- (cmdline_parse_inst_t *)&cmd_set_flow_director_mac_vlan_mask,
722- (cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask,
723- (cmdline_parse_inst_t *)&cmd_set_flow_director_flex_payload,
724- (cmdline_parse_inst_t *)&cmd_flow,
725- (cmdline_parse_inst_t *)&cmd_show_port_meter_cap,
726- (cmdline_parse_inst_t *)&cmd_add_port_meter_profile_srtcm,
727- (cmdline_parse_inst_t *)&cmd_add_port_meter_profile_trtcm,
728- (cmdline_parse_inst_t *)&cmd_add_port_meter_profile_trtcm_rfc4115,
729- (cmdline_parse_inst_t *)&cmd_del_port_meter_profile,
730- (cmdline_parse_inst_t *)&cmd_create_port_meter,
731- (cmdline_parse_inst_t *)&cmd_enable_port_meter,
732- (cmdline_parse_inst_t *)&cmd_disable_port_meter,
733- (cmdline_parse_inst_t *)&cmd_del_port_meter,
734- (cmdline_parse_inst_t *)&cmd_del_port_meter_policy,
735- (cmdline_parse_inst_t *)&cmd_set_port_meter_profile,
736- (cmdline_parse_inst_t *)&cmd_set_port_meter_dscp_table,
737- (cmdline_parse_inst_t *)&cmd_set_port_meter_stats_mask,
738- (cmdline_parse_inst_t *)&cmd_show_port_meter_stats,
739- (cmdline_parse_inst_t *)&cmd_mcast_addr,
740- (cmdline_parse_inst_t *)&cmd_set_vf_vlan_anti_spoof,
741- (cmdline_parse_inst_t *)&cmd_set_vf_mac_anti_spoof,
742- (cmdline_parse_inst_t *)&cmd_set_vf_vlan_stripq,
743- (cmdline_parse_inst_t *)&cmd_set_vf_vlan_insert,
744- (cmdline_parse_inst_t *)&cmd_set_tx_loopback,
745- (cmdline_parse_inst_t *)&cmd_set_all_queues_drop_en,
746- (cmdline_parse_inst_t *)&cmd_set_vf_split_drop_en,
747- (cmdline_parse_inst_t *)&cmd_set_macsec_offload_on,
748- (cmdline_parse_inst_t *)&cmd_set_macsec_offload_off,
749- (cmdline_parse_inst_t *)&cmd_set_macsec_sc,
750- (cmdline_parse_inst_t *)&cmd_set_macsec_sa,
751- (cmdline_parse_inst_t *)&cmd_set_vf_traffic,
752- (cmdline_parse_inst_t *)&cmd_set_vf_rxmode,
753- (cmdline_parse_inst_t *)&cmd_vf_rate_limit,
754- (cmdline_parse_inst_t *)&cmd_vf_rxvlan_filter,
755- (cmdline_parse_inst_t *)&cmd_set_vf_mac_addr,
756- (cmdline_parse_inst_t *)&cmd_set_vf_promisc,
757- (cmdline_parse_inst_t *)&cmd_set_vf_allmulti,
758- (cmdline_parse_inst_t *)&cmd_set_vf_broadcast,
759- (cmdline_parse_inst_t *)&cmd_set_vf_vlan_tag,
760- (cmdline_parse_inst_t *)&cmd_vf_max_bw,
761- (cmdline_parse_inst_t *)&cmd_vf_tc_min_bw,
762- (cmdline_parse_inst_t *)&cmd_vf_tc_max_bw,
763- (cmdline_parse_inst_t *)&cmd_strict_link_prio,
764- (cmdline_parse_inst_t *)&cmd_tc_min_bw,
765- (cmdline_parse_inst_t *)&cmd_set_vxlan,
766- (cmdline_parse_inst_t *)&cmd_set_vxlan_tos_ttl,
767- (cmdline_parse_inst_t *)&cmd_set_vxlan_with_vlan,
768- (cmdline_parse_inst_t *)&cmd_set_nvgre,
769- (cmdline_parse_inst_t *)&cmd_set_nvgre_with_vlan,
770- (cmdline_parse_inst_t *)&cmd_set_l2_encap,
771- (cmdline_parse_inst_t *)&cmd_set_l2_encap_with_vlan,
772- (cmdline_parse_inst_t *)&cmd_set_l2_decap,
773- (cmdline_parse_inst_t *)&cmd_set_l2_decap_with_vlan,
774- (cmdline_parse_inst_t *)&cmd_set_mplsogre_encap,
775- (cmdline_parse_inst_t *)&cmd_set_mplsogre_encap_with_vlan,
776- (cmdline_parse_inst_t *)&cmd_set_mplsogre_decap,
777- (cmdline_parse_inst_t *)&cmd_set_mplsogre_decap_with_vlan,
778- (cmdline_parse_inst_t *)&cmd_set_mplsoudp_encap,
779- (cmdline_parse_inst_t *)&cmd_set_mplsoudp_encap_with_vlan,
780- (cmdline_parse_inst_t *)&cmd_set_mplsoudp_decap,
781- (cmdline_parse_inst_t *)&cmd_set_mplsoudp_decap_with_vlan,
782- (cmdline_parse_inst_t *)&cmd_set_conntrack_common,
783- (cmdline_parse_inst_t *)&cmd_set_conntrack_dir,
784- (cmdline_parse_inst_t *)&cmd_ddp_add,
785- (cmdline_parse_inst_t *)&cmd_ddp_del,
786- (cmdline_parse_inst_t *)&cmd_ddp_get_list,
787- (cmdline_parse_inst_t *)&cmd_ddp_get_info,
788- (cmdline_parse_inst_t *)&cmd_cfg_input_set,
789- (cmdline_parse_inst_t *)&cmd_clear_input_set,
790- (cmdline_parse_inst_t *)&cmd_show_vf_stats,
791- (cmdline_parse_inst_t *)&cmd_clear_vf_stats,
792- (cmdline_parse_inst_t *)&cmd_show_port_supported_ptypes,
793- (cmdline_parse_inst_t *)&cmd_set_port_ptypes,
794- (cmdline_parse_inst_t *)&cmd_ptype_mapping_get,
795- (cmdline_parse_inst_t *)&cmd_ptype_mapping_replace,
796- (cmdline_parse_inst_t *)&cmd_ptype_mapping_reset,
797- (cmdline_parse_inst_t *)&cmd_ptype_mapping_update,
798-
799- (cmdline_parse_inst_t *)&cmd_pctype_mapping_get,
800- (cmdline_parse_inst_t *)&cmd_pctype_mapping_reset,
801- (cmdline_parse_inst_t *)&cmd_pctype_mapping_update,
802- (cmdline_parse_inst_t *)&cmd_queue_region,
803- (cmdline_parse_inst_t *)&cmd_region_flowtype,
804- (cmdline_parse_inst_t *)&cmd_user_priority_region,
805- (cmdline_parse_inst_t *)&cmd_flush_queue_region,
806- (cmdline_parse_inst_t *)&cmd_show_queue_region_info_all,
807- (cmdline_parse_inst_t *)&cmd_show_port_tm_cap,
808- (cmdline_parse_inst_t *)&cmd_show_port_tm_level_cap,
809- (cmdline_parse_inst_t *)&cmd_show_port_tm_node_cap,
810- (cmdline_parse_inst_t *)&cmd_show_port_tm_node_type,
811- (cmdline_parse_inst_t *)&cmd_show_port_tm_node_stats,
812- (cmdline_parse_inst_t *)&cmd_add_port_tm_node_shaper_profile,
813- (cmdline_parse_inst_t *)&cmd_del_port_tm_node_shaper_profile,
814- (cmdline_parse_inst_t *)&cmd_add_port_tm_node_shared_shaper,
815- (cmdline_parse_inst_t *)&cmd_del_port_tm_node_shared_shaper,
816- (cmdline_parse_inst_t *)&cmd_add_port_tm_node_wred_profile,
817- (cmdline_parse_inst_t *)&cmd_del_port_tm_node_wred_profile,
818- (cmdline_parse_inst_t *)&cmd_set_port_tm_node_shaper_profile,
819- (cmdline_parse_inst_t *)&cmd_add_port_tm_nonleaf_node,
820- (cmdline_parse_inst_t *)&cmd_add_port_tm_nonleaf_node_pmode,
821- (cmdline_parse_inst_t *)&cmd_add_port_tm_leaf_node,
822- (cmdline_parse_inst_t *)&cmd_del_port_tm_node,
823- (cmdline_parse_inst_t *)&cmd_set_port_tm_node_parent,
824- (cmdline_parse_inst_t *)&cmd_suspend_port_tm_node,
825- (cmdline_parse_inst_t *)&cmd_resume_port_tm_node,
826- (cmdline_parse_inst_t *)&cmd_port_tm_hierarchy_commit,
827- (cmdline_parse_inst_t *)&cmd_port_tm_mark_ip_ecn,
828- (cmdline_parse_inst_t *)&cmd_port_tm_mark_ip_dscp,
829- (cmdline_parse_inst_t *)&cmd_port_tm_mark_vlan_dei,
830- (cmdline_parse_inst_t *)&cmd_cfg_tunnel_udp_port,
831- (cmdline_parse_inst_t *)&cmd_rx_offload_get_capa,
832- (cmdline_parse_inst_t *)&cmd_rx_offload_get_configuration,
833- (cmdline_parse_inst_t *)&cmd_config_per_port_rx_offload,
834- (cmdline_parse_inst_t *)&cmd_config_per_queue_rx_offload,
835- (cmdline_parse_inst_t *)&cmd_tx_offload_get_capa,
836- (cmdline_parse_inst_t *)&cmd_tx_offload_get_configuration,
837- (cmdline_parse_inst_t *)&cmd_config_per_port_tx_offload,
838- (cmdline_parse_inst_t *)&cmd_config_per_queue_tx_offload,
839+ &cmd_set_flow_director_ip_mask,
840+ &cmd_set_flow_director_mac_vlan_mask,
841+ &cmd_set_flow_director_tunnel_mask,
842+ &cmd_set_flow_director_flex_payload,
843+ &cmd_flow,
844+ &cmd_show_port_meter_cap,
845+ &cmd_add_port_meter_profile_srtcm,
846+ &cmd_add_port_meter_profile_trtcm,
847+ &cmd_add_port_meter_profile_trtcm_rfc4115,
848+ &cmd_del_port_meter_profile,
849+ &cmd_create_port_meter,
850+ &cmd_enable_port_meter,
851+ &cmd_disable_port_meter,
852+ &cmd_del_port_meter,
853+ &cmd_del_port_meter_policy,
854+ &cmd_set_port_meter_profile,
855+ &cmd_set_port_meter_dscp_table,
856+ &cmd_set_port_meter_stats_mask,
857+ &cmd_show_port_meter_stats,
858+ &cmd_mcast_addr,
859+ &cmd_set_vf_vlan_anti_spoof,
860+ &cmd_set_vf_mac_anti_spoof,
861+ &cmd_set_vf_vlan_stripq,
862+ &cmd_set_vf_vlan_insert,
863+ &cmd_set_tx_loopback,
864+ &cmd_set_all_queues_drop_en,
865+ &cmd_set_vf_split_drop_en,
866+ &cmd_set_macsec_offload_on,
867+ &cmd_set_macsec_offload_off,
868+ &cmd_set_macsec_sc,
869+ &cmd_set_macsec_sa,
870+ &cmd_set_vf_traffic,
871+ &cmd_set_vf_rxmode,
872+ &cmd_vf_rate_limit,
873+ &cmd_vf_rxvlan_filter,
874+ &cmd_set_vf_mac_addr,
875+ &cmd_set_vf_promisc,
876+ &cmd_set_vf_allmulti,
877+ &cmd_set_vf_broadcast,
878+ &cmd_set_vf_vlan_tag,
879+ &cmd_vf_max_bw,
880+ &cmd_vf_tc_min_bw,
881+ &cmd_vf_tc_max_bw,
882+ &cmd_strict_link_prio,
883+ &cmd_tc_min_bw,
884+ &cmd_set_vxlan,
885+ &cmd_set_vxlan_tos_ttl,
886+ &cmd_set_vxlan_with_vlan,
887+ &cmd_set_nvgre,
888+ &cmd_set_nvgre_with_vlan,
889+ &cmd_set_l2_encap,
890+ &cmd_set_l2_encap_with_vlan,
891+ &cmd_set_l2_decap,
892+ &cmd_set_l2_decap_with_vlan,
893+ &cmd_set_mplsogre_encap,
894+ &cmd_set_mplsogre_encap_with_vlan,
895+ &cmd_set_mplsogre_decap,
896+ &cmd_set_mplsogre_decap_with_vlan,
897+ &cmd_set_mplsoudp_encap,
898+ &cmd_set_mplsoudp_encap_with_vlan,
899+ &cmd_set_mplsoudp_decap,
900+ &cmd_set_mplsoudp_decap_with_vlan,
901+ &cmd_set_conntrack_common,
902+ &cmd_set_conntrack_dir,
903+ &cmd_ddp_add,
904+ &cmd_ddp_del,
905+ &cmd_ddp_get_list,
906+ &cmd_ddp_get_info,
907+ &cmd_cfg_input_set,
908+ &cmd_clear_input_set,
909+ &cmd_show_vf_stats,
910+ &cmd_clear_vf_stats,
911+ &cmd_show_port_supported_ptypes,
912+ &cmd_set_port_ptypes,
913+ &cmd_ptype_mapping_get,
914+ &cmd_ptype_mapping_replace,
915+ &cmd_ptype_mapping_reset,
916+ &cmd_ptype_mapping_update,
917+
918+ &cmd_pctype_mapping_get,
919+ &cmd_pctype_mapping_reset,
920+ &cmd_pctype_mapping_update,
921+ &cmd_queue_region,
922+ &cmd_region_flowtype,
923+ &cmd_user_priority_region,
924+ &cmd_flush_queue_region,
925+ &cmd_show_queue_region_info_all,
926+ &cmd_show_port_tm_cap,
927+ &cmd_show_port_tm_level_cap,
928+ &cmd_show_port_tm_node_cap,
929+ &cmd_show_port_tm_node_type,
930+ &cmd_show_port_tm_node_stats,
931+ &cmd_add_port_tm_node_shaper_profile,
932+ &cmd_del_port_tm_node_shaper_profile,
933+ &cmd_add_port_tm_node_shared_shaper,
934+ &cmd_del_port_tm_node_shared_shaper,
935+ &cmd_add_port_tm_node_wred_profile,
936+ &cmd_del_port_tm_node_wred_profile,
937+ &cmd_set_port_tm_node_shaper_profile,
938+ &cmd_add_port_tm_nonleaf_node,
939+ &cmd_add_port_tm_nonleaf_node_pmode,
940+ &cmd_add_port_tm_leaf_node,
941+ &cmd_del_port_tm_node,
942+ &cmd_set_port_tm_node_parent,
943+ &cmd_suspend_port_tm_node,
944+ &cmd_resume_port_tm_node,
945+ &cmd_port_tm_hierarchy_commit,
946+ &cmd_port_tm_mark_ip_ecn,
947+ &cmd_port_tm_mark_ip_dscp,
948+ &cmd_port_tm_mark_vlan_dei,
949+ &cmd_cfg_tunnel_udp_port,
950+ &cmd_rx_offload_get_capa,
951+ &cmd_rx_offload_get_configuration,
952+ &cmd_config_per_port_rx_offload,
953+ &cmd_config_per_queue_rx_offload,
954+ &cmd_tx_offload_get_capa,
955+ &cmd_tx_offload_get_configuration,
956+ &cmd_config_per_port_tx_offload,
957+ &cmd_config_per_queue_tx_offload,
958 #ifdef RTE_LIB_BPF
959- (cmdline_parse_inst_t *)&cmd_operate_bpf_ld_parse,
960- (cmdline_parse_inst_t *)&cmd_operate_bpf_unld_parse,
961+ &cmd_operate_bpf_ld_parse,
962+ &cmd_operate_bpf_unld_parse,
963 #endif
964- (cmdline_parse_inst_t *)&cmd_config_tx_metadata_specific,
965- (cmdline_parse_inst_t *)&cmd_show_tx_metadata,
966- (cmdline_parse_inst_t *)&cmd_show_rx_tx_desc_status,
967- (cmdline_parse_inst_t *)&cmd_show_rx_queue_desc_used_count,
968- (cmdline_parse_inst_t *)&cmd_set_raw,
969- (cmdline_parse_inst_t *)&cmd_show_set_raw,
970- (cmdline_parse_inst_t *)&cmd_show_set_raw_all,
971- (cmdline_parse_inst_t *)&cmd_config_tx_dynf_specific,
972- (cmdline_parse_inst_t *)&cmd_show_fec_mode,
973- (cmdline_parse_inst_t *)&cmd_set_fec_mode,
974- (cmdline_parse_inst_t *)&cmd_show_capability,
975- (cmdline_parse_inst_t *)&cmd_set_flex_is_pattern,
976- (cmdline_parse_inst_t *)&cmd_set_flex_spec_pattern,
977+ &cmd_config_tx_metadata_specific,
978+ &cmd_show_tx_metadata,
979+ &cmd_show_rx_tx_desc_status,
980+ &cmd_show_rx_queue_desc_used_count,
981+ &cmd_set_raw,
982+ &cmd_show_set_raw,
983+ &cmd_show_set_raw_all,
984+ &cmd_config_tx_dynf_specific,
985+ &cmd_show_fec_mode,
986+ &cmd_set_fec_mode,
987+ &cmd_show_capability,
988+ &cmd_set_flex_is_pattern,
989+ &cmd_set_flex_spec_pattern,
990 NULL,
991 };
992
993@@ -18041,35 +18041,29 @@ cmdline_read_from_file(const char *filename)
994 printf("Read CLI commands from %s\n", filename);
995 }
996
997+void
998+prompt_exit(void)
999+{
1000+ cmdline_quit(testpmd_cl);
1001+}
1002+
1003 /* prompt function, called from main on MAIN lcore */
1004 void
1005 prompt(void)
1006 {
1007- int ret;
1008 /* initialize non-constant commands */
1009 cmd_set_fwd_mode_init();
1010 cmd_set_fwd_retry_mode_init();
1011
1012 testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> ");
1013- if (testpmd_cl == NULL)
1014+ if (testpmd_cl == NULL) {
1015+ fprintf(stderr,
1016+ "Failed to create stdin based cmdline context\n");
1017 return;
1018-
1019- ret = atexit(prompt_exit);
1020- if (ret != 0)
1021- fprintf(stderr, "Cannot set exit function for cmdline\n");
1022+ }
1023
1024 cmdline_interact(testpmd_cl);
1025- if (ret != 0)
1026- cmdline_stdin_exit(testpmd_cl);
1027-}
1028-
1029-void
1030-prompt_exit(void)
1031-{
1032- if (testpmd_cl != NULL) {
1033- cmdline_quit(testpmd_cl);
1034- cmdline_stdin_exit(testpmd_cl);
1035- }
1036+ cmdline_stdin_exit(testpmd_cl);
1037 }
1038
1039 static void
1040diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
1041index 5c4544a..cf12463 100644
1042--- a/app/test-pmd/cmdline_flow.c
1043+++ b/app/test-pmd/cmdline_flow.c
1044@@ -86,7 +86,6 @@ enum index {
1045 FLEX,
1046
1047 /* Flex arguments */
1048- FLEX_ITEM_INIT,
1049 FLEX_ITEM_CREATE,
1050 FLEX_ITEM_DESTROY,
1051
1052@@ -921,7 +920,6 @@ struct parse_action_priv {
1053 })
1054
1055 static const enum index next_flex_item[] = {
1056- FLEX_ITEM_INIT,
1057 FLEX_ITEM_CREATE,
1058 FLEX_ITEM_DESTROY,
1059 ZERO,
1060@@ -2316,15 +2314,6 @@ static const struct token token_list[] = {
1061 .next = NEXT(next_flex_item),
1062 .call = parse_flex,
1063 },
1064- [FLEX_ITEM_INIT] = {
1065- .name = "init",
1066- .help = "flex item init",
1067- .args = ARGS(ARGS_ENTRY(struct buffer, args.flex.token),
1068- ARGS_ENTRY(struct buffer, port)),
1069- .next = NEXT(NEXT_ENTRY(COMMON_FLEX_TOKEN),
1070- NEXT_ENTRY(COMMON_PORT_ID)),
1071- .call = parse_flex
1072- },
1073 [FLEX_ITEM_CREATE] = {
1074 .name = "create",
1075 .help = "flex item create",
1076@@ -3781,9 +3770,12 @@ static const struct token token_list[] = {
1077 [ITEM_CONNTRACK] = {
1078 .name = "conntrack",
1079 .help = "conntrack state",
1080+ .priv = PRIV_ITEM(CONNTRACK,
1081+ sizeof(struct rte_flow_item_conntrack)),
1082 .next = NEXT(NEXT_ENTRY(ITEM_NEXT), NEXT_ENTRY(COMMON_UNSIGNED),
1083 item_param),
1084 .args = ARGS(ARGS_ENTRY(struct rte_flow_item_conntrack, flags)),
1085+ .call = parse_vc,
1086 },
1087 [ITEM_PORT_REPRESENTOR] = {
1088 .name = "port_representor",
1089@@ -7491,7 +7483,6 @@ parse_flex(struct context *ctx, const struct token *token,
1090 switch (ctx->curr) {
1091 default:
1092 break;
1093- case FLEX_ITEM_INIT:
1094 case FLEX_ITEM_CREATE:
1095 case FLEX_ITEM_DESTROY:
1096 out->command = ctx->curr;
1097diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
1098index cb57673..ad215c7 100644
1099--- a/app/test-pmd/config.c
1100+++ b/app/test-pmd/config.c
1101@@ -2063,7 +2063,7 @@ port_meter_policy_add(portid_t port_id, uint32_t policy_id,
1102 for (act_n = 0, start = act;
1103 act->type != RTE_FLOW_ACTION_TYPE_END; act++)
1104 act_n++;
1105- if (act_n && act->type == RTE_FLOW_ACTION_TYPE_END)
1106+ if (act_n > 0)
1107 policy.actions[i] = start;
1108 else
1109 policy.actions[i] = NULL;
1110@@ -2450,8 +2450,10 @@ port_flow_aged(portid_t port_id, uint8_t destroy)
1111 }
1112 type = (enum age_action_context_type *)contexts[idx];
1113 switch (*type) {
1114- case ACTION_AGE_CONTEXT_TYPE_FLOW:
1115+ case ACTION_AGE_CONTEXT_TYPE_FLOW: {
1116+ uint32_t flow_id;
1117 ctx.pf = container_of(type, struct port_flow, age_type);
1118+ flow_id = ctx.pf->id;
1119 printf("%-20s\t%" PRIu32 "\t%" PRIu32 "\t%" PRIu32
1120 "\t%c%c%c\t\n",
1121 "Flow",
1122@@ -2462,9 +2464,10 @@ port_flow_aged(portid_t port_id, uint8_t destroy)
1123 ctx.pf->rule.attr->egress ? 'e' : '-',
1124 ctx.pf->rule.attr->transfer ? 't' : '-');
1125 if (destroy && !port_flow_destroy(port_id, 1,
1126- &ctx.pf->id))
1127+ &flow_id))
1128 total++;
1129 break;
1130+ }
1131 case ACTION_AGE_CONTEXT_TYPE_INDIRECT_ACTION:
1132 ctx.pia = container_of(type,
1133 struct port_indirect_action, age_type);
1134@@ -3144,9 +3147,9 @@ fwd_stream_on_other_lcores(uint16_t domain_id, lcoreid_t src_lc,
1135 continue;
1136 printf("Shared Rx queue group %u queue %hu can't be scheduled on different cores:\n",
1137 share_group, share_rxq);
1138- printf(" lcore %hhu Port %hu queue %hu\n",
1139+ printf(" lcore %u Port %hu queue %hu\n",
1140 src_lc, src_port, src_rxq);
1141- printf(" lcore %hhu Port %hu queue %hu\n",
1142+ printf(" lcore %u Port %hu queue %hu\n",
1143 lc_id, fs->rx_port, fs->rx_queue);
1144 printf("Please use --nb-cores=%hu to limit number of forwarding cores\n",
1145 nb_rxq);
1146@@ -3518,7 +3521,7 @@ icmp_echo_config_setup(void)
1147 lcoreid_t lc_id;
1148 uint16_t sm_id;
1149
1150- if ((nb_txq * nb_fwd_ports) < nb_fwd_lcores)
1151+ if ((lcoreid_t)(nb_txq * nb_fwd_ports) < nb_fwd_lcores)
1152 cur_fwd_config.nb_fwd_lcores = (lcoreid_t)
1153 (nb_txq * nb_fwd_ports);
1154 else
1155diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
1156index 5e494c4..37cddf4 100644
1157--- a/app/test-pmd/csumonly.c
1158+++ b/app/test-pmd/csumonly.c
1159@@ -562,15 +562,17 @@ process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
1160 uint64_t ol_flags = 0;
1161
1162 if (info->outer_ethertype == _htons(RTE_ETHER_TYPE_IPV4)) {
1163- ipv4_hdr->hdr_checksum = 0;
1164 ol_flags |= RTE_MBUF_F_TX_OUTER_IPV4;
1165
1166- if (tx_offloads & RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM)
1167+ if (tx_offloads & RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM) {
1168 ol_flags |= RTE_MBUF_F_TX_OUTER_IP_CKSUM;
1169- else
1170+ } else {
1171+ ipv4_hdr->hdr_checksum = 0;
1172 ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr);
1173- } else
1174+ }
1175+ } else {
1176 ol_flags |= RTE_MBUF_F_TX_OUTER_IPV6;
1177+ }
1178
1179 if (info->outer_l4_proto != IPPROTO_UDP)
1180 return ol_flags;
1181@@ -583,13 +585,6 @@ process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
1182
1183 /* Skip SW outer UDP checksum generation if HW supports it */
1184 if (tx_offloads & RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM) {
1185- if (info->outer_ethertype == _htons(RTE_ETHER_TYPE_IPV4))
1186- udp_hdr->dgram_cksum
1187- = rte_ipv4_phdr_cksum(ipv4_hdr, ol_flags);
1188- else
1189- udp_hdr->dgram_cksum
1190- = rte_ipv6_phdr_cksum(ipv6_hdr, ol_flags);
1191-
1192 ol_flags |= RTE_MBUF_F_TX_OUTER_UDP_CKSUM;
1193 return ol_flags;
1194 }
1195diff --git a/app/test-pmd/ieee1588fwd.c b/app/test-pmd/ieee1588fwd.c
1196index 896d5ef..8d9ce4d 100644
1197--- a/app/test-pmd/ieee1588fwd.c
1198+++ b/app/test-pmd/ieee1588fwd.c
1199@@ -201,14 +201,23 @@ ieee1588_packet_fwd(struct fwd_stream *fs)
1200 static int
1201 port_ieee1588_fwd_begin(portid_t pi)
1202 {
1203- rte_eth_timesync_enable(pi);
1204- return 0;
1205+ int ret;
1206+
1207+ ret = rte_eth_timesync_enable(pi);
1208+ if (ret)
1209+ printf("Port %u enable PTP failed, ret = %d\n", pi, ret);
1210+
1211+ return ret;
1212 }
1213
1214 static void
1215 port_ieee1588_fwd_end(portid_t pi)
1216 {
1217- rte_eth_timesync_disable(pi);
1218+ int ret;
1219+
1220+ ret = rte_eth_timesync_disable(pi);
1221+ if (ret)
1222+ printf("Port %u disable PTP failed, ret = %d\n", pi, ret);
1223 }
1224
1225 static void
1226diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
1227index a6a4bf8..411c07c 100644
1228--- a/app/test-pmd/parameters.c
1229+++ b/app/test-pmd/parameters.c
1230@@ -869,8 +869,8 @@ launch_args_parse(int argc, char** argv)
1231 }
1232 if (!strcmp(lgopts[opt_idx].name, "nb-cores")) {
1233 n = atoi(optarg);
1234- if (n > 0 && n <= nb_lcores)
1235- nb_fwd_lcores = (uint8_t) n;
1236+ if (n > 0 && (lcoreid_t)n <= nb_lcores)
1237+ nb_fwd_lcores = (lcoreid_t) n;
1238 else
1239 rte_exit(EXIT_FAILURE,
1240 "nb-cores should be > 0 and <= %d\n",
1241diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
1242index 5f34641..fbfc090 100644
1243--- a/app/test-pmd/testpmd.c
1244+++ b/app/test-pmd/testpmd.c
1245@@ -228,7 +228,7 @@ unsigned int xstats_display_num; /**< Size of extended statistics to show */
1246 * In container, it cannot terminate the process which running with 'stats-period'
1247 * option. Set flag to exit stats period loop after received SIGINT/SIGTERM.
1248 */
1249-static volatile uint8_t f_quit;
1250+volatile uint8_t f_quit;
1251 uint8_t cl_quit; /* Quit testpmd from cmdline. */
1252
1253 /*
1254@@ -4301,13 +4301,6 @@ init_port(void)
1255 }
1256
1257 static void
1258-force_quit(void)
1259-{
1260- pmd_test_exit();
1261- prompt_exit();
1262-}
1263-
1264-static void
1265 print_stats(void)
1266 {
1267 uint8_t i;
1268@@ -4325,28 +4318,10 @@ print_stats(void)
1269 }
1270
1271 static void
1272-signal_handler(int signum)
1273+signal_handler(int signum __rte_unused)
1274 {
1275- if (signum == SIGINT || signum == SIGTERM) {
1276- fprintf(stderr, "\nSignal %d received, preparing to exit...\n",
1277- signum);
1278-#ifdef RTE_LIB_PDUMP
1279- /* uninitialize packet capture framework */
1280- rte_pdump_uninit();
1281-#endif
1282-#ifdef RTE_LIB_LATENCYSTATS
1283- if (latencystats_enabled != 0)
1284- rte_latencystats_uninit();
1285-#endif
1286- force_quit();
1287- /* Set flag to indicate the force termination. */
1288- f_quit = 1;
1289- /* exit with the expected status */
1290-#ifndef RTE_EXEC_ENV_WINDOWS
1291- signal(signum, SIG_DFL);
1292- kill(getpid(), signum);
1293-#endif
1294- }
1295+ f_quit = 1;
1296+ prompt_exit();
1297 }
1298
1299 int
1300@@ -4357,8 +4332,18 @@ main(int argc, char** argv)
1301 uint16_t count;
1302 int ret;
1303
1304+#ifdef RTE_EXEC_ENV_WINDOWS
1305 signal(SIGINT, signal_handler);
1306 signal(SIGTERM, signal_handler);
1307+#else
1308+ /* Want read() not to be restarted on signal */
1309+ struct sigaction action = {
1310+ .sa_handler = signal_handler,
1311+ };
1312+
1313+ sigaction(SIGINT, &action, NULL);
1314+ sigaction(SIGTERM, &action, NULL);
1315+#endif
1316
1317 testpmd_logtype = rte_log_register("testpmd");
1318 if (testpmd_logtype < 0)
1319@@ -4522,15 +4507,9 @@ main(int argc, char** argv)
1320 start_packet_forwarding(0);
1321 }
1322 prompt();
1323- pmd_test_exit();
1324 } else
1325 #endif
1326 {
1327- char c;
1328- int rc;
1329-
1330- f_quit = 0;
1331-
1332 printf("No commandline core given, start packet forwarding\n");
1333 start_packet_forwarding(tx_first);
1334 if (stats_period != 0) {
1335@@ -4553,15 +4532,33 @@ main(int argc, char** argv)
1336 prev_time = cur_time;
1337 rte_delay_us_sleep(US_PER_S);
1338 }
1339- }
1340+ } else {
1341+ char c;
1342
1343- printf("Press enter to exit\n");
1344- rc = read(0, &c, 1);
1345- pmd_test_exit();
1346- if (rc < 0)
1347- return 1;
1348+ printf("Press enter to exit\n");
1349+ while (f_quit == 0) {
1350+ /* end-of-file or any character exits loop */
1351+ if (read(0, &c, 1) >= 0)
1352+ break;
1353+ if (errno == EINTR)
1354+ continue;
1355+ rte_exit(EXIT_FAILURE, "Read failed: %s\n",
1356+ strerror(errno));
1357+ }
1358+ }
1359 }
1360
1361+ pmd_test_exit();
1362+
1363+#ifdef RTE_LIB_PDUMP
1364+ /* uninitialize packet capture framework */
1365+ rte_pdump_uninit();
1366+#endif
1367+#ifdef RTE_LIB_LATENCYSTATS
1368+ if (latencystats_enabled != 0)
1369+ rte_latencystats_uninit();
1370+#endif
1371+
1372 ret = rte_eal_cleanup();
1373 if (ret != 0)
1374 rte_exit(EXIT_FAILURE,
1375diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
1376index e53320e..e161810 100644
1377--- a/app/test-pmd/testpmd.h
1378+++ b/app/test-pmd/testpmd.h
1379@@ -33,6 +33,7 @@
1380 #define RTE_PORT_HANDLING (uint16_t)3
1381
1382 extern uint8_t cl_quit;
1383+extern volatile uint8_t f_quit;
1384
1385 /*
1386 * It is used to allocate the memory for hash key.
1387@@ -76,7 +77,7 @@ extern uint8_t cl_quit;
1388
1389 #define MIN_TOTAL_NUM_MBUFS 1024
1390
1391-typedef uint8_t lcoreid_t;
1392+typedef uint32_t lcoreid_t;
1393 typedef uint16_t portid_t;
1394 typedef uint16_t queueid_t;
1395 typedef uint16_t streamid_t;
1396diff --git a/app/test/test_common.c b/app/test/test_common.c
1397index f89e1eb..372bb8f 100644
1398--- a/app/test/test_common.c
1399+++ b/app/test/test_common.c
1400@@ -8,11 +8,12 @@
1401 #include <math.h>
1402 #include <rte_common.h>
1403 #include <rte_hexdump.h>
1404+#include <rte_random.h>
1405 #include <rte_pause.h>
1406
1407 #include "test.h"
1408
1409-#define MAX_NUM 1 << 20
1410+#define MAX_NUM (1 << 20)
1411
1412 #define FAIL(x)\
1413 {printf(x "() test failed!\n");\
1414@@ -217,19 +218,21 @@ test_align(void)
1415 }
1416 }
1417
1418- for (p = 1; p <= MAX_NUM / 2; p++) {
1419- for (i = 1; i <= MAX_NUM / 2; i++) {
1420- val = RTE_ALIGN_MUL_CEIL(i, p);
1421- if (val % p != 0 || val < i)
1422- FAIL_ALIGN("RTE_ALIGN_MUL_CEIL", i, p);
1423- val = RTE_ALIGN_MUL_FLOOR(i, p);
1424- if (val % p != 0 || val > i)
1425- FAIL_ALIGN("RTE_ALIGN_MUL_FLOOR", i, p);
1426- val = RTE_ALIGN_MUL_NEAR(i, p);
1427- if (val % p != 0 || ((val != RTE_ALIGN_MUL_CEIL(i, p))
1428- & (val != RTE_ALIGN_MUL_FLOOR(i, p))))
1429- FAIL_ALIGN("RTE_ALIGN_MUL_NEAR", i, p);
1430- }
1431+ /* testing the whole space of 2^20^2 takes too long. */
1432+ for (j = 1; j <= MAX_NUM ; j++) {
1433+ i = rte_rand_max(MAX_NUM - 1) + 1;
1434+ p = rte_rand_max(MAX_NUM - 1) + 1;
1435+
1436+ val = RTE_ALIGN_MUL_CEIL(i, p);
1437+ if (val % p != 0 || val < i)
1438+ FAIL_ALIGN("RTE_ALIGN_MUL_CEIL", i, p);
1439+ val = RTE_ALIGN_MUL_FLOOR(i, p);
1440+ if (val % p != 0 || val > i)
1441+ FAIL_ALIGN("RTE_ALIGN_MUL_FLOOR", i, p);
1442+ val = RTE_ALIGN_MUL_NEAR(i, p);
1443+ if (val % p != 0 || ((val != RTE_ALIGN_MUL_CEIL(i, p))
1444+ & (val != RTE_ALIGN_MUL_FLOOR(i, p))))
1445+ FAIL_ALIGN("RTE_ALIGN_MUL_NEAR", i, p);
1446 }
1447
1448 return 0;
1449diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
1450index 0bd4517..245d514 100644
1451--- a/app/test/test_cryptodev.c
1452+++ b/app/test/test_cryptodev.c
1453@@ -6,6 +6,7 @@
1454 #include <time.h>
1455
1456 #include <rte_common.h>
1457+#include <rte_errno.h>
1458 #include <rte_hexdump.h>
1459 #include <rte_mbuf.h>
1460 #include <rte_malloc.h>
1461@@ -8414,7 +8415,7 @@ static int test_pdcp_proto(int i, int oop, enum rte_crypto_cipher_operation opc,
1462 /* Out of place support */
1463 if (oop) {
1464 /*
1465- * For out-op-place we need to alloc another mbuf
1466+ * For out-of-place we need to alloc another mbuf
1467 */
1468 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1469 rte_pktmbuf_append(ut_params->obuf, output_vec_len);
1470@@ -8616,7 +8617,7 @@ test_pdcp_proto_SGL(int i, int oop,
1471 /* Out of place support */
1472 if (oop) {
1473 /*
1474- * For out-op-place we need to alloc another mbuf
1475+ * For out-of-place we need to alloc another mbuf
1476 */
1477 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1478 rte_pktmbuf_append(ut_params->obuf, frag_size_oop);
1479@@ -11830,6 +11831,12 @@ test_enq_callback_setup(void)
1480 /* Test with invalid crypto device */
1481 cb = rte_cryptodev_add_enq_callback(RTE_CRYPTO_MAX_DEVS,
1482 qp_id, test_enq_callback, NULL);
1483+ if (rte_errno == ENOTSUP) {
1484+ RTE_LOG(ERR, USER1, "%s line %d: "
1485+ "rte_cryptodev_add_enq_callback() "
1486+ "Not supported, skipped\n", __func__, __LINE__);
1487+ return TEST_SKIPPED;
1488+ }
1489 TEST_ASSERT_NULL(cb, "Add callback on qp %u on "
1490 "cryptodev %u did not fail",
1491 qp_id, RTE_CRYPTO_MAX_DEVS);
1492@@ -11930,6 +11937,12 @@ test_deq_callback_setup(void)
1493 /* Test with invalid crypto device */
1494 cb = rte_cryptodev_add_deq_callback(RTE_CRYPTO_MAX_DEVS,
1495 qp_id, test_deq_callback, NULL);
1496+ if (rte_errno == ENOTSUP) {
1497+ RTE_LOG(ERR, USER1, "%s line %d: "
1498+ "rte_cryptodev_add_deq_callback() "
1499+ "Not supported, skipped\n", __func__, __LINE__);
1500+ return TEST_SKIPPED;
1501+ }
1502 TEST_ASSERT_NULL(cb, "Add callback on qp %u on "
1503 "cryptodev %u did not fail",
1504 qp_id, RTE_CRYPTO_MAX_DEVS);
1505@@ -13713,7 +13726,7 @@ test_authenticated_encryption_SGL(const struct aead_test_data *tdata,
1506 }
1507
1508 /*
1509- * For out-op-place we need to alloc another mbuf
1510+ * For out-of-place we need to alloc another mbuf
1511 */
1512 if (oop) {
1513 ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
1514diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
1515index 952b927..68cfc64 100644
1516--- a/app/test/test_cryptodev_asym.c
1517+++ b/app/test/test_cryptodev_asym.c
1518@@ -54,11 +54,15 @@ union test_case_structure {
1519 struct rsa_test_data_2 rsa_data;
1520 };
1521
1522+struct vector_details {
1523+ uint32_t vector_size;
1524+ const void *address;
1525+};
1526 struct test_cases_array {
1527 uint32_t size;
1528- const void *address[TEST_VECTOR_SIZE];
1529+ struct vector_details details[TEST_VECTOR_SIZE];
1530 };
1531-static struct test_cases_array test_vector = {0, { NULL } };
1532+static struct test_cases_array test_vector = {0, {} };
1533
1534 static uint32_t test_index;
1535
1536@@ -525,14 +529,14 @@ error_exit:
1537 }
1538
1539 static int
1540-test_one_case(const void *test_case, int sessionless)
1541+test_one_case(struct vector_details test_case, int sessionless)
1542 {
1543 int status = TEST_SUCCESS, i = 0;
1544 char test_msg[ASYM_TEST_MSG_LEN + 1];
1545
1546 /* Map the case to union */
1547 union test_case_structure tc;
1548- memcpy(&tc, test_case, sizeof(tc));
1549+ rte_memcpy(&tc, test_case.address, RTE_MIN(sizeof(tc), test_case.vector_size));
1550
1551 if (tc.modex.xform_type == RTE_CRYPTO_ASYM_XFORM_MODEX
1552 || tc.modex.xform_type == RTE_CRYPTO_ASYM_XFORM_MODINV) {
1553@@ -584,7 +588,8 @@ load_test_vectors(void)
1554 "TEST_VECTOR_SIZE too small\n");
1555 return -1;
1556 }
1557- test_vector.address[test_vector.size] = &modex_test_case[i];
1558+ test_vector.details[test_vector.size].address = &modex_test_case[i];
1559+ test_vector.details[test_vector.size].vector_size = sizeof(modex_test_case[i]);
1560 test_vector.size++;
1561 }
1562 /* Load MODINV vector*/
1563@@ -595,7 +600,8 @@ load_test_vectors(void)
1564 "TEST_VECTOR_SIZE too small\n");
1565 return -1;
1566 }
1567- test_vector.address[test_vector.size] = &modinv_test_case[i];
1568+ test_vector.details[test_vector.size].address = &modinv_test_case[i];
1569+ test_vector.details[test_vector.size].vector_size = sizeof(modinv_test_case[i]);
1570 test_vector.size++;
1571 }
1572 /* Load RSA vector*/
1573@@ -606,7 +612,8 @@ load_test_vectors(void)
1574 "TEST_VECTOR_SIZE too small\n");
1575 return -1;
1576 }
1577- test_vector.address[test_vector.size] = &rsa_test_case_list[i];
1578+ test_vector.details[test_vector.size].address = &rsa_test_case_list[i];
1579+ test_vector.details[test_vector.size].vector_size = sizeof(rsa_test_case_list[i]);
1580 test_vector.size++;
1581 }
1582 return 0;
1583@@ -631,12 +638,12 @@ test_one_by_one(void)
1584 /* Go through all test cases */
1585 test_index = 0;
1586 for (i = 0; i < test_vector.size; i++) {
1587- if (test_one_case(test_vector.address[i], 0) != TEST_SUCCESS)
1588+ if (test_one_case(test_vector.details[i], 0) != TEST_SUCCESS)
1589 status = TEST_FAILED;
1590 }
1591 if (sessionless) {
1592 for (i = 0; i < test_vector.size; i++) {
1593- if (test_one_case(test_vector.address[i], 1)
1594+ if (test_one_case(test_vector.details[i], 1)
1595 != TEST_SUCCESS)
1596 status = TEST_FAILED;
1597 }
1598@@ -996,8 +1003,6 @@ ut_setup_asym(void)
1599 qp_id, ts_params->valid_devs[0]);
1600 }
1601
1602- rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
1603-
1604 /* Start the device */
1605 TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
1606 "Failed to start cryptodev %u",
1607@@ -1010,9 +1015,6 @@ static void
1608 ut_teardown_asym(void)
1609 {
1610 struct crypto_testsuite_params_asym *ts_params = &testsuite_params;
1611- struct rte_cryptodev_stats stats;
1612-
1613- rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
1614
1615 /* Stop the device */
1616 rte_cryptodev_stop(ts_params->valid_devs[0]);
1617@@ -1068,7 +1070,7 @@ test_capability(void)
1618 RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO)) {
1619 RTE_LOG(INFO, USER1,
1620 "Device doesn't support asymmetric. Test Skipped\n");
1621- return TEST_SUCCESS;
1622+ return TEST_SKIPPED;
1623 }
1624
1625 /* print xform capability */
1626@@ -1083,6 +1085,7 @@ test_capability(void)
1627 capa = rte_cryptodev_asym_capability_get(dev_id,
1628 (const struct
1629 rte_cryptodev_asym_capability_idx *) &idx);
1630+ TEST_ASSERT_NOT_NULL(capa, "Failed to get asymmetric capability");
1631 print_asym_capa(capa);
1632 }
1633 }
1634diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
1635index d7f4c2c..860e11e 100644
1636--- a/app/test/test_eal_flags.c
1637+++ b/app/test/test_eal_flags.c
1638@@ -583,14 +583,14 @@ test_missing_c_flag(void)
1639 launch_proc(argv26) == 0 || launch_proc(argv27) == 0 ||
1640 launch_proc(argv28) == 0 || launch_proc(argv30) == 0) {
1641 printf("Error - "
1642- "process ran without error with invalid --lcore flag\n");
1643+ "process ran without error with invalid --lcores flag\n");
1644 return -1;
1645 }
1646
1647 if (rte_lcore_is_enabled(0) && rte_lcore_is_enabled(1) &&
1648 rte_lcore_is_enabled(2) && rte_lcore_is_enabled(3) &&
1649- rte_lcore_is_enabled(3) && rte_lcore_is_enabled(5) &&
1650- rte_lcore_is_enabled(4) && rte_lcore_is_enabled(7) &&
1651+ rte_lcore_is_enabled(4) && rte_lcore_is_enabled(5) &&
1652+ rte_lcore_is_enabled(6) && rte_lcore_is_enabled(7) &&
1653 launch_proc(argv29) != 0) {
1654 printf("Error - "
1655 "process did not run ok with valid corelist value\n");
1656diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c
1657index ea14094..3dab1ac 100644
1658--- a/app/test/test_event_crypto_adapter.c
1659+++ b/app/test/test_event_crypto_adapter.c
1660@@ -589,21 +589,17 @@ configure_cryptodev(void)
1661
1662 static inline void
1663 evdev_set_conf_values(struct rte_event_dev_config *dev_conf,
1664- struct rte_event_dev_info *info)
1665+ const struct rte_event_dev_info *info)
1666 {
1667- memset(dev_conf, 0, sizeof(struct rte_event_dev_config));
1668- dev_conf->dequeue_timeout_ns = info->min_dequeue_timeout_ns;
1669- dev_conf->nb_event_ports = NB_TEST_PORTS;
1670- dev_conf->nb_event_queues = NB_TEST_QUEUES;
1671- dev_conf->nb_event_queue_flows = info->max_event_queue_flows;
1672- dev_conf->nb_event_port_dequeue_depth =
1673- info->max_event_port_dequeue_depth;
1674- dev_conf->nb_event_port_enqueue_depth =
1675- info->max_event_port_enqueue_depth;
1676- dev_conf->nb_event_port_enqueue_depth =
1677- info->max_event_port_enqueue_depth;
1678- dev_conf->nb_events_limit =
1679- info->max_num_events;
1680+ *dev_conf = (struct rte_event_dev_config) {
1681+ .dequeue_timeout_ns = info->min_dequeue_timeout_ns,
1682+ .nb_event_ports = NB_TEST_PORTS,
1683+ .nb_event_queues = NB_TEST_QUEUES,
1684+ .nb_event_queue_flows = info->max_event_queue_flows,
1685+ .nb_event_port_dequeue_depth = info->max_event_port_dequeue_depth,
1686+ .nb_event_port_enqueue_depth = info->max_event_port_enqueue_depth,
1687+ .nb_events_limit = info->max_num_events,
1688+ };
1689 }
1690
1691 static int
1692diff --git a/app/test/test_fbarray.c b/app/test/test_fbarray.c
1693index a691bf4..8a3a3d7 100644
1694--- a/app/test/test_fbarray.c
1695+++ b/app/test/test_fbarray.c
1696@@ -21,23 +21,41 @@ struct fbarray_testsuite_params {
1697 };
1698
1699 static struct fbarray_testsuite_params param;
1700+static struct fbarray_testsuite_params unaligned;
1701
1702 #define FBARRAY_TEST_ARR_NAME "fbarray_autotest"
1703 #define FBARRAY_TEST_LEN 256
1704+#define FBARRAY_UNALIGNED_TEST_ARR_NAME "fbarray_unaligned_autotest"
1705+#define FBARRAY_UNALIGNED_TEST_LEN 60
1706 #define FBARRAY_TEST_ELT_SZ (sizeof(int))
1707
1708 static int autotest_setup(void)
1709 {
1710- return rte_fbarray_init(&param.arr, FBARRAY_TEST_ARR_NAME,
1711+ int ret;
1712+
1713+ ret = rte_fbarray_init(&param.arr, FBARRAY_TEST_ARR_NAME,
1714 FBARRAY_TEST_LEN, FBARRAY_TEST_ELT_SZ);
1715+ if (ret) {
1716+ printf("Failed to initialize test array\n");
1717+ return -1;
1718+ }
1719+ ret = rte_fbarray_init(&unaligned.arr, FBARRAY_UNALIGNED_TEST_ARR_NAME,
1720+ FBARRAY_UNALIGNED_TEST_LEN, FBARRAY_TEST_ELT_SZ);
1721+ if (ret) {
1722+ printf("Failed to initialize unaligned test array\n");
1723+ rte_fbarray_destroy(&param.arr);
1724+ return -1;
1725+ }
1726+ return 0;
1727 }
1728
1729 static void autotest_teardown(void)
1730 {
1731 rte_fbarray_destroy(&param.arr);
1732+ rte_fbarray_destroy(&unaligned.arr);
1733 }
1734
1735-static int init_array(void)
1736+static int init_aligned(void)
1737 {
1738 int i;
1739 for (i = param.start; i <= param.end; i++) {
1740@@ -47,11 +65,35 @@ static int init_array(void)
1741 return 0;
1742 }
1743
1744-static void reset_array(void)
1745+static int init_unaligned(void)
1746+{
1747+ int i;
1748+ for (i = unaligned.start; i <= unaligned.end; i++) {
1749+ if (rte_fbarray_set_used(&unaligned.arr, i))
1750+ return -1;
1751+ }
1752+ return 0;
1753+}
1754+
1755+static void reset_aligned(void)
1756 {
1757 int i;
1758 for (i = 0; i < FBARRAY_TEST_LEN; i++)
1759 rte_fbarray_set_free(&param.arr, i);
1760+ /* reset param as well */
1761+ param.start = -1;
1762+ param.end = -1;
1763+}
1764+
1765+static void reset_unaligned(void)
1766+{
1767+ int i;
1768+ for (i = 0; i < FBARRAY_UNALIGNED_TEST_LEN; i++)
1769+ rte_fbarray_set_free(&unaligned.arr, i);
1770+ /* reset param as well */
1771+ unaligned.start = -1;
1772+ unaligned.end = -1;
1773+
1774 }
1775
1776 static int first_msk_test_setup(void)
1777@@ -59,7 +101,7 @@ static int first_msk_test_setup(void)
1778 /* put all within first mask */
1779 param.start = 3;
1780 param.end = 10;
1781- return init_array();
1782+ return init_aligned();
1783 }
1784
1785 static int cross_msk_test_setup(void)
1786@@ -67,7 +109,7 @@ static int cross_msk_test_setup(void)
1787 /* put all within second and third mask */
1788 param.start = 70;
1789 param.end = 160;
1790- return init_array();
1791+ return init_aligned();
1792 }
1793
1794 static int multi_msk_test_setup(void)
1795@@ -75,7 +117,7 @@ static int multi_msk_test_setup(void)
1796 /* put all within first and last mask */
1797 param.start = 3;
1798 param.end = FBARRAY_TEST_LEN - 20;
1799- return init_array();
1800+ return init_aligned();
1801 }
1802
1803 static int last_msk_test_setup(void)
1804@@ -83,7 +125,7 @@ static int last_msk_test_setup(void)
1805 /* put all within last mask */
1806 param.start = FBARRAY_TEST_LEN - 20;
1807 param.end = FBARRAY_TEST_LEN - 1;
1808- return init_array();
1809+ return init_aligned();
1810 }
1811
1812 static int full_msk_test_setup(void)
1813@@ -91,16 +133,31 @@ static int full_msk_test_setup(void)
1814 /* fill entire mask */
1815 param.start = 0;
1816 param.end = FBARRAY_TEST_LEN - 1;
1817- return init_array();
1818+ return init_aligned();
1819 }
1820
1821-static int empty_msk_test_setup(void)
1822+static int lookahead_test_setup(void)
1823 {
1824- /* do not fill anything in */
1825- reset_array();
1826- param.start = -1;
1827- param.end = -1;
1828- return 0;
1829+ /* set index 64 as used */
1830+ param.start = 64;
1831+ param.end = 64;
1832+ return init_aligned();
1833+}
1834+
1835+static int lookbehind_test_setup(void)
1836+{
1837+ /* set index 63 as used */
1838+ param.start = 63;
1839+ param.end = 63;
1840+ return init_aligned();
1841+}
1842+
1843+static int unaligned_test_setup(void)
1844+{
1845+ unaligned.start = 0;
1846+ /* leave one free bit at the end */
1847+ unaligned.end = FBARRAY_UNALIGNED_TEST_LEN - 2;
1848+ return init_unaligned();
1849 }
1850
1851 static int test_invalid(void)
1852@@ -454,7 +511,7 @@ static int test_basic(void)
1853 if (check_free())
1854 return TEST_FAILED;
1855
1856- reset_array();
1857+ reset_aligned();
1858
1859 return TEST_SUCCESS;
1860 }
1861@@ -697,6 +754,26 @@ static int test_find(void)
1862 return TEST_SUCCESS;
1863 }
1864
1865+static int test_find_unaligned(void)
1866+{
1867+ TEST_ASSERT_EQUAL((int)unaligned.arr.count, unaligned.end - unaligned.start + 1,
1868+ "Wrong element count\n");
1869+ /* ensure space is free before start */
1870+ if (ensure_correct(&unaligned.arr, 0, unaligned.start - 1, false))
1871+ return TEST_FAILED;
1872+ /* ensure space is occupied where it's supposed to be */
1873+ if (ensure_correct(&unaligned.arr, unaligned.start, unaligned.end, true))
1874+ return TEST_FAILED;
1875+ /* ensure space after end is free as well */
1876+ if (ensure_correct(&unaligned.arr, unaligned.end + 1, FBARRAY_UNALIGNED_TEST_LEN - 1,
1877+ false))
1878+ return TEST_FAILED;
1879+ /* test if find_biggest API's work correctly */
1880+ if (test_biggest(&unaligned.arr, unaligned.start, unaligned.end))
1881+ return TEST_FAILED;
1882+ return TEST_SUCCESS;
1883+}
1884+
1885 static int test_empty(void)
1886 {
1887 TEST_ASSERT_EQUAL((int)param.arr.count, 0, "Wrong element count\n");
1888@@ -709,6 +786,87 @@ static int test_empty(void)
1889 return TEST_SUCCESS;
1890 }
1891
1892+static int test_lookahead(void)
1893+{
1894+ int ret;
1895+
1896+ /* run regular test first */
1897+ ret = test_find();
1898+ if (ret != TEST_SUCCESS)
1899+ return ret;
1900+
1901+ /* test if we can find free chunk while not starting with 0 */
1902+ TEST_ASSERT_EQUAL(rte_fbarray_find_next_n_free(&param.arr, 1, param.start),
1903+ param.start + 1, "Free chunk index is wrong\n");
1904+ return TEST_SUCCESS;
1905+}
1906+
1907+static int test_lookbehind(void)
1908+{
1909+ int ret, free_len = 2;
1910+
1911+ /* run regular test first */
1912+ ret = test_find();
1913+ if (ret != TEST_SUCCESS)
1914+ return ret;
1915+
1916+ /* test if we can find free chunk while crossing mask boundary */
1917+ TEST_ASSERT_EQUAL(rte_fbarray_find_prev_n_free(&param.arr, param.start + 1, free_len),
1918+ param.start - free_len, "Free chunk index is wrong\n");
1919+ return TEST_SUCCESS;
1920+}
1921+
1922+static int test_lookahead_mask(void)
1923+{
1924+ /*
1925+ * There is a certain type of lookahead behavior we want to test here,
1926+ * namely masking of bits that were scanned with lookahead but that we
1927+ * know do not match our criteria. This is achieved in following steps:
1928+ *
1929+ * 0. Look for a big enough chunk of free space (say, 62 elements)
1930+ * 1. Trigger lookahead by breaking a run somewhere inside mask 0
1931+ * (indices 0-63)
1932+ * 2. Fail lookahead by breaking the run somewhere inside mask 1
1933+ * (indices 64-127)
1934+ * 3. Ensure that we can still find free space in mask 1 afterwards
1935+ */
1936+
1937+ /* break run on first mask */
1938+ rte_fbarray_set_used(&param.arr, 61);
1939+ /* break run on second mask */
1940+ rte_fbarray_set_used(&param.arr, 70);
1941+
1942+ /* we expect to find free space at 71 */
1943+ TEST_ASSERT_EQUAL(rte_fbarray_find_next_n_free(&param.arr, 0, 62),
1944+ 71, "Free chunk index is wrong\n");
1945+ return TEST_SUCCESS;
1946+}
1947+
1948+static int test_lookbehind_mask(void)
1949+{
1950+ /*
1951+ * There is a certain type of lookbehind behavior we want to test here,
1952+ * namely masking of bits that were scanned with lookbehind but that we
1953+ * know do not match our criteria. This is achieved in two steps:
1954+ *
1955+ * 0. Look for a big enough chunk of free space (say, 62 elements)
1956+ * 1. Trigger lookbehind by breaking a run somewhere inside mask 2
1957+ * (indices 128-191)
1958+ * 2. Fail lookbehind by breaking the run somewhere inside mask 1
1959+ * (indices 64-127)
1960+ * 3. Ensure that we can still find free space in mask 1 afterwards
1961+ */
1962+
1963+ /* break run on mask 2 */
1964+ rte_fbarray_set_used(&param.arr, 130);
1965+ /* break run on mask 1 */
1966+ rte_fbarray_set_used(&param.arr, 70);
1967+
1968+ /* start from 190, we expect to find free space at 8 */
1969+ TEST_ASSERT_EQUAL(rte_fbarray_find_prev_n_free(&param.arr, 190, 62),
1970+ 8, "Free chunk index is wrong\n");
1971+ return TEST_SUCCESS;
1972+}
1973
1974 static struct unit_test_suite fbarray_test_suite = {
1975 .suite_name = "fbarray autotest",
1976@@ -717,12 +875,19 @@ static struct unit_test_suite fbarray_test_suite = {
1977 .unit_test_cases = {
1978 TEST_CASE(test_invalid),
1979 TEST_CASE(test_basic),
1980- TEST_CASE_ST(first_msk_test_setup, reset_array, test_find),
1981- TEST_CASE_ST(cross_msk_test_setup, reset_array, test_find),
1982- TEST_CASE_ST(multi_msk_test_setup, reset_array, test_find),
1983- TEST_CASE_ST(last_msk_test_setup, reset_array, test_find),
1984- TEST_CASE_ST(full_msk_test_setup, reset_array, test_find),
1985- TEST_CASE_ST(empty_msk_test_setup, reset_array, test_empty),
1986+ TEST_CASE_ST(first_msk_test_setup, reset_aligned, test_find),
1987+ TEST_CASE_ST(cross_msk_test_setup, reset_aligned, test_find),
1988+ TEST_CASE_ST(multi_msk_test_setup, reset_aligned, test_find),
1989+ TEST_CASE_ST(last_msk_test_setup, reset_aligned, test_find),
1990+ TEST_CASE_ST(full_msk_test_setup, reset_aligned, test_find),
1991+ /* empty test does not need setup */
1992+ TEST_CASE_ST(NULL, reset_aligned, test_empty),
1993+ TEST_CASE_ST(lookahead_test_setup, reset_aligned, test_lookahead),
1994+ TEST_CASE_ST(lookbehind_test_setup, reset_aligned, test_lookbehind),
1995+ /* setup for these tests is more complex so do it in test func */
1996+ TEST_CASE_ST(NULL, reset_aligned, test_lookahead_mask),
1997+ TEST_CASE_ST(NULL, reset_aligned, test_lookbehind_mask),
1998+ TEST_CASE_ST(unaligned_test_setup, reset_unaligned, test_find_unaligned),
1999 TEST_CASES_END()
2000 }
2001 };
2002diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
2003index 0d5cfd4..39d4ad0 100644
2004--- a/app/test/test_link_bonding.c
2005+++ b/app/test/test_link_bonding.c
2006@@ -787,7 +787,7 @@ test_set_primary_slave(void)
2007 TEST_ASSERT_SUCCESS(rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr),
2008 "Failed to get mac address (port %d)",
2009 test_params->bonded_port_id);
2010- TEST_ASSERT_SUCCESS(memcmp(&read_mac_addr, &read_mac_addr,
2011+ TEST_ASSERT_SUCCESS(memcmp(expected_mac_addr, &read_mac_addr,
2012 sizeof(read_mac_addr)),
2013 "bonded port mac address not set to that of primary port\n");
2014
2015diff --git a/app/test/test_link_bonding_rssconf.c b/app/test/test_link_bonding_rssconf.c
2016index 6eb473b..9f11804 100644
2017--- a/app/test/test_link_bonding_rssconf.c
2018+++ b/app/test/test_link_bonding_rssconf.c
2019@@ -618,7 +618,6 @@ test_setup(void)
2020 mac_addr.addr_bytes[5] = 0x10 + port->port_id;
2021 rte_eth_dev_default_mac_addr_set(port->port_id, &mac_addr);
2022
2023- rte_eth_dev_info_get(port->port_id, &port->dev_info);
2024 retval = rte_eth_dev_info_get(port->port_id, &port->dev_info);
2025 TEST_ASSERT((retval == 0),
2026 "Error during getting device (port %u) info: %s\n",
2027diff --git a/app/test/test_power_cpufreq.c b/app/test/test_power_cpufreq.c
2028index 4d013cd..051b903 100644
2029--- a/app/test/test_power_cpufreq.c
2030+++ b/app/test/test_power_cpufreq.c
2031@@ -9,6 +9,7 @@
2032 #include <string.h>
2033 #include <inttypes.h>
2034 #include <rte_cycles.h>
2035+#include <rte_lcore.h>
2036
2037 #include "test.h"
2038
2039@@ -46,9 +47,10 @@ test_power_caps(void)
2040
2041 static uint32_t total_freq_num;
2042 static uint32_t freqs[TEST_POWER_FREQS_NUM_MAX];
2043+static uint32_t cpu_id;
2044
2045 static int
2046-check_cur_freq(unsigned int lcore_id, uint32_t idx, bool turbo)
2047+check_cur_freq(__rte_unused unsigned int lcore_id, uint32_t idx, bool turbo)
2048 {
2049 #define TEST_POWER_CONVERT_TO_DECIMAL 10
2050 #define MAX_LOOP 100
2051@@ -62,13 +64,13 @@ check_cur_freq(unsigned int lcore_id, uint32_t idx, bool turbo)
2052 int i;
2053
2054 if (snprintf(fullpath, sizeof(fullpath),
2055- TEST_POWER_SYSFILE_CPUINFO_FREQ, lcore_id) < 0) {
2056+ TEST_POWER_SYSFILE_CPUINFO_FREQ, cpu_id) < 0) {
2057 return 0;
2058 }
2059 f = fopen(fullpath, "r");
2060 if (f == NULL) {
2061 if (snprintf(fullpath, sizeof(fullpath),
2062- TEST_POWER_SYSFILE_SCALING_FREQ, lcore_id) < 0) {
2063+ TEST_POWER_SYSFILE_SCALING_FREQ, cpu_id) < 0) {
2064 return 0;
2065 }
2066 f = fopen(fullpath, "r");
2067@@ -486,6 +488,19 @@ test_power_cpufreq(void)
2068 {
2069 int ret = -1;
2070 enum power_management_env env;
2071+ rte_cpuset_t lcore_cpus;
2072+
2073+ lcore_cpus = rte_lcore_cpuset(TEST_POWER_LCORE_ID);
2074+ if (CPU_COUNT(&lcore_cpus) != 1) {
2075+ printf("Power management doesn't support lcore %u mapping to %u CPUs\n",
2076+ TEST_POWER_LCORE_ID,
2077+ CPU_COUNT(&lcore_cpus));
2078+ return TEST_SKIPPED;
2079+ }
2080+ for (cpu_id = 0; cpu_id < CPU_SETSIZE; cpu_id++) {
2081+ if (CPU_ISSET(cpu_id, &lcore_cpus))
2082+ break;
2083+ }
2084
2085 /* Test initialisation of a valid lcore */
2086 ret = rte_power_init(TEST_POWER_LCORE_ID);
2087diff --git a/buildtools/pmdinfogen.py b/buildtools/pmdinfogen.py
2088index 2a44f17..dfb8950 100755
2089--- a/buildtools/pmdinfogen.py
2090+++ b/buildtools/pmdinfogen.py
2091@@ -6,6 +6,7 @@
2092 import argparse
2093 import ctypes
2094 import json
2095+import re
2096 import sys
2097 import tempfile
2098
2099@@ -66,11 +67,11 @@ class ELFImage:
2100 return [symbol]
2101 return None
2102
2103- def find_by_prefix(self, prefix):
2104- prefix = prefix.encode("utf-8") if self._legacy_elftools else prefix
2105+ def find_by_pattern(self, pattern):
2106+ pattern = pattern.encode("utf-8") if self._legacy_elftools else pattern
2107 for i in range(self._symtab.num_symbols()):
2108 symbol = self._symtab.get_symbol(i)
2109- if symbol.name.startswith(prefix):
2110+ if re.match(pattern, symbol.name):
2111 yield ELFSymbol(self._image, symbol)
2112
2113
2114@@ -97,9 +98,9 @@ class COFFImage:
2115 def is_big_endian(self):
2116 return False
2117
2118- def find_by_prefix(self, prefix):
2119+ def find_by_pattern(self, pattern):
2120 for symbol in self._image.symbols:
2121- if symbol.name.startswith(prefix):
2122+ if re.match(pattern, symbol.name):
2123 yield COFFSymbol(self._image, symbol)
2124
2125 def find_by_name(self, name):
2126@@ -199,7 +200,7 @@ class Driver:
2127
2128 def load_drivers(image):
2129 drivers = []
2130- for symbol in image.find_by_prefix("this_pmd_name"):
2131+ for symbol in image.find_by_pattern("^this_pmd_name[0-9]+$"):
2132 drivers.append(Driver.load(image, symbol))
2133 return drivers
2134
2135diff --git a/config/arm/arm32_armv8_linux_gcc b/config/arm/arm32_armv8_linux_gcc
2136index 0d4618e..6879047 100644
2137--- a/config/arm/arm32_armv8_linux_gcc
2138+++ b/config/arm/arm32_armv8_linux_gcc
2139@@ -4,6 +4,7 @@ cpp = 'arm-linux-gnueabihf-g++'
2140 ar = 'arm-linux-gnueabihf-gcc-ar'
2141 strip = 'arm-linux-gnueabihf-strip'
2142 pkgconfig = 'arm-linux-gnueabihf-pkg-config'
2143+pkg-config = 'arm-linux-gnueabihf-pkg-config'
2144 pcap-config = ''
2145
2146 [host_machine]
2147diff --git a/config/arm/arm64_armada_linux_gcc b/config/arm/arm64_armada_linux_gcc
2148index 5043b82..64d702c 100644
2149--- a/config/arm/arm64_armada_linux_gcc
2150+++ b/config/arm/arm64_armada_linux_gcc
2151@@ -5,6 +5,7 @@ ar = 'aarch64-linux-gnu-ar'
2152 as = 'aarch64-linux-gnu-as'
2153 strip = 'aarch64-linux-gnu-strip'
2154 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2155+pkg-config = 'aarch64-linux-gnu-pkg-config'
2156 pcap-config = ''
2157
2158 [host_machine]
2159diff --git a/config/arm/arm64_armv8_linux_clang_ubuntu b/config/arm/arm64_armv8_linux_clang_ubuntu
2160index db488d7..e857774 100644
2161--- a/config/arm/arm64_armv8_linux_clang_ubuntu
2162+++ b/config/arm/arm64_armv8_linux_clang_ubuntu
2163@@ -6,6 +6,7 @@ strip = 'llvm-strip'
2164 llvm-config = 'llvm-config'
2165 pcap-config = 'llvm-config'
2166 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2167+pkg-config = 'aarch64-linux-gnu-pkg-config'
2168
2169 [host_machine]
2170 system = 'linux'
2171diff --git a/config/arm/arm64_armv8_linux_gcc b/config/arm/arm64_armv8_linux_gcc
2172index 5c32f6b..b0654f3 100644
2173--- a/config/arm/arm64_armv8_linux_gcc
2174+++ b/config/arm/arm64_armv8_linux_gcc
2175@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2176 ar = 'aarch64-linux-gnu-gcc-ar'
2177 strip = 'aarch64-linux-gnu-strip'
2178 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2179+pkg-config = 'aarch64-linux-gnu-pkg-config'
2180 pcap-config = ''
2181
2182 [host_machine]
2183diff --git a/config/arm/arm64_bluefield_linux_gcc b/config/arm/arm64_bluefield_linux_gcc
2184index df6eccc..347864d 100644
2185--- a/config/arm/arm64_bluefield_linux_gcc
2186+++ b/config/arm/arm64_bluefield_linux_gcc
2187@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2188 ar = 'aarch64-linux-gnu-gcc-ar'
2189 strip = 'aarch64-linux-gnu-strip'
2190 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2191+pkg-config = 'aarch64-linux-gnu-pkg-config'
2192 pcap-config = ''
2193
2194 [host_machine]
2195diff --git a/config/arm/arm64_centriq2400_linux_gcc b/config/arm/arm64_centriq2400_linux_gcc
2196index ddffc05..bdc1e59 100644
2197--- a/config/arm/arm64_centriq2400_linux_gcc
2198+++ b/config/arm/arm64_centriq2400_linux_gcc
2199@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2200 ar = 'aarch64-linux-gnu-gcc-ar'
2201 strip = 'aarch64-linux-gnu-strip'
2202 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2203+pkg-config = 'aarch64-linux-gnu-pkg-config'
2204 pcap-config = ''
2205
2206 [host_machine]
2207diff --git a/config/arm/arm64_cn10k_linux_gcc b/config/arm/arm64_cn10k_linux_gcc
2208index 19068f0..7834d8d 100644
2209--- a/config/arm/arm64_cn10k_linux_gcc
2210+++ b/config/arm/arm64_cn10k_linux_gcc
2211@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2212 ar = 'aarch64-linux-gnu-gcc-ar'
2213 strip = 'aarch64-linux-gnu-strip'
2214 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2215+pkg-config = 'aarch64-linux-gnu-pkg-config'
2216 pcap-config = ''
2217
2218 [host_machine]
2219diff --git a/config/arm/arm64_dpaa_linux_gcc b/config/arm/arm64_dpaa_linux_gcc
2220index 70df99f..eeaff59 100644
2221--- a/config/arm/arm64_dpaa_linux_gcc
2222+++ b/config/arm/arm64_dpaa_linux_gcc
2223@@ -5,6 +5,7 @@ ar = 'aarch64-linux-gnu-ar'
2224 as = 'aarch64-linux-gnu-as'
2225 strip = 'aarch64-linux-gnu-strip'
2226 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2227+pkg-config = 'aarch64-linux-gnu-pkg-config'
2228 pcap-config = ''
2229
2230 [host_machine]
2231diff --git a/config/arm/arm64_emag_linux_gcc b/config/arm/arm64_emag_linux_gcc
2232index 06f5eae..d7e58c3 100644
2233--- a/config/arm/arm64_emag_linux_gcc
2234+++ b/config/arm/arm64_emag_linux_gcc
2235@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2236 ar = 'aarch64-linux-gnu-gcc-ar'
2237 strip = 'aarch64-linux-gnu-strip'
2238 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2239+pkg-config = 'aarch64-linux-gnu-pkg-config'
2240 pcap-config = ''
2241
2242 [host_machine]
2243diff --git a/config/arm/arm64_graviton2_linux_gcc b/config/arm/arm64_graviton2_linux_gcc
2244index 24b2dbc..75f7919 100644
2245--- a/config/arm/arm64_graviton2_linux_gcc
2246+++ b/config/arm/arm64_graviton2_linux_gcc
2247@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2248 ar = 'aarch64-linux-gnu-gcc-ar'
2249 strip = 'aarch64-linux-gnu-strip'
2250 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2251+pkg-config = 'aarch64-linux-gnu-pkg-config'
2252 pcap-config = ''
2253
2254 [host_machine]
2255diff --git a/config/arm/arm64_kunpeng920_linux_gcc b/config/arm/arm64_kunpeng920_linux_gcc
2256index 4a71531..5671b66 100644
2257--- a/config/arm/arm64_kunpeng920_linux_gcc
2258+++ b/config/arm/arm64_kunpeng920_linux_gcc
2259@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2260 ar = 'aarch64-linux-gnu-gcc-ar'
2261 strip = 'aarch64-linux-gnu-strip'
2262 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2263+pkg-config = 'aarch64-linux-gnu-pkg-config'
2264 pcap-config = ''
2265
2266 [host_machine]
2267diff --git a/config/arm/arm64_kunpeng930_linux_gcc b/config/arm/arm64_kunpeng930_linux_gcc
2268index 383f0b0..9ead4b1 100644
2269--- a/config/arm/arm64_kunpeng930_linux_gcc
2270+++ b/config/arm/arm64_kunpeng930_linux_gcc
2271@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2272 ar = 'aarch64-linux-gnu-gcc-ar'
2273 strip = 'aarch64-linux-gnu-strip'
2274 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2275+pkg-config = 'aarch64-linux-gnu-pkg-config'
2276 pcap-config = ''
2277
2278 [host_machine]
2279diff --git a/config/arm/arm64_n1sdp_linux_gcc b/config/arm/arm64_n1sdp_linux_gcc
2280index 5f6356c..3432ead 100644
2281--- a/config/arm/arm64_n1sdp_linux_gcc
2282+++ b/config/arm/arm64_n1sdp_linux_gcc
2283@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2284 ar = 'aarch64-linux-gnu-gcc-ar'
2285 strip = 'aarch64-linux-gnu-strip'
2286 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2287+pkg-config = 'aarch64-linux-gnu-pkg-config'
2288 pcap-config = ''
2289
2290 [host_machine]
2291diff --git a/config/arm/arm64_n2_linux_gcc b/config/arm/arm64_n2_linux_gcc
2292index 82806ba..f02780d 100644
2293--- a/config/arm/arm64_n2_linux_gcc
2294+++ b/config/arm/arm64_n2_linux_gcc
2295@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2296 ar = 'aarch64-linux-gnu-gcc-ar'
2297 strip = 'aarch64-linux-gnu-strip'
2298 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2299+pkg-config = 'aarch64-linux-gnu-pkg-config'
2300 pcap-config = ''
2301
2302 [host_machine]
2303diff --git a/config/arm/arm64_octeontx2_linux_gcc b/config/arm/arm64_octeontx2_linux_gcc
2304index d23b652..a854086 100644
2305--- a/config/arm/arm64_octeontx2_linux_gcc
2306+++ b/config/arm/arm64_octeontx2_linux_gcc
2307@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2308 ar = 'aarch64-linux-gnu-gcc-ar'
2309 strip = 'aarch64-linux-gnu-strip'
2310 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2311+pkg-config = 'aarch64-linux-gnu-pkg-config'
2312 pcap-config = ''
2313
2314 [host_machine]
2315diff --git a/config/arm/arm64_stingray_linux_gcc b/config/arm/arm64_stingray_linux_gcc
2316index cf98337..4e9ebc5 100644
2317--- a/config/arm/arm64_stingray_linux_gcc
2318+++ b/config/arm/arm64_stingray_linux_gcc
2319@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2320 ar = 'aarch64-linux-gnu-gcc-ar'
2321 strip = 'aarch64-linux-gnu-strip'
2322 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2323+pkg-config = 'aarch64-linux-gnu-pkg-config'
2324 pcap-config = ''
2325
2326 [host_machine]
2327diff --git a/config/arm/arm64_thunderx2_linux_gcc b/config/arm/arm64_thunderx2_linux_gcc
2328index 616f6c2..8c4ee77 100644
2329--- a/config/arm/arm64_thunderx2_linux_gcc
2330+++ b/config/arm/arm64_thunderx2_linux_gcc
2331@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2332 ar = 'aarch64-linux-gnu-gcc-ar'
2333 strip = 'aarch64-linux-gnu-strip'
2334 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2335+pkg-config = 'aarch64-linux-gnu-pkg-config'
2336 pcap-config = ''
2337
2338 [host_machine]
2339diff --git a/config/arm/arm64_thunderxt88_linux_gcc b/config/arm/arm64_thunderxt88_linux_gcc
2340index 131f564..9f2af4c 100644
2341--- a/config/arm/arm64_thunderxt88_linux_gcc
2342+++ b/config/arm/arm64_thunderxt88_linux_gcc
2343@@ -4,6 +4,7 @@ cpp = 'aarch64-linux-gnu-g++'
2344 ar = 'aarch64-linux-gnu-gcc-ar'
2345 strip = 'aarch64-linux-gnu-strip'
2346 pkgconfig = 'aarch64-linux-gnu-pkg-config'
2347+pkg-config = 'aarch64-linux-gnu-pkg-config'
2348 pcap-config = ''
2349
2350 [host_machine]
2351diff --git a/config/x86/cross-mingw b/config/x86/cross-mingw
2352index 09f7af0..fab1a70 100644
2353--- a/config/x86/cross-mingw
2354+++ b/config/x86/cross-mingw
2355@@ -5,6 +5,7 @@ ld = 'x86_64-w64-mingw32-ld'
2356 ar = 'x86_64-w64-mingw32-ar'
2357 strip = 'x86_64-w64-mingw32-strip'
2358 pkgconfig = 'x86_64-w64-mingw32-pkg-config'
2359+pkg-config = 'x86_64-w64-mingw32-pkg-config'
2360 objdump = 'x86_64-w64-mingw32-objdump'
2361
2362 [host_machine]
2363diff --git a/debian/changelog b/debian/changelog
2364index 93692d0..67adbed 100644
2365--- a/debian/changelog
2366+++ b/debian/changelog
2367@@ -1,3 +1,11 @@
2368+dpdk (21.11.9-0ubuntu0.22.04.1) jammy; urgency=medium
2369+
2370+ * Merge LTS stable release 21.11.9 (LP: #2067480)
2371+ - Full release notes are available at:
2372+ https://doc.dpdk.org/guides-21.11/rel_notes/release_21_11.html#id32
2373+
2374+ -- Arif Ali <arif.ali@canonical.com> Tue, 06 May 2025 06:56:35 +0000
2375+
2376 dpdk (21.11.7-0ubuntu0.22.04.1) jammy; urgency=medium
2377
2378 * Merge LTS stable release 21.11.7 (LP: #2067480)
2379diff --git a/devtools/git-log-fixes.sh b/devtools/git-log-fixes.sh
2380index 210c8dc..0cac34c 100755
2381--- a/devtools/git-log-fixes.sh
2382+++ b/devtools/git-log-fixes.sh
2383@@ -68,7 +68,7 @@ origin_version () # <origin_hash> ...
2384 {
2385 for origin in $* ; do
2386 # check hash is valid
2387- git rev-parse -q --verify $1 >&- || continue
2388+ git rev-parse -q --verify $origin >&- || continue
2389 # get version of this bug origin
2390 local origver=$(commit_version $origin)
2391 local roothashes="$(origin_filter $origin)"
2392diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
2393index 841f370..adbf118 100644
2394--- a/doc/guides/nics/features.rst
2395+++ b/doc/guides/nics/features.rst
2396@@ -688,14 +688,32 @@ Basic stats
2397 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
2398 imissed, ierrors, oerrors, rx_nombuf.
2399
2400-And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
2401-
2402 These apply to all drivers.
2403
2404 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
2405 * **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
2406
2407
2408+.. _nic_features_stats_per_queue:
2409+
2410+Stats per queue
2411+---------------
2412+
2413+Supports per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
2414+Statistics only supplied for first ``RTE_ETHDEV_QUEUE_STAT_CNTRS`` (16) queues.
2415+If driver does not support this feature the per queue stats will be zero.
2416+
2417+* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
2418+* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
2419+
2420+May also support configuring per-queue stat counter mapping.
2421+Used by some drivers to workaround HW limitations.
2422+
2423+* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
2424+* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
2425+ ``rte_eth_dev_set_tx_queue_stats_mapping()``.
2426+
2427+
2428 .. _nic_features_extended_stats:
2429
2430 Extended stats
2431@@ -710,18 +728,6 @@ Supports Extended Statistics, changes from driver to driver.
2432 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
2433
2434
2435-.. _nic_features_stats_per_queue:
2436-
2437-Stats per queue
2438----------------
2439-
2440-Supports configuring per-queue stat counter mapping.
2441-
2442-* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
2443-* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
2444- ``rte_eth_dev_set_tx_queue_stats_mapping()``.
2445-
2446-
2447 .. _nic_features_traffic_manager:
2448
2449 Traffic manager
2450diff --git a/doc/guides/prog_guide/img/mbuf1.svg b/doc/guides/prog_guide/img/mbuf1.svg
2451index a08bf3b..111a874 100644
2452--- a/doc/guides/prog_guide/img/mbuf1.svg
2453+++ b/doc/guides/prog_guide/img/mbuf1.svg
2454@@ -487,7 +487,7 @@
2455 sodipodi:role="line"
2456 id="tspan5256"
2457 x="59.842155"
2458- y="282.37683">m-&gt;pkt.next = NULL</tspan></text>
2459+ y="282.37683">m-&gt;next = NULL</tspan></text>
2460 <text
2461 xml:space="preserve"
2462 style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
2463diff --git a/doc/guides/prog_guide/img/mbuf2.svg b/doc/guides/prog_guide/img/mbuf2.svg
2464index f6fdb54..6a80cbc 100644
2465--- a/doc/guides/prog_guide/img/mbuf2.svg
2466+++ b/doc/guides/prog_guide/img/mbuf2.svg
2467@@ -1074,7 +1074,7 @@
2468 sodipodi:role="line"
2469 id="tspan5256-8"
2470 x="527.19458"
2471- y="628.45935">m-&gt;pkt.next = NULL</tspan></text>
2472+ y="628.45935">m-&gt;next = NULL</tspan></text>
2473 <text
2474 xml:space="preserve"
2475 style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
2476@@ -1084,7 +1084,7 @@
2477 sodipodi:role="line"
2478 id="tspan5256-8-3"
2479 x="330.50363"
2480- y="628.45935">m-&gt;pkt.next = mseg3</tspan></text>
2481+ y="628.45935">m-&gt;next = mseg3</tspan></text>
2482 <text
2483 xml:space="preserve"
2484 style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
2485@@ -1094,7 +1094,7 @@
2486 sodipodi:role="line"
2487 id="tspan5256-8-3-4"
2488 x="144.79388"
2489- y="628.45935">m-&gt;pkt.next = mseg2</tspan></text>
2490+ y="628.45935">m-&gt;next = mseg2</tspan></text>
2491 <text
2492 xml:space="preserve"
2493 style="font-size:10px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
2494diff --git a/doc/guides/prog_guide/mbuf_lib.rst b/doc/guides/prog_guide/mbuf_lib.rst
2495index 049357c..749f9c9 100644
2496--- a/doc/guides/prog_guide/mbuf_lib.rst
2497+++ b/doc/guides/prog_guide/mbuf_lib.rst
2498@@ -134,7 +134,7 @@ a vxlan-encapsulated tcp packet:
2499
2500 mb->l2_len = len(out_eth)
2501 mb->l3_len = len(out_ip)
2502- mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CSUM
2503+ mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CKSUM
2504 set out_ip checksum to 0 in the packet
2505
2506 This is supported on hardware advertising RTE_ETH_TX_OFFLOAD_IPV4_CKSUM.
2507@@ -143,7 +143,7 @@ a vxlan-encapsulated tcp packet:
2508
2509 mb->l2_len = len(out_eth)
2510 mb->l3_len = len(out_ip)
2511- mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CSUM | RTE_MBUF_F_TX_UDP_CKSUM
2512+ mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_UDP_CKSUM
2513 set out_ip checksum to 0 in the packet
2514 set out_udp checksum to pseudo header using rte_ipv4_phdr_cksum()
2515
2516@@ -154,7 +154,7 @@ a vxlan-encapsulated tcp packet:
2517
2518 mb->l2_len = len(out_eth + out_ip + out_udp + vxlan + in_eth)
2519 mb->l3_len = len(in_ip)
2520- mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CSUM
2521+ mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CKSUM
2522 set in_ip checksum to 0 in the packet
2523
2524 This is similar to case 1), but l2_len is different. It is supported
2525@@ -165,7 +165,7 @@ a vxlan-encapsulated tcp packet:
2526
2527 mb->l2_len = len(out_eth + out_ip + out_udp + vxlan + in_eth)
2528 mb->l3_len = len(in_ip)
2529- mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CSUM | RTE_MBUF_F_TX_TCP_CKSUM
2530+ mb->ol_flags |= RTE_MBUF_F_TX_IPV4 | RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_TCP_CKSUM
2531 set in_ip checksum to 0 in the packet
2532 set in_tcp checksum to pseudo header using rte_ipv4_phdr_cksum()
2533
2534diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
2535index 66bf6fb..9a9fdf2 100644
2536--- a/doc/guides/rel_notes/release_21_11.rst
2537+++ b/doc/guides/rel_notes/release_21_11.rst
2538@@ -3483,3 +3483,642 @@ Tested Platforms
2539 * df33fb53e4 rcu: fix acked token in debug log
2540 * 063cddfc74 rcu: use atomic operation on acked token
2541 * 63bf81a617 test: fix named test macro
2542+
2543+21.11.8 Release Notes
2544+---------------------
2545+
2546+
2547+21.11.8 Fixes
2548+~~~~~~~~~~~~~
2549+
2550+* app/bbdev: fix interrupt tests
2551+* app/dumpcap: handle SIGTERM and SIGHUP
2552+* app/pdump: handle SIGTERM and SIGHUP
2553+* app/testpmd: cleanup cleanly from signal
2554+* app/testpmd: fix build on signed comparison
2555+* app/testpmd: fix early exit from signal
2556+* app/testpmd: fix help string of BPF load command
2557+* app/testpmd: fix interactive mode on Windows
2558+* app/testpmd: fix lcore ID restriction
2559+* app/testpmd: fix outer IP checksum offload
2560+* app/testpmd: fix parsing for connection tracking item
2561+* app/testpmd: handle IEEE1588 init failure
2562+* baseband/la12xx: forbid secondary process
2563+* bpf: fix load hangs with six IPv6 addresses
2564+* bpf: fix MOV instruction evaluation
2565+* buildtools: fix build with clang 17 and ASan
2566+* bus/dpaa: fix bus scan for DMA devices
2567+* bus/dpaa: fix memory leak in bus scan
2568+* bus/dpaa: remove redundant file descriptor check
2569+* bus/pci: fix build with musl 1.2.4 / Alpine 3.19
2570+* bus/pci: fix FD in secondary process
2571+* bus/pci: fix UIO resource mapping in secondary process
2572+* bus/vdev: fix device reinitialization
2573+* common/dpaax/caamflib: fix PDCP AES-AES watchdog error
2574+* common/dpaax/caamflib: fix PDCP-SDAP watchdog error
2575+* common/dpaax: fix IOVA table cleanup
2576+* common/dpaax: fix node array overrun
2577+* common/mlx5: fix unsigned/signed mismatch
2578+* common/mlx5: remove unneeded field when modify RQ table
2579+* config: fix warning for cross build with meson >= 1.3.0
2580+* crypto/cnxk: fix minimal input normalization
2581+* cryptodev: fix build without crypto callbacks
2582+* cryptodev: validate crypto callbacks from next node
2583+* crypto/dpaa2_sec: fix event queue user context
2584+* crypto/openssl: optimize 3DES-CTR context init
2585+* dmadev: fix structure alignment
2586+* dma/idxd: add generic option for queue config
2587+* dma/idxd: add verbose option to config script
2588+* dma/idxd: fix default for workqueue options
2589+* dma/idxd: fix setup with Ubuntu 24.04
2590+* doc: add baseline mode in l3fwd-power guide
2591+* doc: fix mbuf flags
2592+* doc: fix testpmd ring size command
2593+* doc: fix typo in l2fwd-crypto guide
2594+* doc: remove reference to mbuf pkt field
2595+* eal: fix logs for '--lcores'
2596+* eal/linux: lower log level on allocation attempt failure
2597+* eal/unix: support ZSTD compression for firmware
2598+* eal/windows: install sched.h file
2599+* ethdev: fix device init without socket-local memory
2600+* ethdev: fix GENEVE option item conversion
2601+* event/sw: fix warning from useless snprintf
2602+* fbarray: fix finding for unaligned length
2603+* fbarray: fix incorrect lookahead behavior
2604+* fbarray: fix incorrect lookbehind behavior
2605+* fbarray: fix lookahead ignore mask handling
2606+* fbarray: fix lookbehind ignore mask handling
2607+* hash: check name when creating a hash
2608+* hash: fix RCU reclamation size
2609+* hash: fix return code description in Doxygen
2610+* kni: use strscpy
2611+* latencystats: fix literal float suffix
2612+* malloc: fix multi-process wait condition handling
2613+* net/af_packet: align Rx/Tx structs to cache line
2614+* net/af_xdp: count mbuf allocation failures
2615+* net/af_xdp: fix port ID in Rx mbuf
2616+* net/ark: fix index arithmetic
2617+* net/axgbe: check only minimum speed for cables
2618+* net/axgbe: delay AN timeout during KR training
2619+* net/axgbe: disable interrupts during device removal
2620+* net/axgbe: fix connection for SFP+ active cables
2621+* net/axgbe: fix fluctuations for 1G Bel Fuse SFP
2622+* net/axgbe: fix linkup in PHY status
2623+* net/axgbe: fix MDIO access for non-zero ports and CL45 PHYs
2624+* net/axgbe: fix SFP codes check for DAC cables
2625+* net/axgbe: fix Tx flow on 30H HW
2626+* net/axgbe: reset link when link never comes back
2627+* net/axgbe: update DMA coherency values
2628+* net/cnxk: fix outbound security with higher packet burst
2629+* net/cnxk: fix promiscuous state after MAC change
2630+* net/cnxk: fix RSS config
2631+* net/e1000/base: fix link power down
2632+* net/ena: fix bad checksum handling
2633+* net/ena: fix checksum handling
2634+* net/ena: fix return value check
2635+* net: fix outer UDP checksum in Intel prepare helper
2636+* net/fm10k: fix cleanup during init failure
2637+* net/hns3: check Rx DMA address alignmnent
2638+* net/hns3: disable SCTP verification tag for RSS hash input
2639+* net/hns3: fix double free for Rx/Tx queue
2640+* net/hns3: fix offload flag of IEEE 1588
2641+* net/hns3: fix Rx timestamp flag
2642+* net/hns3: fix uninitialized variable in FEC query
2643+* net/hns3: fix variable overflow
2644+* net/i40e: fix outer UDP checksum offload for X710
2645+* net/ice/base: fix board type definition
2646+* net/ice/base: fix check for existing switch rule
2647+* net/ice/base: fix GCS descriptor field offsets
2648+* net/ice/base: fix masking when reading context
2649+* net/ice/base: fix pointer to variable outside scope
2650+* net/ice/base: fix potential TLV length overflow
2651+* net/ice/base: fix return type of bitmap hamming weight
2652+* net/ice/base: fix sign extension
2653+* net/ice/base: fix size when allocating children arrays
2654+* net/ice/base: fix temporary failures reading NVM
2655+* net/ice: fix check for outer UDP checksum offload
2656+* net/ice: fix memory leaks in raw pattern parsing
2657+* net/ice: fix return value for raw pattern parsing
2658+* net/ixgbe/base: fix 5G link speed reported on VF
2659+* net/ixgbe/base: fix PHY ID for X550
2660+* net/ixgbe/base: revert advertising for X550 2.5G/5G
2661+* net/ixgbe: do not create delayed interrupt handler twice
2662+* net/ixgbe: do not update link status in secondary process
2663+* net/mlx5: fix Arm build with GCC 9.1
2664+* net/mlx5: fix end condition of reading xstats
2665+* net/mlx5: fix hash Rx queue release in flow sample
2666+* net/mlx5: fix indexed pool with invalid index
2667+* net/mlx5: fix MTU configuration
2668+* net/mlx5: fix uplink port probing in bonding mode
2669+* net/nfp: fix disabling 32-bit build
2670+* net/ngbe: fix hotplug remove
2671+* net/ngbe: fix memory leaks
2672+* net/ngbe: fix MTU range
2673+* net/ngbe: keep PHY power down while device probing
2674+* net/softnic: fix maybe-uninitialized warning
2675+* net/tap: fix file descriptor check in isolated flow
2676+* net/txgbe: fix flow filters in VT mode
2677+* net/txgbe: fix hotplug remove
2678+* net/txgbe: fix memory leaks
2679+* net/txgbe: fix MTU range
2680+* net/txgbe: fix Rx interrupt
2681+* net/txgbe: fix tunnel packet parsing
2682+* net/txgbe: fix Tx hang on queue disable
2683+* net/txgbe: fix VF promiscuous and allmulticast
2684+* net/txgbe: reconfigure more MAC Rx registers
2685+* net/txgbe: restrict configuration of VLAN strip offload
2686+* net/virtio: fix MAC table update
2687+* net/virtio-user: add memcpy check
2688+* net/vmxnet3: fix init logs
2689+* pcapng: add memcpy check
2690+* telemetry: fix connection parameter parsing
2691+* telemetry: lower log level on socket error
2692+* test/crypto: fix allocation comment
2693+* test/crypto: fix asymmetric capability test
2694+* test/crypto: fix vector global buffer overflow
2695+* test/crypto: remove unused stats in setup
2696+* vdpa/sfc: remove dead code
2697+* version: 21.11.8-rc1
2698+* vhost: cleanup resubmit info before inflight setup
2699+* vhost: fix build with GCC 13
2700+
2701+21.11.8 Validation
2702+~~~~~~~~~~~~~~~~~~
2703+
2704+* `Red Hat(R) Testing <https://mails.dpdk.org/archives/stable/2024-September/049938.html>`__
2705+
2706+ * Platform
2707+
2708+ * RHEL 9
2709+ * Kernel 5.14
2710+ * Qemu 8.2
2711+ * X540-AT2 NIC(ixgbe, 10G)
2712+
2713+ * Functionality
2714+
2715+ * Guest with device assignment(PF) throughput testing(1G hugepage size)
2716+ * Guest with device assignment(PF) throughput testing(2M hugepage size)
2717+ * Guest with device assignment(VF) throughput testing
2718+ * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing
2719+ * PVP vhost-user 2Q throughput testing
2720+ * PVP vhost-user 1Q cross numa node throughput testing
2721+ * Guest with vhost-user 2 queues throughput testing
2722+ * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect
2723+ * vhost-user reconnect with dpdk-client, qemu-server: ovs reconnect
2724+ * PVP 1Q live migration testing
2725+ * PVP 1Q cross numa node live migration testing
2726+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing
2727+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M)
2728+ * Guest with ovs+dpdk+vhost-user 2Q live migration testing
2729+ * Guest with ovs+dpdk+vhost-user 4Q live migration testing
2730+ * Host PF + DPDK testing
2731+ * Host VF + DPDK testing
2732+
2733+
2734+* `Intel(R) Testing <https://mails.dpdk.org/archives/stable/2024-September/049940.html>`__
2735+
2736+ * Basic Intel(R) NIC(ixgbe, i40e and ice) testing
2737+
2738+ * PF (i40e, ixgbe)
2739+ * VF (i40e, ixgbe)
2740+ * PF/VF (ice)
2741+ * Compile Testing
2742+ * Intel NIC single core/NIC performance
2743+ * IPsec
2744+
2745+ * Basic cryptodev and virtio testing
2746+
2747+ * vhost/virtio basic loopback, PVP and performance test
2748+ * cryptodev Function/Performance
2749+
2750+
2751+* `Nvidia(R) Testing <https://mails.dpdk.org/archives/stable/2024-September/049948.html>`__
2752+
2753+ * Basic functionality with testpmd
2754+
2755+ * Tx/Rx
2756+ * xstats
2757+ * Timestamps
2758+ * Link status
2759+ * RTE flow
2760+ * RSS
2761+ * VLAN filtering, stripping and insertion
2762+ * Checksum/TSO
2763+ * ptype
2764+ * link_status_interrupt example application
2765+ * l3fwd-power example application
2766+ * Multi-process example applications
2767+ * Hardware LRO tests
2768+ * Regex application
2769+ * Buffer Split
2770+ * Tx scheduling
2771+
2772+ * Build tests
2773+ * ConnectX-6 Dx
2774+ * ConnectX-7
2775+ * BlueField-2
2776+
2777+21.11.8 Known Issues
2778+~~~~~~~~~~~~~~~~~~~~
2779+
2780+* DPDK 21.11.8 contains fixes up to DPDK 24.07
2781+* Issues identified/fixed in DPDK main branch after DPDK 24.07 may be present in DPDK 21.11.8
2782+
2783+21.11.8 Fixes skipped and status unresolved
2784+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2785+
2786+* c5b531d6ee app/crypto-perf: fix session freeing
2787+* 61b52e7edb app/test: fix reference to master in bonding test
2788+* 7bdf7a13ae app/testpmd: fix encap/decap size calculation
2789+* 461c287ab5 app/testpmd: fix GRO packets flush on timeout
2790+* ecf408d2aa app/testpmd: fix indirect action flush
2791+* 4edbcc7b53 bpf: disable on 32-bit x86
2792+* 4edbcc7b53 bpf: disable on 32-bit x86
2793+* 5d8c1f6253 common/cnxk: check error in MAC address set
2794+* a6f639e079 common/cnxk: fix BP threshold calculation
2795+* 772e30281a common/cnxk: fix CPT backpressure disable on LBK
2796+* 48054ca384 common/cnxk: fix link config for SDP
2797+* 1c7a4d37e7 common/cnxk: fix mailbox timeout due to deadlock
2798+* 59ceaa72d5 common/cnxk: fix part number for CN10K
2799+* 5781638519 common/cnxk: fix RQ mask config for CN10KB chip
2800+* 56fa6f92e9 common/cnxk: fix RSS key configuration
2801+* 37ca457d3f common/mlx5: fix obtaining IB device in LAG mode
2802+* cedb44dc87 common/mlx5: improve AES-XTS tweak capability check
2803+* 7be74edb90 common/mlx5: use just sufficient barrier for Arm
2804+* 046341575b crypto/dpaa_sec: fix IPsec descriptor
2805+* 9d91c3047d crypto/openssl: fix memory leaks in asym operations
2806+* 17d5bc6135 crypto/openssl: make per-QP auth context clones
2807+* b1d7112602 crypto/openssl: make per-QP cipher context clones
2808+* 3dd3115078 dma/cnxk: fix chunk buffer failure return code
2809+* ba39a261a7 dma/cnxk: fix completion ring tail wrap
2810+* 95a955e3e0 dma/cnxk: fix device reconfigure
2811+* 2a3f42942a dma/hisilicon: remove support for HIP09 platform
2812+* b9a87346b0 ethdev: fix strict aliasing in link up
2813+* 694e8e643d event/cnxk: fix CASP usage for clang
2814+* b37fe88a2c event/cnxk: fix LMTST write for single event mode
2815+* 3fe71706ab event/cnxk: fix stale data in workslot
2816+* 04dac73643 eventdev/crypto: fix enqueue count
2817+* 4b04134cbb eventdev/crypto: fix failed events
2818+* da73a2a0d1 eventdev/crypto: fix offset used while flushing events
2819+* ad12d08f05 eventdev/crypto: fix opaque field handling
2820+* f442c04001 eventdev/crypto: fix overflow in circular buffer
2821+* 4b97893816 examples: fix lcore ID restriction
2822+* 548de9091c examples: fix port ID restriction
2823+* b23c5bd71a examples: fix queue ID restriction
2824+* 9a518054b5 examples/l3fwd: fix duplicate expression for default nexthop
2825+* 927cb43fe9 examples/l3fwd: fix port group mask with AltiVec
2826+* 547f294357 gro: fix reordering of packets
2827+* 6df1bc6b3b mempool/cnxk: avoid hang when counting batch allocs
2828+* b3ddd649ad mempool/cnxk: fix alloc from non-EAL threads
2829+* 97039941b2 net/af_xdp: parse UMEM map info from mempool
2830+* abdabad636 net/af_xdp: remove unused local statistic
2831+* e82b0fe097 net/axgbe: disable RRC for yellow carp devices
2832+* a78a1ed8ba net/bonding: fix failover time of LACP with mode 4
2833+* 02a2accb5f net/bonding: fix flow count query
2834+* 26a6bda9df net/cnxk: add cookies check for multi-segment offload
2835+* 5a0f64d84b net/cnxk: fix configuring large Rx/Tx queues
2836+* 3232c95d2c net/cnxk: fix indirect mbuf handling in Tx
2837+* 8ed5ca4dda net/cnxk: fix mbuf fields in multi-segment Tx
2838+* 7752f14026 net/cnxk: fix Rx flush on CN10k
2839+* 4c2f14bc6d net/cnxk: fix xstats reset
2840+* ee0fa7552a net/dpaa: forbid MTU configuration for shared interface
2841+* 0f044b6681 net/iavf: fix refine protocol header
2842+* 0b241667cc net/iavf: fix tainted scalar
2843+* b125c0e721 net/iavf: fix tainted scalar
2844+* 92a16af450 net/iavf: fix virtchnl command called in interrupt
2845+* df44ba7a3c net/ice/base: fix preparing PHY for timesync command
2846+* e2072ba1b0 net/ice/base: fix resource leak
2847+* 9749dffe23 net/ice: fix MAC type of E822 and E823
2848+* 87e4384d26 net/mlx5: fix condition of LACP miss flow
2849+* 2ece3b7186 net/mlx5: fix flow workspace double free in Windows
2850+* 1cfb78d2c4 net/mlx5: fix meter policy priority
2851+* 48adbc80ba net/mlx5: remove GENEVE options length limitation
2852+* a74c5001e9 net/ngbe: add proper memory barriers in Rx
2853+* 79be49dd2d net/ngbe: add special config for YT8531SH-CA PHY
2854+* 31a28a99fd net/ngbe: add spinlock protection on YT PHY
2855+* 21f702d556 net/ngbe: fix link status in no LSC mode
2856+* 659cfce01e net/ngbe: remove redundant codes
2857+* 44a8635459 net/thunderx: fix DMAC control register update
2858+* 12011b11a3 net/txgbe: adapt to MNG veto bit setting
2859+* 5e170dd8b6 net/txgbe: fix blocking system events
2860+* 166591931b pcapng: modify timestamp calculation
2861+* df33fb53e4 rcu: fix acked token in debug log
2862+* 063cddfc74 rcu: use atomic operation on acked token
2863+* 4ad17a1c8f test/crypto: fix enqueue/dequeue callback case
2864+* 63bf81a617 test: fix named test macro
2865+
2866+21.11.9 Release Notes
2867+---------------------
2868+
2869+
2870+21.11.9 Fixes
2871+~~~~~~~~~~~~~
2872+
2873+* app/dumpcap: remove unused struct array
2874+* app/procinfo: fix leak on exit
2875+* app/testpmd: fix aged flow destroy
2876+* app/testpmd: remove flex item init command leftover
2877+* app/testpmd: remove redundant policy action condition
2878+* app/testpmd: remove unnecessary cast
2879+* baseband/la12xx: fix use after free in modem config
2880+* bpf: fix free function mismatch if convert fails
2881+* build: remove version check on compiler links function
2882+* bus/dpaa: fix lock condition during error handling
2883+* bus/dpaa: fix PFDRs leaks due to FQRNIs
2884+* bus/dpaa: fix the fman details status
2885+* bus/dpaa: fix VSP for 1G fm1-mac9 and 10
2886+* bus/fslmc: fix Coverity warnings in QBMAN
2887+* common/cnxk: fix base log level
2888+* common/cnxk: fix build on Ubuntu 24.04
2889+* common/cnxk: fix RSS key configuration
2890+* common/dpaax/caamflib: fix PDCP SNOW-ZUC watchdog
2891+* common/mlx5: fix error CQE handling for 128 bytes CQE
2892+* common/mlx5: fix misalignment
2893+* crypto/bcmfs: fix free function mismatch
2894+* crypto/dpaa2_sec: fix memory leak
2895+* crypto/openssl: fix 3DES-CTR with big endian CPUs
2896+* dev: fix callback lookup when unregistering device
2897+* devtools: fix check of multiple commits fixed at once
2898+* dmadev: fix potential null pointer access
2899+* dma/idxd: fix free function mismatch in device probe
2900+* doc: correct definition of stats per queue feature
2901+* eal/x86: fix 32-bit write combining store
2902+* ethdev: fix overflow in descriptor count
2903+* ethdev: verify queue ID in Tx done cleanup
2904+* event/cnxk: fix free function mismatch in port config
2905+* eventdev: fix possible array underflow/overflow
2906+* event/octeontx: fix possible integer overflow
2907+* examples/eventdev: fix queue crash with generic pipeline
2908+* examples/l2fwd-event: fix spinlock handling
2909+* examples/ntb: check info query return
2910+* examples/vhost: fix free function mismatch
2911+* fib6: add runtime checks in AVX512 lookup
2912+* fib: fix AVX512 lookup
2913+* hash: fix thash LFSR initialization
2914+* member: fix choice of bucket for displacement
2915+* net/bnx2x: fix always true expression
2916+* net/bnx2x: fix duplicate branch
2917+* net/bnx2x: fix possible infinite loop at startup
2918+* net/bnx2x: remove dead conditional
2919+* net/bnxt: fix bad action offset in Tx BD
2920+* net/bnxt: fix reading SFF-8436 SFP EEPROMs
2921+* net/bnxt: fix TCP and UDP checksum flags
2922+* net/bnxt/tf_core: fix Thor TF EM key size check
2923+* net/cnxk: fix Rx offloads to handle timestamp
2924+* net/cnxk: fix Rx timestamp handling for VF
2925+* net/dpaa: fix reallocate mbuf handling
2926+* net/dpaa: fix typecasting channel ID
2927+* net/e1000: fix link status crash in secondary process
2928+* net/e1000: fix use after free in filter flush
2929+* net/ena: revert redefining memcpy
2930+* net/hns3: fix dump counter of registers
2931+* net/hns3: fix error code for repeatedly create counter
2932+* net/hns3: fix fully use hardware flow director table
2933+* net/hns3: remove some basic address dump
2934+* net/hns3: restrict tunnel flow rule to one header
2935+* net/hns3: verify reset type from firmware
2936+* net/i40e/base: fix blinking X722 with X557 PHY
2937+* net/i40e/base: fix DDP loading with reserved track ID
2938+* net/i40e/base: fix loop bounds
2939+* net/i40e/base: fix misleading debug logs and comments
2940+* net/i40e/base: fix repeated register dumps
2941+* net/i40e/base: fix setting flags in init function
2942+* net/i40e/base: fix unchecked return value
2943+* net/i40e: check register read for outer VLAN
2944+* net/i40e: fix AVX-512 pointer copy on 32-bit
2945+* net/iavf: add segment-length check to Tx prep
2946+* net/iavf: fix AVX-512 pointer copy on 32-bit
2947+* net/iavf: fix crash when link is unstable
2948+* net/iavf: fix VF reset when using DCF
2949+* net/iavf: preserve MAC address with i40e PF Linux driver
2950+* net/ice/base: add bounds check
2951+* net/ice/base: fix iteration of TLVs in Preserved Fields Area
2952+* net/ice/base: fix link speed for 200G
2953+* net/ice/base: fix VLAN replay after reset
2954+* net/ice: detect stopping a flow director queue twice
2955+* net/ice: fix AVX-512 pointer copy on 32-bit
2956+* net/ionic: fix build with Fedora Rawhide
2957+* net/ixgbe/base: fix unchecked return value
2958+* net/ixgbe: fix link status delay on FreeBSD
2959+* net/memif: fix buffer overflow in zero copy Rx
2960+* net/mlx5: fix memory leak in metering
2961+* net/mlx5: fix miniCQEs number calculation
2962+* net/mlx5: fix next protocol validation after flex item
2963+* net/mlx5: fix non full word sample fields in flex item
2964+* net/mlx5: fix number of supported flex parsers
2965+* net/mlx5: fix reported Rx/Tx descriptor limits
2966+* net/mlx5: fix shared queue port number in vector Rx
2967+* net/mlx5: workaround list management of Rx queue control
2968+* net/mvneta: fix possible out-of-bounds write
2969+* net/netvsc: fix using Tx queue higher than Rx queues
2970+* net/netvsc: force Tx VLAN offload on 801.2Q packet
2971+* net/nfb: fix use after free
2972+* net/nfp: fix link change return value
2973+* net/ngbe: fix driver load bit to inform firmware
2974+* net/ngbe: fix interrupt lost in legacy or MSI mode
2975+* net/ngbe: reconfigure more MAC Rx registers
2976+* net/ngbe: restrict configuration of VLAN strip offload
2977+* net/pcap: fix blocking Rx
2978+* net/pcap: set live interface as non-blocking
2979+* net/sfc: fix use after free in debug logs
2980+* net/tap: avoid memcpy with null argument
2981+* net/tap: restrict maximum number of MP FDs
2982+* net/txgbe: fix driver load bit to inform firmware
2983+* net/txgbe: fix SWFW mbox
2984+* net/txgbe: fix VF-PF mbox interrupt
2985+* net/txgbe: remove outer UDP checksum capability
2986+* net/virtio: fix Rx checksum calculation
2987+* net/virtio-user: reset used index counter
2988+* net/vmxnet3: fix crash after configuration failure
2989+* power: enable CPPC
2990+* power: fix log message when checking lcore ID
2991+* power: fix log message when checking power modes
2992+* power: fix mapped lcore ID
2993+* raw/ifpga/base: fix use after free
2994+* raw/ifpga: fix free function mismatch in interrupt config
2995+* rcu: fix implicit conversion in bit shift
2996+* Revert "test/bonding: fix loop on members"
2997+* test/bonding: fix loop on members
2998+* test/bonding: fix MAC address comparison
2999+* test/bonding: remove redundant info query
3000+* test/eal: fix lcore check
3001+* test/eal: fix loop coverage for alignment macros
3002+* test/event: avoid duplicate initialization
3003+* vdpa: update used flags in used ring relay
3004+* version: 21.11.9-rc1
3005+* vhost: fix offset while mapping log base address
3006+
3007+21.11.9 Validation
3008+~~~~~~~~~~~~~~~~~~
3009+
3010+* `Red Hat(R) Testing <https://mails.dpdk.org/archives/dev/2024-December/310322.html>`__
3011+
3012+ * Platform
3013+
3014+ * RHEL 9
3015+ * Kernel 5.14
3016+ * Qemu 7.2
3017+ * X540-AT2 NIC(ixgbe, 10G)
3018+
3019+ * Functionality
3020+
3021+ * Guest with device assignment(PF) throughput testing(1G hugepage size)
3022+ * Guest with device assignment(PF) throughput testing(2M hugepage size)
3023+ * Guest with device assignment(VF) throughput testing
3024+ * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing
3025+ * PVP vhost-user 2Q throughput testing
3026+ * PVP vhost-user 1Q cross numa node throughput testing
3027+ * Guest with vhost-user 2 queues throughput testing
3028+ * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect
3029+ * vhost-user reconnect with dpdk-client, qemu-server: ovs reconnect
3030+ * PVP 1Q live migration testing
3031+ * PVP 1Q cross numa node live migration testing
3032+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing
3033+ * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M)
3034+ * Guest with ovs+dpdk+vhost-user 2Q live migration testing
3035+ * Guest with ovs+dpdk+vhost-user 4Q live migration testing
3036+ * Host PF + DPDK testing
3037+ * Host VF + DPDK testing
3038+
3039+
3040+* `Nvidia(R) Testing <https://mails.dpdk.org/archives/stable/2024-December/051225.html>`__
3041+
3042+ * Basic functionality with testpmd
3043+
3044+ * Tx/Rx
3045+ * xstats
3046+ * Timestamps
3047+ * Link status
3048+ * RTE flow
3049+ * RSS
3050+ * VLAN filtering, stripping and insertion
3051+ * Checksum/TSO
3052+ * ptype
3053+ * link_status_interrupt example application
3054+ * l3fwd-power example application
3055+ * Multi-process example applications
3056+ * Hardware LRO tests
3057+ * Regex application
3058+ * Buffer Split
3059+ * Tx scheduling
3060+
3061+ * Build tests
3062+ * ConnectX-6 Dx
3063+ * ConnectX-7
3064+ * BlueField-2
3065+
3066+
3067+* `Intel(R) Testing <https://mails.dpdk.org/archives/stable/2024-December/051231.html>`__
3068+
3069+ * Basic Intel(R) NIC(ixgbe, i40e and ice) testing
3070+
3071+ * PF (i40e, ixgbe)
3072+ * VF (i40e, ixgbe)
3073+ * PF/VF (ice)
3074+ * Compile Testing
3075+ * Intel NIC single core/NIC performance - partial testing
3076+ * IPseca - partial testing
3077+
3078+ * Basic cryptodev and virtio testing
3079+
3080+ * vhost/virtio basic loopback, PVP and performance test
3081+ * cryptodev Function/Performance - partial testing
3082+
3083+21.11.9 Known Issues
3084+~~~~~~~~~~~~~~~~~~~~
3085+
3086+* DPDK 21.11.9 contains fixes up to DPDK 24.11 and CVE-2024-11614
3087+* Issues identified/fixed in DPDK main branch after DPDK 24.11 may be present in DPDK 21.11.9
3088+* Ubuntu 24.04 with gcc 13.2.0 running at optimisation -O1 shows a maybe-uninitialized warning for iavf driver
3089+* Some validation was ongoing at time of release
3090+
3091+21.11.9 Fixes skipped and status unresolved
3092+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3093+
3094+* c5b531d6ee app/crypto-perf: fix session freeing
3095+* 7bdf7a13ae app/testpmd: fix encap/decap size calculation
3096+* 461c287ab5 app/testpmd: fix GRO packets flush on timeout
3097+* ecf408d2aa app/testpmd: fix indirect action flush
3098+* 0c5709824b baseband/acc: fix ring memory allocation
3099+* 4edbcc7b53 bpf: disable on 32-bit x86
3100+* 4edbcc7b53 bpf: disable on 32-bit x86
3101+* 5d8c1f6253 common/cnxk: check error in MAC address set
3102+* a6f639e079 common/cnxk: fix BP threshold calculation
3103+* 772e30281a common/cnxk: fix CPT backpressure disable on LBK
3104+* 6c3de40af8 common/cnxk: fix inline CTX write
3105+* 48054ca384 common/cnxk: fix link config for SDP
3106+* 2d4505dc6d common/cnxk: fix MAC address change with active VF
3107+* 1c7a4d37e7 common/cnxk: fix mailbox timeout due to deadlock
3108+* 59ceaa72d5 common/cnxk: fix part number for CN10K
3109+* 5781638519 common/cnxk: fix RQ mask config for CN10KB chip
3110+* 37ca457d3f common/mlx5: fix obtaining IB device in LAG mode
3111+* cedb44dc87 common/mlx5: improve AES-XTS tweak capability check
3112+* 7be74edb90 common/mlx5: use just sufficient barrier for Arm
3113+* 046341575b crypto/dpaa_sec: fix IPsec descriptor
3114+* 17d5bc6135 crypto/openssl: make per-QP auth context clones
3115+* b1d7112602 crypto/openssl: make per-QP cipher context clones
3116+* 3dd3115078 dma/cnxk: fix chunk buffer failure return code
3117+* ba39a261a7 dma/cnxk: fix completion ring tail wrap
3118+* 95a955e3e0 dma/cnxk: fix device reconfigure
3119+* 2a3f42942a dma/hisilicon: remove support for HIP09 platform
3120+* b9a87346b0 ethdev: fix strict aliasing in link up
3121+* 694e8e643d event/cnxk: fix CASP usage for clang
3122+* b37fe88a2c event/cnxk: fix LMTST write for single event mode
3123+* 3fe71706ab event/cnxk: fix stale data in workslot
3124+* 04dac73643 eventdev/crypto: fix enqueue count
3125+* 4b04134cbb eventdev/crypto: fix failed events
3126+* da73a2a0d1 eventdev/crypto: fix offset used while flushing events
3127+* ad12d08f05 eventdev/crypto: fix opaque field handling
3128+* f442c04001 eventdev/crypto: fix overflow in circular buffer
3129+* 9a518054b5 examples/l3fwd: fix duplicate expression for default nexthop
3130+* 927cb43fe9 examples/l3fwd: fix port group mask with AltiVec
3131+* ebab0e8b22 examples/l3fwd: fix read beyond boundaries
3132+* ebab0e8b22 examples/l3fwd: fix read beyond boundaries
3133+* 547f294357 gro: fix reordering of packets
3134+* 6df1bc6b3b mempool/cnxk: avoid hang when counting batch allocs
3135+* b3ddd649ad mempool/cnxk: fix alloc from non-EAL threads
3136+* 97039941b2 net/af_xdp: parse UMEM map info from mempool
3137+* abdabad636 net/af_xdp: remove unused local statistic
3138+* e82b0fe097 net/axgbe: disable RRC for yellow carp devices
3139+* 78dcdb821c net/bnxt/tf_core: fix WC TCAM multi-slice delete
3140+* 8782e4de3e net/bnxt/tf_ulp: fix parent child DB counters
3141+* a78a1ed8ba net/bonding: fix failover time of LACP with mode 4
3142+* 02a2accb5f net/bonding: fix flow count query
3143+* 26a6bda9df net/cnxk: add cookies check for multi-segment offload
3144+* 5a0f64d84b net/cnxk: fix configuring large Rx/Tx queues
3145+* 3232c95d2c net/cnxk: fix indirect mbuf handling in Tx
3146+* 8ed5ca4dda net/cnxk: fix mbuf fields in multi-segment Tx
3147+* 7752f14026 net/cnxk: fix Rx flush on CN10k
3148+* 4c2f14bc6d net/cnxk: fix xstats reset
3149+* ee0fa7552a net/dpaa: forbid MTU configuration for shared interface
3150+* 0f044b6681 net/iavf: fix refine protocol header
3151+* 0b241667cc net/iavf: fix tainted scalar
3152+* b125c0e721 net/iavf: fix tainted scalar
3153+* 92a16af450 net/iavf: fix virtchnl command called in interrupt
3154+* df44ba7a3c net/ice/base: fix preparing PHY for timesync command
3155+* e2072ba1b0 net/ice/base: fix resource leak
3156+* 9749dffe23 net/ice: fix MAC type of E822 and E823
3157+* 87e4384d26 net/mlx5: fix condition of LACP miss flow
3158+* b04b06f4cb net/mlx5: fix flex item header length field translation
3159+* 2ece3b7186 net/mlx5: fix flow workspace double free in Windows
3160+* 1cfb78d2c4 net/mlx5: fix meter policy priority
3161+* 27918f0d53 net/mlx5: fix real time counter reading from PCI BAR
3162+* 3c9a82fa6e net/mlx5: fix Rx queue control management
3163+* f8f294c66b net/mlx5: fix shared Rx queue control release
3164+* 48adbc80ba net/mlx5: remove GENEVE options length limitation
3165+* a74c5001e9 net/ngbe: add proper memory barriers in Rx
3166+* 79be49dd2d net/ngbe: add special config for YT8531SH-CA PHY
3167+* 31a28a99fd net/ngbe: add spinlock protection on YT PHY
3168+* 21f702d556 net/ngbe: fix link status in no LSC mode
3169+* 659cfce01e net/ngbe: remove redundant codes
3170+* 44a8635459 net/thunderx: fix DMAC control register update
3171+* 12011b11a3 net/txgbe: adapt to MNG veto bit setting
3172+* 916aa13f4a net/txgbe: fix a mass of interrupts
3173+* 5e170dd8b6 net/txgbe: fix blocking system events
3174+* 6db358536f pcapng: fix handling of chained mbufs
3175+* 166591931b pcapng: modify timestamp calculation
3176+* df33fb53e4 rcu: fix acked token in debug log
3177+* 063cddfc74 rcu: use atomic operation on acked token
3178+* 4ad17a1c8f test/crypto: fix enqueue/dequeue callback case
3179+* 251fdc592d test/crypto: fix synchronous API calls
3180+* 63bf81a617 test: fix named test macro
3181diff --git a/doc/guides/sample_app_ug/l2_forward_crypto.rst b/doc/guides/sample_app_ug/l2_forward_crypto.rst
3182index ce49eab..7ff304d 100644
3183--- a/doc/guides/sample_app_ug/l2_forward_crypto.rst
3184+++ b/doc/guides/sample_app_ug/l2_forward_crypto.rst
3185@@ -30,7 +30,7 @@ Compiling the Application
3186
3187 To compile the sample application see :doc:`compiling`.
3188
3189-The application is located in the ``l2fwd-crypt`` sub-directory.
3190+The application is located in the ``l2fwd-crypto`` sub-directory.
3191
3192 Running the Application
3193 -----------------------
3194diff --git a/doc/guides/sample_app_ug/l3_forward_power_man.rst b/doc/guides/sample_app_ug/l3_forward_power_man.rst
3195index 2e350c4..bb39cac 100644
3196--- a/doc/guides/sample_app_ug/l3_forward_power_man.rst
3197+++ b/doc/guides/sample_app_ug/l3_forward_power_man.rst
3198@@ -336,6 +336,9 @@ will use automatic PMD power management.
3199 This mode is limited to one queue per core,
3200 and has three available power management schemes:
3201
3202+``baseline``
3203+ This mode will not enable any power saving features.
3204+
3205 ``monitor``
3206 This will use ``rte_power_monitor()`` function to enter
3207 a power-optimized state (subject to platform support).
3208diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
3209index 3a522a8..6902b7b 100644
3210--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
3211+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
3212@@ -2207,7 +2207,7 @@ port config - queue ring size
3213
3214 Configure a rx/tx queue ring size::
3215
3216- testpmd> port (port_id) (rxq|txq) (queue_id) ring_size (value)
3217+ testpmd> port config (port_id) (rxq|txq) (queue_id) ring_size (value)
3218
3219 Only take effect after command that (re-)start the port or command that setup specific queue.
3220
3221diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c
3222index 4b05b5d..0ac0888 100644
3223--- a/drivers/baseband/la12xx/bbdev_la12xx.c
3224+++ b/drivers/baseband/la12xx/bbdev_la12xx.c
3225@@ -780,6 +780,7 @@ setup_la12xx_dev(struct rte_bbdev *dev)
3226 ipc_priv->hugepg_start.size = hp->len;
3227
3228 rte_free(hp);
3229+ hp = NULL;
3230 }
3231
3232 dev_ipc = open_ipc_dev(priv->modem_id);
3233@@ -1076,6 +1077,9 @@ la12xx_bbdev_remove(struct rte_vdev_device *vdev)
3234
3235 PMD_INIT_FUNC_TRACE();
3236
3237+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
3238+ return 0;
3239+
3240 if (vdev == NULL)
3241 return -EINVAL;
3242
3243diff --git a/drivers/bus/dpaa/base/fman/fman.c b/drivers/bus/dpaa/base/fman/fman.c
3244index 1814372..8263d42 100644
3245--- a/drivers/bus/dpaa/base/fman/fman.c
3246+++ b/drivers/bus/dpaa/base/fman/fman.c
3247@@ -153,7 +153,7 @@ static void fman_if_vsp_init(struct __fman_if *__if)
3248 size_t lenp;
3249 const uint8_t mac_idx[] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1};
3250
3251- if (__if->__if.mac_type == fman_mac_1g) {
3252+ if (__if->__if.mac_idx <= 8) {
3253 for_each_compatible_node(dev, NULL,
3254 "fsl,fman-port-1g-rx-extended-args") {
3255 prop = of_get_property(dev, "cell-index", &lenp);
3256@@ -176,7 +176,32 @@ static void fman_if_vsp_init(struct __fman_if *__if)
3257 }
3258 }
3259 }
3260- } else if (__if->__if.mac_type == fman_mac_10g) {
3261+
3262+ for_each_compatible_node(dev, NULL,
3263+ "fsl,fman-port-op-extended-args") {
3264+ prop = of_get_property(dev, "cell-index", &lenp);
3265+
3266+ if (prop) {
3267+ cell_index = of_read_number(&prop[0],
3268+ lenp / sizeof(phandle));
3269+
3270+ if (cell_index == __if->__if.mac_idx) {
3271+ prop = of_get_property(dev,
3272+ "vsp-window",
3273+ &lenp);
3274+
3275+ if (prop) {
3276+ __if->__if.num_profiles =
3277+ of_read_number(&prop[0],
3278+ 1);
3279+ __if->__if.base_profile_id =
3280+ of_read_number(&prop[1],
3281+ 1);
3282+ }
3283+ }
3284+ }
3285+ }
3286+ } else {
3287 for_each_compatible_node(dev, NULL,
3288 "fsl,fman-port-10g-rx-extended-args") {
3289 prop = of_get_property(dev, "cell-index", &lenp);
3290diff --git a/drivers/bus/dpaa/base/fman/fman_hw.c b/drivers/bus/dpaa/base/fman/fman_hw.c
3291index af9bac7..1559d3c 100644
3292--- a/drivers/bus/dpaa/base/fman/fman_hw.c
3293+++ b/drivers/bus/dpaa/base/fman/fman_hw.c
3294@@ -243,10 +243,11 @@ fman_if_stats_get_all(struct fman_if *p, uint64_t *value, int n)
3295 int i;
3296 uint64_t base_offset = offsetof(struct memac_regs, reoct_l);
3297
3298- for (i = 0; i < n; i++)
3299- value[i] = (((u64)in_be32((char *)regs + base_offset + 8 * i) |
3300- (u64)in_be32((char *)regs + base_offset +
3301- 8 * i + 4)) << 32);
3302+ for (i = 0; i < n; i++) {
3303+ uint64_t a = in_be32((char *)regs + base_offset + 8 * i);
3304+ uint64_t b = in_be32((char *)regs + base_offset + 8 * i + 4);
3305+ value[i] = a | b << 32;
3306+ }
3307 }
3308
3309 void
3310diff --git a/drivers/bus/dpaa/base/qbman/process.c b/drivers/bus/dpaa/base/qbman/process.c
3311index 9bc9268..72fa639 100644
3312--- a/drivers/bus/dpaa/base/qbman/process.c
3313+++ b/drivers/bus/dpaa/base/qbman/process.c
3314@@ -1,7 +1,7 @@
3315 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
3316 *
3317 * Copyright 2011-2016 Freescale Semiconductor Inc.
3318- * Copyright 2017,2020 NXP
3319+ * Copyright 2017,2020,2022,2024 NXP
3320 *
3321 */
3322 #include <assert.h>
3323@@ -27,15 +27,16 @@ static int check_fd(void)
3324 {
3325 int ret;
3326
3327- if (fd >= 0)
3328- return 0;
3329 ret = pthread_mutex_lock(&fd_init_lock);
3330 assert(!ret);
3331+
3332 /* check again with the lock held */
3333 if (fd < 0)
3334 fd = open(PROCESS_PATH, O_RDWR);
3335+
3336 ret = pthread_mutex_unlock(&fd_init_lock);
3337 assert(!ret);
3338+
3339 return (fd >= 0) ? 0 : -ENODEV;
3340 }
3341
3342diff --git a/drivers/bus/dpaa/base/qbman/qman.c b/drivers/bus/dpaa/base/qbman/qman.c
3343index aa8da96..098bfd6 100644
3344--- a/drivers/bus/dpaa/base/qbman/qman.c
3345+++ b/drivers/bus/dpaa/base/qbman/qman.c
3346@@ -294,10 +294,32 @@ static inline void qman_stop_dequeues_ex(struct qman_portal *p)
3347 qm_dqrr_set_maxfill(&p->p, 0);
3348 }
3349
3350+static inline void qm_mr_pvb_update(struct qm_portal *portal)
3351+{
3352+ register struct qm_mr *mr = &portal->mr;
3353+ const struct qm_mr_entry *res = qm_cl(mr->ring, mr->pi);
3354+
3355+#ifdef RTE_LIBRTE_DPAA_HWDEBUG
3356+ DPAA_ASSERT(mr->pmode == qm_mr_pvb);
3357+#endif
3358+ /* when accessing 'verb', use __raw_readb() to ensure that compiler
3359+ * inlining doesn't try to optimise out "excess reads".
3360+ */
3361+ if ((__raw_readb(&res->ern.verb) & QM_MR_VERB_VBIT) == mr->vbit) {
3362+ mr->pi = (mr->pi + 1) & (QM_MR_SIZE - 1);
3363+ if (!mr->pi)
3364+ mr->vbit ^= QM_MR_VERB_VBIT;
3365+ mr->fill++;
3366+ res = MR_INC(res);
3367+ }
3368+ dcbit_ro(res);
3369+}
3370+
3371 static int drain_mr_fqrni(struct qm_portal *p)
3372 {
3373 const struct qm_mr_entry *msg;
3374 loop:
3375+ qm_mr_pvb_update(p);
3376 msg = qm_mr_current(p);
3377 if (!msg) {
3378 /*
3379@@ -319,6 +341,7 @@ loop:
3380 do {
3381 now = mfatb();
3382 } while ((then + 10000) > now);
3383+ qm_mr_pvb_update(p);
3384 msg = qm_mr_current(p);
3385 if (!msg)
3386 return 0;
3387@@ -481,27 +504,6 @@ static inline int qm_mr_init(struct qm_portal *portal,
3388 return 0;
3389 }
3390
3391-static inline void qm_mr_pvb_update(struct qm_portal *portal)
3392-{
3393- register struct qm_mr *mr = &portal->mr;
3394- const struct qm_mr_entry *res = qm_cl(mr->ring, mr->pi);
3395-
3396-#ifdef RTE_LIBRTE_DPAA_HWDEBUG
3397- DPAA_ASSERT(mr->pmode == qm_mr_pvb);
3398-#endif
3399- /* when accessing 'verb', use __raw_readb() to ensure that compiler
3400- * inlining doesn't try to optimise out "excess reads".
3401- */
3402- if ((__raw_readb(&res->ern.verb) & QM_MR_VERB_VBIT) == mr->vbit) {
3403- mr->pi = (mr->pi + 1) & (QM_MR_SIZE - 1);
3404- if (!mr->pi)
3405- mr->vbit ^= QM_MR_VERB_VBIT;
3406- mr->fill++;
3407- res = MR_INC(res);
3408- }
3409- dcbit_ro(res);
3410-}
3411-
3412 struct qman_portal *
3413 qman_init_portal(struct qman_portal *portal,
3414 const struct qm_portal_config *c,
3415@@ -1825,6 +1827,8 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags)
3416 }
3417 out:
3418 FQUNLOCK(fq);
3419+ /* Draining FQRNIs, if any */
3420+ drain_mr_fqrni(&p->p);
3421 return rval;
3422 }
3423
3424@@ -2165,8 +2169,10 @@ int qman_set_vdq(struct qman_fq *fq, u16 num, uint32_t vdqcr_flags)
3425
3426 if (!p->vdqcr_owned) {
3427 FQLOCK(fq);
3428- if (fq_isset(fq, QMAN_FQ_STATE_VDQCR))
3429+ if (fq_isset(fq, QMAN_FQ_STATE_VDQCR)) {
3430+ FQUNLOCK(fq);
3431 goto escape;
3432+ }
3433 fq_set(fq, QMAN_FQ_STATE_VDQCR);
3434 FQUNLOCK(fq);
3435 p->vdqcr_owned = fq;
3436@@ -2199,8 +2205,10 @@ int qman_volatile_dequeue(struct qman_fq *fq, u32 flags __maybe_unused,
3437
3438 if (!p->vdqcr_owned) {
3439 FQLOCK(fq);
3440- if (fq_isset(fq, QMAN_FQ_STATE_VDQCR))
3441+ if (fq_isset(fq, QMAN_FQ_STATE_VDQCR)) {
3442+ FQUNLOCK(fq);
3443 goto escape;
3444+ }
3445 fq_set(fq, QMAN_FQ_STATE_VDQCR);
3446 FQUNLOCK(fq);
3447 p->vdqcr_owned = fq;
3448diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
3449index 7fba928..81ac971 100644
3450--- a/drivers/bus/dpaa/dpaa_bus.c
3451+++ b/drivers/bus/dpaa/dpaa_bus.c
3452@@ -178,6 +178,7 @@ dpaa_create_device_list(void)
3453 if (dev->intr_handle == NULL) {
3454 DPAA_BUS_LOG(ERR, "Failed to allocate intr handle");
3455 ret = -ENOMEM;
3456+ free(dev);
3457 goto cleanup;
3458 }
3459
3460@@ -211,7 +212,7 @@ dpaa_create_device_list(void)
3461
3462 if (dpaa_sec_available()) {
3463 DPAA_BUS_LOG(INFO, "DPAA SEC devices are not available");
3464- return 0;
3465+ goto qdma_dpaa;
3466 }
3467
3468 /* Creating SEC Devices */
3469@@ -229,6 +230,7 @@ dpaa_create_device_list(void)
3470 if (dev->intr_handle == NULL) {
3471 DPAA_BUS_LOG(ERR, "Failed to allocate intr handle");
3472 ret = -ENOMEM;
3473+ free(dev);
3474 goto cleanup;
3475 }
3476
3477@@ -250,6 +252,7 @@ dpaa_create_device_list(void)
3478
3479 rte_dpaa_bus.device_count += i;
3480
3481+qdma_dpaa:
3482 /* Creating QDMA Device */
3483 for (i = 0; i < RTE_DPAA_QDMA_DEVICES; i++) {
3484 dev = calloc(1, sizeof(struct rte_dpaa_device));
3485diff --git a/drivers/bus/fslmc/qbman/qbman_debug.c b/drivers/bus/fslmc/qbman/qbman_debug.c
3486index eea0698..0e471ec 100644
3487--- a/drivers/bus/fslmc/qbman/qbman_debug.c
3488+++ b/drivers/bus/fslmc/qbman/qbman_debug.c
3489@@ -1,6 +1,6 @@
3490 /* SPDX-License-Identifier: BSD-3-Clause
3491 * Copyright (C) 2015 Freescale Semiconductor, Inc.
3492- * Copyright 2018-2020 NXP
3493+ * Copyright 2018-2020,2022 NXP
3494 */
3495
3496 #include "compat.h"
3497@@ -37,6 +37,7 @@ int qbman_bp_query(struct qbman_swp *s, uint32_t bpid,
3498 struct qbman_bp_query_rslt *r)
3499 {
3500 struct qbman_bp_query_desc *p;
3501+ struct qbman_bp_query_rslt *bp_query_rslt;
3502
3503 /* Start the management command */
3504 p = (struct qbman_bp_query_desc *)qbman_swp_mc_start(s);
3505@@ -47,14 +48,16 @@ int qbman_bp_query(struct qbman_swp *s, uint32_t bpid,
3506 p->bpid = bpid;
3507
3508 /* Complete the management command */
3509- *r = *(struct qbman_bp_query_rslt *)qbman_swp_mc_complete(s, p,
3510- QBMAN_BP_QUERY);
3511- if (!r) {
3512+ bp_query_rslt = (struct qbman_bp_query_rslt *)qbman_swp_mc_complete(s,
3513+ p, QBMAN_BP_QUERY);
3514+ if (!bp_query_rslt) {
3515 pr_err("qbman: Query BPID %d failed, no response\n",
3516 bpid);
3517 return -EIO;
3518 }
3519
3520+ *r = *bp_query_rslt;
3521+
3522 /* Decode the outcome */
3523 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_BP_QUERY);
3524
3525@@ -202,20 +205,23 @@ int qbman_fq_query(struct qbman_swp *s, uint32_t fqid,
3526 struct qbman_fq_query_rslt *r)
3527 {
3528 struct qbman_fq_query_desc *p;
3529+ struct qbman_fq_query_rslt *fq_query_rslt;
3530
3531 p = (struct qbman_fq_query_desc *)qbman_swp_mc_start(s);
3532 if (!p)
3533 return -EBUSY;
3534
3535 p->fqid = fqid;
3536- *r = *(struct qbman_fq_query_rslt *)qbman_swp_mc_complete(s, p,
3537- QBMAN_FQ_QUERY);
3538- if (!r) {
3539+ fq_query_rslt = (struct qbman_fq_query_rslt *)qbman_swp_mc_complete(s,
3540+ p, QBMAN_FQ_QUERY);
3541+ if (!fq_query_rslt) {
3542 pr_err("qbman: Query FQID %d failed, no response\n",
3543 fqid);
3544 return -EIO;
3545 }
3546
3547+ *r = *fq_query_rslt;
3548+
3549 /* Decode the outcome */
3550 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_FQ_QUERY);
3551
3552@@ -398,20 +404,23 @@ int qbman_cgr_query(struct qbman_swp *s, uint32_t cgid,
3553 struct qbman_cgr_query_rslt *r)
3554 {
3555 struct qbman_cgr_query_desc *p;
3556+ struct qbman_cgr_query_rslt *cgr_query_rslt;
3557
3558 p = (struct qbman_cgr_query_desc *)qbman_swp_mc_start(s);
3559 if (!p)
3560 return -EBUSY;
3561
3562 p->cgid = cgid;
3563- *r = *(struct qbman_cgr_query_rslt *)qbman_swp_mc_complete(s, p,
3564- QBMAN_CGR_QUERY);
3565- if (!r) {
3566+ cgr_query_rslt = (struct qbman_cgr_query_rslt *)qbman_swp_mc_complete(s,
3567+ p, QBMAN_CGR_QUERY);
3568+ if (!cgr_query_rslt) {
3569 pr_err("qbman: Query CGID %d failed, no response\n",
3570 cgid);
3571 return -EIO;
3572 }
3573
3574+ *r = *cgr_query_rslt;
3575+
3576 /* Decode the outcome */
3577 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_CGR_QUERY);
3578
3579@@ -473,20 +482,23 @@ int qbman_cgr_wred_query(struct qbman_swp *s, uint32_t cgid,
3580 struct qbman_wred_query_rslt *r)
3581 {
3582 struct qbman_cgr_query_desc *p;
3583+ struct qbman_wred_query_rslt *wred_query_rslt;
3584
3585 p = (struct qbman_cgr_query_desc *)qbman_swp_mc_start(s);
3586 if (!p)
3587 return -EBUSY;
3588
3589 p->cgid = cgid;
3590- *r = *(struct qbman_wred_query_rslt *)qbman_swp_mc_complete(s, p,
3591- QBMAN_WRED_QUERY);
3592- if (!r) {
3593+ wred_query_rslt = (struct qbman_wred_query_rslt *)qbman_swp_mc_complete(
3594+ s, p, QBMAN_WRED_QUERY);
3595+ if (!wred_query_rslt) {
3596 pr_err("qbman: Query CGID WRED %d failed, no response\n",
3597 cgid);
3598 return -EIO;
3599 }
3600
3601+ *r = *wred_query_rslt;
3602+
3603 /* Decode the outcome */
3604 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_WRED_QUERY);
3605
3606@@ -527,7 +539,7 @@ void qbman_cgr_attr_wred_dp_decompose(uint32_t dp, uint64_t *minth,
3607 if (mn == 0)
3608 *maxth = ma;
3609 else
3610- *maxth = ((ma+256) * (1<<(mn-1)));
3611+ *maxth = ((uint64_t)(ma+256) * (1<<(mn-1)));
3612
3613 if (step_s == 0)
3614 *minth = *maxth - step_i;
3615@@ -630,6 +642,7 @@ int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid,
3616 struct qbman_wqchan_query_rslt *r)
3617 {
3618 struct qbman_wqchan_query_desc *p;
3619+ struct qbman_wqchan_query_rslt *wqchan_query_rslt;
3620
3621 /* Start the management command */
3622 p = (struct qbman_wqchan_query_desc *)qbman_swp_mc_start(s);
3623@@ -640,14 +653,16 @@ int qbman_wqchan_query(struct qbman_swp *s, uint16_t chanid,
3624 p->chid = chanid;
3625
3626 /* Complete the management command */
3627- *r = *(struct qbman_wqchan_query_rslt *)qbman_swp_mc_complete(s, p,
3628- QBMAN_WQ_QUERY);
3629- if (!r) {
3630+ wqchan_query_rslt = (struct qbman_wqchan_query_rslt *)qbman_swp_mc_complete(
3631+ s, p, QBMAN_WQ_QUERY);
3632+ if (!wqchan_query_rslt) {
3633 pr_err("qbman: Query WQ Channel %d failed, no response\n",
3634 chanid);
3635 return -EIO;
3636 }
3637
3638+ *r = *wqchan_query_rslt;
3639+
3640 /* Decode the outcome */
3641 QBMAN_BUG_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_WQ_QUERY);
3642
3643diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c
3644index d52125e..81a1ed6 100644
3645--- a/drivers/bus/pci/linux/pci_uio.c
3646+++ b/drivers/bus/pci/linux/pci_uio.c
3647@@ -245,7 +245,7 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
3648 }
3649 snprintf(devname, sizeof(devname), "/dev/uio%u", uio_num);
3650
3651- /* save fd if in primary process */
3652+ /* save fd */
3653 fd = open(devname, O_RDWR);
3654 if (fd < 0) {
3655 RTE_LOG(ERR, EAL, "Cannot open %s: %s\n",
3656@@ -283,6 +283,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev,
3657 }
3658 }
3659
3660+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
3661+ return 0;
3662+
3663 /* allocate the mapping details for secondary processes*/
3664 *uio_res = rte_zmalloc("UIO_RES", sizeof(**uio_res), 0);
3665 if (*uio_res == NULL) {
3666diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
3667index 822aa41..847b95f 100644
3668--- a/drivers/bus/pci/linux/pci_vfio.c
3669+++ b/drivers/bus/pci/linux/pci_vfio.c
3670@@ -53,7 +53,7 @@ pci_vfio_read_config(const struct rte_intr_handle *intr_handle,
3671 if (vfio_dev_fd < 0)
3672 return -1;
3673
3674- return pread64(vfio_dev_fd, buf, len,
3675+ return pread(vfio_dev_fd, buf, len,
3676 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) + offs);
3677 }
3678
3679@@ -66,7 +66,7 @@ pci_vfio_write_config(const struct rte_intr_handle *intr_handle,
3680 if (vfio_dev_fd < 0)
3681 return -1;
3682
3683- return pwrite64(vfio_dev_fd, buf, len,
3684+ return pwrite(vfio_dev_fd, buf, len,
3685 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) + offs);
3686 }
3687
3688@@ -80,7 +80,7 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
3689 uint8_t cap_id, cap_offset;
3690
3691 /* read PCI capability pointer from config space */
3692- ret = pread64(fd, &reg, sizeof(reg),
3693+ ret = pread(fd, &reg, sizeof(reg),
3694 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3695 PCI_CAPABILITY_LIST);
3696 if (ret != sizeof(reg)) {
3697@@ -95,7 +95,7 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
3698 while (cap_offset) {
3699
3700 /* read PCI capability ID */
3701- ret = pread64(fd, &reg, sizeof(reg),
3702+ ret = pread(fd, &reg, sizeof(reg),
3703 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3704 cap_offset);
3705 if (ret != sizeof(reg)) {
3706@@ -109,7 +109,7 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
3707
3708 /* if we haven't reached MSI-X, check next capability */
3709 if (cap_id != PCI_CAP_ID_MSIX) {
3710- ret = pread64(fd, &reg, sizeof(reg),
3711+ ret = pread(fd, &reg, sizeof(reg),
3712 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3713 cap_offset);
3714 if (ret != sizeof(reg)) {
3715@@ -126,7 +126,7 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
3716 /* else, read table offset */
3717 else {
3718 /* table offset resides in the next 4 bytes */
3719- ret = pread64(fd, &reg, sizeof(reg),
3720+ ret = pread(fd, &reg, sizeof(reg),
3721 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3722 cap_offset + 4);
3723 if (ret != sizeof(reg)) {
3724@@ -135,7 +135,7 @@ pci_vfio_get_msix_bar(int fd, struct pci_msix_table *msix_table)
3725 return -1;
3726 }
3727
3728- ret = pread64(fd, &flags, sizeof(flags),
3729+ ret = pread(fd, &flags, sizeof(flags),
3730 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3731 cap_offset + 2);
3732 if (ret != sizeof(flags)) {
3733@@ -162,7 +162,7 @@ pci_vfio_enable_bus_memory(int dev_fd)
3734 uint16_t cmd;
3735 int ret;
3736
3737- ret = pread64(dev_fd, &cmd, sizeof(cmd),
3738+ ret = pread(dev_fd, &cmd, sizeof(cmd),
3739 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3740 PCI_COMMAND);
3741
3742@@ -175,7 +175,7 @@ pci_vfio_enable_bus_memory(int dev_fd)
3743 return 0;
3744
3745 cmd |= PCI_COMMAND_MEMORY;
3746- ret = pwrite64(dev_fd, &cmd, sizeof(cmd),
3747+ ret = pwrite(dev_fd, &cmd, sizeof(cmd),
3748 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3749 PCI_COMMAND);
3750
3751@@ -194,7 +194,7 @@ pci_vfio_set_bus_master(int dev_fd, bool op)
3752 uint16_t reg;
3753 int ret;
3754
3755- ret = pread64(dev_fd, &reg, sizeof(reg),
3756+ ret = pread(dev_fd, &reg, sizeof(reg),
3757 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3758 PCI_COMMAND);
3759 if (ret != sizeof(reg)) {
3760@@ -208,7 +208,7 @@ pci_vfio_set_bus_master(int dev_fd, bool op)
3761 else
3762 reg &= ~(PCI_COMMAND_MASTER);
3763
3764- ret = pwrite64(dev_fd, &reg, sizeof(reg),
3765+ ret = pwrite(dev_fd, &reg, sizeof(reg),
3766 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX) +
3767 PCI_COMMAND);
3768
3769@@ -464,7 +464,7 @@ pci_vfio_is_ioport_bar(int vfio_dev_fd, int bar_index)
3770 uint32_t ioport_bar;
3771 int ret;
3772
3773- ret = pread64(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
3774+ ret = pread(vfio_dev_fd, &ioport_bar, sizeof(ioport_bar),
3775 VFIO_GET_REGION_ADDR(VFIO_PCI_CONFIG_REGION_INDEX)
3776 + PCI_BASE_ADDRESS_0 + bar_index*4);
3777 if (ret != sizeof(ioport_bar)) {
3778@@ -1133,7 +1133,7 @@ pci_vfio_ioport_read(struct rte_pci_ioport *p,
3779 if (vfio_dev_fd < 0)
3780 return;
3781
3782- if (pread64(vfio_dev_fd, data,
3783+ if (pread(vfio_dev_fd, data,
3784 len, p->base + offset) <= 0)
3785 RTE_LOG(ERR, EAL,
3786 "Can't read from PCI bar (%" PRIu64 ") : offset (%x)\n",
3787@@ -1150,7 +1150,7 @@ pci_vfio_ioport_write(struct rte_pci_ioport *p,
3788 if (vfio_dev_fd < 0)
3789 return;
3790
3791- if (pwrite64(vfio_dev_fd, data,
3792+ if (pwrite(vfio_dev_fd, data,
3793 len, p->base + offset) <= 0)
3794 RTE_LOG(ERR, EAL,
3795 "Can't write to PCI bar (%" PRIu64 ") : offset (%x)\n",
3796diff --git a/drivers/bus/pci/pci_common_uio.c b/drivers/bus/pci/pci_common_uio.c
3797index 76c661f..a06378b 100644
3798--- a/drivers/bus/pci/pci_common_uio.c
3799+++ b/drivers/bus/pci/pci_common_uio.c
3800@@ -26,7 +26,7 @@ EAL_REGISTER_TAILQ(rte_uio_tailq)
3801 static int
3802 pci_uio_map_secondary(struct rte_pci_device *dev)
3803 {
3804- int fd, i, j;
3805+ int fd, i = 0, j, res_idx;
3806 struct mapped_pci_resource *uio_res;
3807 struct mapped_pci_res_list *uio_res_list =
3808 RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list);
3809@@ -37,7 +37,15 @@ pci_uio_map_secondary(struct rte_pci_device *dev)
3810 if (rte_pci_addr_cmp(&uio_res->pci_addr, &dev->addr))
3811 continue;
3812
3813- for (i = 0; i != uio_res->nb_maps; i++) {
3814+ /* Map all BARs */
3815+ for (res_idx = 0; res_idx != PCI_MAX_RESOURCE; res_idx++) {
3816+ /* skip empty BAR */
3817+ if (dev->mem_resource[res_idx].phys_addr == 0)
3818+ continue;
3819+
3820+ if (i >= uio_res->nb_maps)
3821+ return -1;
3822+
3823 /*
3824 * open devname, to mmap it
3825 */
3826@@ -71,7 +79,9 @@ pci_uio_map_secondary(struct rte_pci_device *dev)
3827 }
3828 return -1;
3829 }
3830- dev->mem_resource[i].addr = mapaddr;
3831+ dev->mem_resource[res_idx].addr = mapaddr;
3832+
3833+ i++;
3834 }
3835 return 0;
3836 }
3837@@ -96,15 +106,15 @@ pci_uio_map_resource(struct rte_pci_device *dev)
3838 if (rte_intr_dev_fd_set(dev->intr_handle, -1))
3839 return -1;
3840
3841- /* secondary processes - use already recorded details */
3842- if (rte_eal_process_type() != RTE_PROC_PRIMARY)
3843- return pci_uio_map_secondary(dev);
3844-
3845 /* allocate uio resource */
3846 ret = pci_uio_alloc_resource(dev, &uio_res);
3847 if (ret)
3848 return ret;
3849
3850+ /* secondary processes - use already recorded details */
3851+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
3852+ return pci_uio_map_secondary(dev);
3853+
3854 /* Map all BARs */
3855 for (i = 0; i != PCI_MAX_RESOURCE; i++) {
3856 /* skip empty BAR */
3857@@ -220,6 +230,18 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
3858 if (uio_res == NULL)
3859 return;
3860
3861+ /* close fd */
3862+ if (rte_intr_fd_get(dev->intr_handle) >= 0)
3863+ close(rte_intr_fd_get(dev->intr_handle));
3864+ uio_cfg_fd = rte_intr_dev_fd_get(dev->intr_handle);
3865+ if (uio_cfg_fd >= 0) {
3866+ close(uio_cfg_fd);
3867+ rte_intr_dev_fd_set(dev->intr_handle, -1);
3868+ }
3869+
3870+ rte_intr_fd_set(dev->intr_handle, -1);
3871+ rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN);
3872+
3873 /* secondary processes - just free maps */
3874 if (rte_eal_process_type() != RTE_PROC_PRIMARY)
3875 return pci_uio_unmap(uio_res);
3876@@ -231,16 +253,4 @@ pci_uio_unmap_resource(struct rte_pci_device *dev)
3877
3878 /* free uio resource */
3879 rte_free(uio_res);
3880-
3881- /* close fd if in primary process */
3882- if (rte_intr_fd_get(dev->intr_handle) >= 0)
3883- close(rte_intr_fd_get(dev->intr_handle));
3884- uio_cfg_fd = rte_intr_dev_fd_get(dev->intr_handle);
3885- if (uio_cfg_fd >= 0) {
3886- close(uio_cfg_fd);
3887- rte_intr_dev_fd_set(dev->intr_handle, -1);
3888- }
3889-
3890- rte_intr_fd_set(dev->intr_handle, -1);
3891- rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN);
3892 }
3893diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
3894index 272ea70..c040a6d 100644
3895--- a/drivers/bus/vdev/vdev.c
3896+++ b/drivers/bus/vdev/vdev.c
3897@@ -289,7 +289,6 @@ insert_vdev(const char *name, const char *args,
3898
3899 dev->device.bus = &rte_vdev_bus;
3900 dev->device.numa_node = SOCKET_ID_ANY;
3901- dev->device.name = devargs->name;
3902
3903 if (find_vdev(name)) {
3904 /*
3905@@ -304,6 +303,7 @@ insert_vdev(const char *name, const char *args,
3906 if (init)
3907 rte_devargs_insert(&devargs);
3908 dev->device.devargs = devargs;
3909+ dev->device.name = devargs->name;
3910 TAILQ_INSERT_TAIL(&vdev_device_list, dev, next);
3911
3912 if (p_dev)
3913diff --git a/drivers/common/cnxk/roc_irq.c b/drivers/common/cnxk/roc_irq.c
3914index 010b121..fb11bcb 100644
3915--- a/drivers/common/cnxk/roc_irq.c
3916+++ b/drivers/common/cnxk/roc_irq.c
3917@@ -15,7 +15,7 @@
3918
3919 #define MSIX_IRQ_SET_BUF_LEN \
3920 (sizeof(struct vfio_irq_set) + sizeof(int) * \
3921- (plt_intr_max_intr_get(intr_handle)))
3922+ ((uint32_t)plt_intr_max_intr_get(intr_handle)))
3923
3924 static int
3925 irq_get_info(struct plt_intr_handle *intr_handle)
3926diff --git a/drivers/common/cnxk/roc_npc.c b/drivers/common/cnxk/roc_npc.c
3927index 9422a42..5183d30 100644
3928--- a/drivers/common/cnxk/roc_npc.c
3929+++ b/drivers/common/cnxk/roc_npc.c
3930@@ -716,9 +716,35 @@ npc_rss_action_configure(struct roc_npc *roc_npc,
3931 uint8_t key[ROC_NIX_RSS_KEY_LEN];
3932 const uint8_t *key_ptr;
3933 uint8_t flowkey_algx;
3934+ uint32_t key_len;
3935 uint16_t *reta;
3936 int rc;
3937
3938+ roc_nix_rss_key_get(roc_nix, key);
3939+ if (rss->key == NULL) {
3940+ key_ptr = key;
3941+ } else {
3942+ key_len = rss->key_len;
3943+ if (key_len > ROC_NIX_RSS_KEY_LEN)
3944+ key_len = ROC_NIX_RSS_KEY_LEN;
3945+
3946+ for (i = 0; i < key_len; i++) {
3947+ if (key[i] != rss->key[i]) {
3948+ plt_err("RSS key config not supported");
3949+ plt_err("New Key:");
3950+ for (i = 0; i < key_len; i++)
3951+ plt_dump_no_nl("0x%.2x ", rss->key[i]);
3952+ plt_dump_no_nl("\n");
3953+ plt_err("Configured Key:");
3954+ for (i = 0; i < ROC_NIX_RSS_KEY_LEN; i++)
3955+ plt_dump_no_nl("0x%.2x ", key[i]);
3956+ plt_dump_no_nl("\n");
3957+ return -ENOTSUP;
3958+ }
3959+ }
3960+ key_ptr = rss->key;
3961+ }
3962+
3963 rc = npc_rss_free_grp_get(npc, &rss_grp_idx);
3964 /* RSS group :0 is not usable for flow rss action */
3965 if (rc < 0 || rss_grp_idx == 0)
3966@@ -733,13 +759,6 @@ npc_rss_action_configure(struct roc_npc *roc_npc,
3967
3968 *rss_grp = rss_grp_idx;
3969
3970- if (rss->key == NULL) {
3971- roc_nix_rss_key_default_fill(roc_nix, key);
3972- key_ptr = key;
3973- } else {
3974- key_ptr = rss->key;
3975- }
3976-
3977 roc_nix_rss_key_set(roc_nix, key_ptr);
3978
3979 /* If queue count passed in the rss action is less than
3980diff --git a/drivers/common/cnxk/roc_platform.c b/drivers/common/cnxk/roc_platform.c
3981index 6cf0c41..e5fab69 100644
3982--- a/drivers/common/cnxk/roc_platform.c
3983+++ b/drivers/common/cnxk/roc_platform.c
3984@@ -60,7 +60,7 @@ roc_plt_init(void)
3985 return 0;
3986 }
3987
3988-RTE_LOG_REGISTER(cnxk_logtype_base, pmd.cnxk.base, NOTICE);
3989+RTE_LOG_REGISTER(cnxk_logtype_base, pmd.cnxk.base, INFO);
3990 RTE_LOG_REGISTER(cnxk_logtype_mbox, pmd.cnxk.mbox, NOTICE);
3991 RTE_LOG_REGISTER(cnxk_logtype_cpt, pmd.crypto.cnxk, NOTICE);
3992 RTE_LOG_REGISTER(cnxk_logtype_npa, pmd.mempool.cnxk, NOTICE);
3993diff --git a/drivers/common/cnxk/roc_platform.h b/drivers/common/cnxk/roc_platform.h
3994index 61d4781..c79c5fd 100644
3995--- a/drivers/common/cnxk/roc_platform.h
3996+++ b/drivers/common/cnxk/roc_platform.h
3997@@ -203,7 +203,8 @@ extern int cnxk_logtype_tm;
3998 #define plt_info(fmt, args...) RTE_LOG(INFO, PMD, fmt "\n", ##args)
3999 #define plt_warn(fmt, args...) RTE_LOG(WARNING, PMD, fmt "\n", ##args)
4000 #define plt_print(fmt, args...) RTE_LOG(INFO, PMD, fmt "\n", ##args)
4001-#define plt_dump(fmt, ...) fprintf(stderr, fmt "\n", ##__VA_ARGS__)
4002+#define plt_dump(fmt, ...) fprintf(stderr, fmt "\n", ##__VA_ARGS__)
4003+#define plt_dump_no_nl(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
4004
4005 /**
4006 * Log debug message if given subsystem logging is enabled.
4007diff --git a/drivers/common/dpaax/caamflib/desc/pdcp.h b/drivers/common/dpaax/caamflib/desc/pdcp.h
4008index 2c9c631..fc2db20 100644
4009--- a/drivers/common/dpaax/caamflib/desc/pdcp.h
4010+++ b/drivers/common/dpaax/caamflib/desc/pdcp.h
4011@@ -1303,6 +1303,11 @@ pdcp_insert_uplane_aes_aes_op(struct program *p,
4012 SEQFIFOLOAD(p, MSG1, 0, VLF | LAST1 | FLUSH1);
4013 MOVEB(p, CONTEXT1, 0, MATH3, 0, 4, WAITCOMP | IMMED);
4014
4015+ /* conditional jump with calm added to ensure that the
4016+ * previous processing has been completed
4017+ */
4018+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4019+
4020 LOAD(p, CLRW_RESET_CLS1_CHA |
4021 CLRW_CLR_C1KEY |
4022 CLRW_CLR_C1CTX |
4023@@ -1350,6 +1355,11 @@ pdcp_insert_uplane_aes_aes_op(struct program *p,
4024
4025 MOVEB(p, OFIFO, 0, MATH3, 0, 4, IMMED);
4026
4027+ /* conditional jump with calm added to ensure that the
4028+ * previous processing has been completed
4029+ */
4030+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4031+
4032 LOAD(p, CLRW_RESET_CLS1_CHA |
4033 CLRW_CLR_C1KEY |
4034 CLRW_CLR_C1CTX |
4035@@ -1564,6 +1574,11 @@ pdcp_insert_cplane_snow_aes_op(struct program *p,
4036 CLRW_CLR_C1MODE,
4037 CLRW, 0, 4, IMMED);
4038
4039+ /* conditional jump with calm added to ensure that the
4040+ * previous processing has been completed
4041+ */
4042+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4043+
4044 if (rta_sec_era <= RTA_SEC_ERA_3)
4045 LOAD(p, CCTRL_RESET_CHA_ALL, CCTRL, 0, 4, IMMED);
4046
4047@@ -2409,6 +2424,11 @@ pdcp_insert_cplane_zuc_aes_op(struct program *p,
4048
4049 MOVEB(p, OFIFO, 0, MATH3, 0, 4, IMMED);
4050
4051+ /* conditional jump with calm added to ensure that the
4052+ * previous processing has been completed
4053+ */
4054+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4055+
4056 LOAD(p, CLRW_RESET_CLS1_CHA |
4057 CLRW_CLR_C1KEY |
4058 CLRW_CLR_C1CTX |
4059diff --git a/drivers/common/dpaax/caamflib/desc/sdap.h b/drivers/common/dpaax/caamflib/desc/sdap.h
4060index 07f55b5..084392d 100644
4061--- a/drivers/common/dpaax/caamflib/desc/sdap.h
4062+++ b/drivers/common/dpaax/caamflib/desc/sdap.h
4063@@ -1,5 +1,5 @@
4064 /* SPDX-License-Identifier: BSD-3-Clause
4065- * Copyright 2020-2021 NXP
4066+ * Copyright 2020-2023 NXP
4067 */
4068
4069 #ifndef __DESC_SDAP_H__
4070@@ -704,6 +704,10 @@ static inline int pdcp_sdap_insert_no_snoop_op(
4071 /* Save the ICV generated */
4072 MOVEB(p, CONTEXT1, 0, MATH3, 0, 4, WAITCOMP | IMMED);
4073
4074+ /* conditional jump with calm added to ensure that the
4075+ * previous processing has been completed
4076+ */
4077+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4078 /* The CHA will be reused so we need to clear it */
4079 LOAD(p, CLRW_RESET_CLS1_CHA |
4080 CLRW_CLR_C1KEY |
4081@@ -794,6 +798,10 @@ static inline int pdcp_sdap_insert_no_snoop_op(
4082 /* Save the ICV which is stalling in output FIFO to MATH3 */
4083 MOVEB(p, OFIFO, 0, MATH3, 0, 4, IMMED);
4084
4085+ /* conditional jump with calm added to ensure that the
4086+ * previous processing has been completed
4087+ */
4088+ JUMP(p, 1, LOCAL_JUMP, ALL_TRUE, CALM);
4089 /* Reset class 1 CHA */
4090 LOAD(p, CLRW_RESET_CLS1_CHA |
4091 CLRW_CLR_C1KEY |
4092diff --git a/drivers/common/dpaax/dpaax_iova_table.c b/drivers/common/dpaax/dpaax_iova_table.c
4093index 9daac4b..860e702 100644
4094--- a/drivers/common/dpaax/dpaax_iova_table.c
4095+++ b/drivers/common/dpaax/dpaax_iova_table.c
4096@@ -1,5 +1,5 @@
4097 /* SPDX-License-Identifier: BSD-3-Clause
4098- * Copyright 2018 NXP
4099+ * Copyright 2018-2023 NXP
4100 */
4101
4102 #include <rte_memory.h>
4103@@ -139,10 +139,12 @@ read_memory_node(unsigned int *count)
4104 }
4105
4106 DPAAX_DEBUG("Device-tree memory node data:");
4107- do {
4108+
4109+ while (j > 0) {
4110+ --j;
4111 DPAAX_DEBUG(" %08" PRIx64 " %08zu",
4112 nodes[j].addr, nodes[j].len);
4113- } while (--j);
4114+ }
4115
4116 cleanup:
4117 close(fd);
4118@@ -255,10 +257,7 @@ dpaax_iova_table_populate(void)
4119 void
4120 dpaax_iova_table_depopulate(void)
4121 {
4122- if (dpaax_iova_table_p == NULL)
4123- return;
4124-
4125- rte_free(dpaax_iova_table_p->entries);
4126+ rte_free(dpaax_iova_table_p);
4127 dpaax_iova_table_p = NULL;
4128
4129 DPAAX_DEBUG("IOVA Table cleaned");
4130diff --git a/drivers/common/iavf/iavf_prototype.h b/drivers/common/iavf/iavf_prototype.h
4131index 1c125d1..b327549 100644
4132--- a/drivers/common/iavf/iavf_prototype.h
4133+++ b/drivers/common/iavf/iavf_prototype.h
4134@@ -83,6 +83,7 @@ void iavf_destroy_spinlock(struct iavf_spinlock *sp);
4135 __rte_internal
4136 void iavf_vf_parse_hw_config(struct iavf_hw *hw,
4137 struct virtchnl_vf_resource *msg);
4138+__rte_internal
4139 enum iavf_status iavf_vf_reset(struct iavf_hw *hw);
4140 __rte_internal
4141 enum iavf_status iavf_aq_send_msg_to_pf(struct iavf_hw *hw,
4142diff --git a/drivers/common/iavf/version.map b/drivers/common/iavf/version.map
4143index e0f1171..6c1427c 100644
4144--- a/drivers/common/iavf/version.map
4145+++ b/drivers/common/iavf/version.map
4146@@ -7,6 +7,7 @@ INTERNAL {
4147 iavf_set_mac_type;
4148 iavf_shutdown_adminq;
4149 iavf_vf_parse_hw_config;
4150+ iavf_vf_reset;
4151
4152 local: *;
4153 };
4154diff --git a/drivers/common/mlx5/mlx5_common_utils.h b/drivers/common/mlx5/mlx5_common_utils.h
4155index 98e487e..2b01325 100644
4156--- a/drivers/common/mlx5/mlx5_common_utils.h
4157+++ b/drivers/common/mlx5/mlx5_common_utils.h
4158@@ -130,7 +130,7 @@ struct mlx5_list_inconst {
4159 * For huge amount of entries, please consider hash list.
4160 *
4161 */
4162-struct mlx5_list {
4163+struct __rte_aligned(16) mlx5_list {
4164 struct mlx5_list_const l_const;
4165 struct mlx5_list_inconst l_inconst;
4166 };
4167diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
4168index d9585bf..9684e37 100644
4169--- a/drivers/common/mlx5/mlx5_devx_cmds.c
4170+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
4171@@ -919,6 +919,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx,
4172 attr->log_max_qp = MLX5_GET(cmd_hca_cap, hcattr, log_max_qp);
4173 attr->log_max_cq_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_cq_sz);
4174 attr->log_max_qp_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_qp_sz);
4175+ attr->log_max_wq_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_wq_sz);
4176 attr->log_max_mrw_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_mrw_sz);
4177 attr->log_max_pd = MLX5_GET(cmd_hca_cap, hcattr, log_max_pd);
4178 attr->log_max_srq = MLX5_GET(cmd_hca_cap, hcattr, log_max_srq);
4179@@ -1558,7 +1559,7 @@ mlx5_devx_cmd_create_rqt(void *ctx,
4180 uint32_t out[MLX5_ST_SZ_DW(create_rqt_out)] = {0};
4181 void *rqt_ctx;
4182 struct mlx5_devx_obj *rqt = NULL;
4183- int i;
4184+ unsigned int i;
4185
4186 in = mlx5_malloc(MLX5_MEM_ZERO, inlen, 0, SOCKET_ID_ANY);
4187 if (!in) {
4188@@ -1612,7 +1613,7 @@ mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
4189 uint32_t out[MLX5_ST_SZ_DW(modify_rqt_out)] = {0};
4190 uint32_t *in = mlx5_malloc(MLX5_MEM_ZERO, inlen, 0, SOCKET_ID_ANY);
4191 void *rqt_ctx;
4192- int i;
4193+ unsigned int i;
4194 int ret;
4195
4196 if (!in) {
4197@@ -1625,7 +1626,6 @@ mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
4198 MLX5_SET64(modify_rqt_in, in, modify_bitmask, 0x1);
4199 rqt_ctx = MLX5_ADDR_OF(modify_rqt_in, in, rqt_context);
4200 MLX5_SET(rqtc, rqt_ctx, list_q_type, rqt_attr->rq_type);
4201- MLX5_SET(rqtc, rqt_ctx, rqt_max_size, rqt_attr->rqt_max_size);
4202 MLX5_SET(rqtc, rqt_ctx, rqt_actual_size, rqt_attr->rqt_actual_size);
4203 for (i = 0; i < rqt_attr->rqt_actual_size; i++)
4204 MLX5_SET(rqtc, rqt_ctx, rq_num[i], rqt_attr->rq_list[i]);
4205diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h
4206index 4373761..6e76528 100644
4207--- a/drivers/common/mlx5/mlx5_devx_cmds.h
4208+++ b/drivers/common/mlx5/mlx5_devx_cmds.h
4209@@ -228,6 +228,7 @@ struct mlx5_hca_attr {
4210 struct mlx5_hca_vdpa_attr vdpa;
4211 struct mlx5_hca_flow_attr flow;
4212 struct mlx5_hca_flex_attr flex;
4213+ uint8_t log_max_wq_sz;
4214 int log_max_qp_sz;
4215 int log_max_cq_sz;
4216 int log_max_qp;
4217diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h
4218index 58aa72d..f561e53 100644
4219--- a/drivers/common/mlx5/mlx5_prm.h
4220+++ b/drivers/common/mlx5/mlx5_prm.h
4221@@ -249,8 +249,12 @@
4222 /* Maximum number of DS in WQE. Limited by 6-bit field. */
4223 #define MLX5_DSEG_MAX 63
4224
4225-/* The 32 bit syndrome offset in struct mlx5_err_cqe. */
4226+/* The 32 bit syndrome offset in struct mlx5_error_cqe. */
4227+#if (RTE_CACHE_LINE_SIZE == 128)
4228+#define MLX5_ERROR_CQE_SYNDROME_OFFSET 116
4229+#else
4230 #define MLX5_ERROR_CQE_SYNDROME_OFFSET 52
4231+#endif
4232
4233 /* The completion mode offset in the WQE control segment line 2. */
4234 #define MLX5_COMP_MODE_OFFSET 2
4235@@ -379,6 +383,29 @@ struct mlx5_wqe_mprq {
4236
4237 #define MLX5_MPRQ_STRIDE_SHIFT_BYTE 2
4238
4239+struct mlx5_error_cqe {
4240+#if (RTE_CACHE_LINE_SIZE == 128)
4241+ uint8_t padding[64];
4242+#endif
4243+ uint8_t rsvd0[2];
4244+ uint16_t eth_wqe_id;
4245+ uint8_t rsvd1[16];
4246+ uint16_t ib_stride_index;
4247+ uint8_t rsvd2[10];
4248+ uint32_t srqn;
4249+ uint8_t rsvd3[8];
4250+ uint32_t byte_cnt;
4251+ uint8_t rsvd4[4];
4252+ uint8_t hw_err_synd;
4253+ uint8_t hw_synd_type;
4254+ uint8_t vendor_err_synd;
4255+ uint8_t syndrome;
4256+ uint32_t s_wqe_opcode_qpn;
4257+ uint16_t wqe_counter;
4258+ uint8_t signature;
4259+ uint8_t op_own;
4260+};
4261+
4262 /* CQ element structure - should be equal to the cache line size */
4263 struct mlx5_cqe {
4264 #if (RTE_CACHE_LINE_SIZE == 128)
4265@@ -753,7 +780,7 @@ struct mlx5_modification_cmd {
4266 unsigned int field:12;
4267 unsigned int action_type:4;
4268 };
4269- };
4270+ } __rte_packed;
4271 union {
4272 uint32_t data1;
4273 uint8_t data[4];
4274@@ -764,7 +791,7 @@ struct mlx5_modification_cmd {
4275 unsigned int dst_field:12;
4276 unsigned int rsvd4:4;
4277 };
4278- };
4279+ } __rte_packed;
4280 };
4281
4282 typedef uint64_t u64;
4283diff --git a/drivers/common/mlx5/windows/mlx5_win_defs.h b/drivers/common/mlx5/windows/mlx5_win_defs.h
4284index 0c09325..d79728b 100644
4285--- a/drivers/common/mlx5/windows/mlx5_win_defs.h
4286+++ b/drivers/common/mlx5/windows/mlx5_win_defs.h
4287@@ -223,18 +223,6 @@ struct mlx5_action {
4288 } dest_tir;
4289 };
4290
4291-struct mlx5_err_cqe {
4292- uint8_t rsvd0[32];
4293- uint32_t srqn;
4294- uint8_t rsvd1[18];
4295- uint8_t vendor_err_synd;
4296- uint8_t syndrome;
4297- uint32_t s_wqe_opcode_qpn;
4298- uint16_t wqe_counter;
4299- uint8_t signature;
4300- uint8_t op_own;
4301-};
4302-
4303 struct mlx5_wqe_srq_next_seg {
4304 uint8_t rsvd0[2];
4305 rte_be16_t next_wqe_index;
4306diff --git a/drivers/compress/mlx5/mlx5_compress.c b/drivers/compress/mlx5/mlx5_compress.c
4307index 515b5df..e1ca777 100644
4308--- a/drivers/compress/mlx5/mlx5_compress.c
4309+++ b/drivers/compress/mlx5/mlx5_compress.c
4310@@ -537,7 +537,7 @@ mlx5_compress_dump_err_objs(volatile uint32_t *cqe, volatile uint32_t *wqe,
4311 size_t i;
4312
4313 DRV_LOG(ERR, "Error cqe:");
4314- for (i = 0; i < sizeof(struct mlx5_err_cqe) >> 2; i += 4)
4315+ for (i = 0; i < sizeof(struct mlx5_error_cqe) >> 2; i += 4)
4316 DRV_LOG(ERR, "%08X %08X %08X %08X", cqe[i], cqe[i + 1],
4317 cqe[i + 2], cqe[i + 3]);
4318 DRV_LOG(ERR, "\nError wqe:");
4319@@ -555,7 +555,7 @@ mlx5_compress_cqe_err_handle(struct mlx5_compress_qp *qp,
4320 struct rte_comp_op *op)
4321 {
4322 const uint32_t idx = qp->ci & (qp->entries_n - 1);
4323- volatile struct mlx5_err_cqe *cqe = (volatile struct mlx5_err_cqe *)
4324+ volatile struct mlx5_error_cqe *cqe = (volatile struct mlx5_error_cqe *)
4325 &qp->cq.cqes[idx];
4326 volatile struct mlx5_gga_wqe *wqes = (volatile struct mlx5_gga_wqe *)
4327 qp->qp.wqes;
4328diff --git a/drivers/crypto/bcmfs/bcmfs_device.c b/drivers/crypto/bcmfs/bcmfs_device.c
4329index 27720e4..0d43a9b 100644
4330--- a/drivers/crypto/bcmfs/bcmfs_device.c
4331+++ b/drivers/crypto/bcmfs/bcmfs_device.c
4332@@ -138,7 +138,7 @@ fsdev_allocate_one_dev(struct rte_vdev_device *vdev,
4333 return fsdev;
4334
4335 cleanup:
4336- free(fsdev);
4337+ rte_free(fsdev);
4338
4339 return NULL;
4340 }
4341@@ -162,7 +162,7 @@ fsdev_release(struct bcmfs_device *fsdev)
4342 return;
4343
4344 TAILQ_REMOVE(&fsdev_list, fsdev, next);
4345- free(fsdev);
4346+ rte_free(fsdev);
4347 }
4348
4349 static int
4350diff --git a/drivers/crypto/cnxk/cnxk_ae.h b/drivers/crypto/cnxk/cnxk_ae.h
4351index 6222171..16d67a8 100644
4352--- a/drivers/crypto/cnxk/cnxk_ae.h
4353+++ b/drivers/crypto/cnxk/cnxk_ae.h
4354@@ -25,13 +25,22 @@ struct cnxk_ae_sess {
4355 };
4356
4357 static __rte_always_inline void
4358-cnxk_ae_modex_param_normalize(uint8_t **data, size_t *len)
4359+cnxk_ae_modex_param_normalize(uint8_t **data, size_t *len, size_t max)
4360 {
4361+ uint8_t msw_len = *len % 8;
4362+ uint64_t msw_val = 0;
4363 size_t i;
4364
4365- /* Strip leading NUL bytes */
4366- for (i = 0; i < *len; i++) {
4367- if ((*data)[i] != 0)
4368+ if (*len <= 8)
4369+ return;
4370+
4371+ memcpy(&msw_val, *data, msw_len);
4372+ if (msw_val != 0)
4373+ return;
4374+
4375+ for (i = msw_len; i < *len && (*len - i) < max; i += 8) {
4376+ memcpy(&msw_val, &(*data)[i], 8);
4377+ if (msw_val != 0)
4378 break;
4379 }
4380 *data += i;
4381@@ -48,8 +57,8 @@ cnxk_ae_fill_modex_params(struct cnxk_ae_sess *sess,
4382 uint8_t *exp = xform->modex.exponent.data;
4383 uint8_t *mod = xform->modex.modulus.data;
4384
4385- cnxk_ae_modex_param_normalize(&mod, &mod_len);
4386- cnxk_ae_modex_param_normalize(&exp, &exp_len);
4387+ cnxk_ae_modex_param_normalize(&mod, &mod_len, SIZE_MAX);
4388+ cnxk_ae_modex_param_normalize(&exp, &exp_len, mod_len);
4389
4390 if (unlikely(exp_len == 0 || mod_len == 0))
4391 return -EINVAL;
4392@@ -222,7 +231,7 @@ cnxk_ae_modex_prep(struct rte_crypto_op *op, struct roc_ae_buf_ptr *meta_buf,
4393 struct rte_crypto_mod_op_param mod_op;
4394 uint64_t total_key_len;
4395 union cpt_inst_w4 w4;
4396- uint32_t base_len;
4397+ size_t base_len;
4398 uint32_t dlen;
4399 uint8_t *dptr;
4400
4401@@ -230,8 +239,11 @@ cnxk_ae_modex_prep(struct rte_crypto_op *op, struct roc_ae_buf_ptr *meta_buf,
4402
4403 base_len = mod_op.base.length;
4404 if (unlikely(base_len > mod_len)) {
4405- op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
4406- return -ENOTSUP;
4407+ cnxk_ae_modex_param_normalize(&mod_op.base.data, &base_len, mod_len);
4408+ if (base_len > mod_len) {
4409+ op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
4410+ return -ENOTSUP;
4411+ }
4412 }
4413
4414 total_key_len = mod_len + exp_len;
4415diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
4416index c9745f1..90bc9ad 100644
4417--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
4418+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
4419@@ -3186,6 +3186,7 @@ dpaa2_sec_set_pdcp_session(struct rte_cryptodev *dev,
4420 }
4421 } else {
4422 DPAA2_SEC_ERR("Invalid crypto type");
4423+ rte_free(priv);
4424 return -EINVAL;
4425 }
4426
4427@@ -3814,7 +3815,7 @@ dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
4428 cfg.dest_cfg.priority = priority;
4429
4430 cfg.options |= DPSECI_QUEUE_OPT_USER_CTX;
4431- cfg.user_ctx = (size_t)(qp);
4432+ cfg.user_ctx = (size_t)(&qp->rx_vq);
4433 if (event->sched_type == RTE_SCHED_TYPE_ATOMIC) {
4434 cfg.options |= DPSECI_QUEUE_OPT_ORDER_PRESERVATION;
4435 cfg.order_preservation_en = 1;
4436diff --git a/drivers/crypto/ipsec_mb/meson.build b/drivers/crypto/ipsec_mb/meson.build
4437index e644853..a017ebd 100644
4438--- a/drivers/crypto/ipsec_mb/meson.build
4439+++ b/drivers/crypto/ipsec_mb/meson.build
4440@@ -13,7 +13,7 @@ if not lib.found()
4441 build = false
4442 reason = 'missing dependency, "libIPSec_MB"'
4443 # if the lib is found, check it's the right format
4444-elif meson.version().version_compare('>=0.60') and not cc.links(
4445+elif not cc.links(
4446 'int main(void) {return 0;}', dependencies: lib)
4447 build = false
4448 reason = 'incompatible dependency, "libIPSec_MB"'
4449diff --git a/drivers/crypto/mlx5/mlx5_crypto.c b/drivers/crypto/mlx5/mlx5_crypto.c
4450index 36db31a..8a53af8 100644
4451--- a/drivers/crypto/mlx5/mlx5_crypto.c
4452+++ b/drivers/crypto/mlx5/mlx5_crypto.c
4453@@ -472,7 +472,7 @@ static __rte_noinline void
4454 mlx5_crypto_cqe_err_handle(struct mlx5_crypto_qp *qp, struct rte_crypto_op *op)
4455 {
4456 const uint32_t idx = qp->ci & (qp->entries_n - 1);
4457- volatile struct mlx5_err_cqe *cqe = (volatile struct mlx5_err_cqe *)
4458+ volatile struct mlx5_error_cqe *cqe = (volatile struct mlx5_error_cqe *)
4459 &qp->cq_obj.cqes[idx];
4460
4461 op->status = RTE_CRYPTO_OP_STATUS_ERROR;
4462diff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c
4463index 514e932..a75fb09 100644
4464--- a/drivers/crypto/openssl/rte_openssl_pmd.c
4465+++ b/drivers/crypto/openssl/rte_openssl_pmd.c
4466@@ -4,6 +4,7 @@
4467
4468 #define OPENSSL_API_COMPAT 0x10100000L
4469
4470+#include <rte_byteorder.h>
4471 #include <rte_common.h>
4472 #include <rte_hexdump.h>
4473 #include <rte_cryptodev.h>
4474@@ -43,22 +44,6 @@ static void HMAC_CTX_free(HMAC_CTX *ctx)
4475
4476 static int cryptodev_openssl_remove(struct rte_vdev_device *vdev);
4477
4478-/*----------------------------------------------------------------------------*/
4479-
4480-/**
4481- * Increment counter by 1
4482- * Counter is 64 bit array, big-endian
4483- */
4484-static void
4485-ctr_inc(uint8_t *ctr)
4486-{
4487- uint64_t *ctr64 = (uint64_t *)ctr;
4488-
4489- *ctr64 = __builtin_bswap64(*ctr64);
4490- (*ctr64)++;
4491- *ctr64 = __builtin_bswap64(*ctr64);
4492-}
4493-
4494 /*
4495 *------------------------------------------------------------------------------
4496 * Session Prepare
4497@@ -465,6 +450,15 @@ openssl_set_session_cipher_parameters(struct openssl_session *sess,
4498 sess->cipher.key.length,
4499 sess->cipher.key.data) != 0)
4500 return -EINVAL;
4501+
4502+
4503+ /* We use 3DES encryption also for decryption.
4504+ * IV is not important for 3DES ECB.
4505+ */
4506+ if (EVP_EncryptInit_ex(sess->cipher.ctx, EVP_des_ede3_ecb(),
4507+ NULL, sess->cipher.key.data, NULL) != 1)
4508+ return -EINVAL;
4509+
4510 break;
4511
4512 case RTE_CRYPTO_CIPHER_DES_CBC:
4513@@ -1001,10 +995,10 @@ process_cipher_decrypt_err:
4514 /** Process cipher des 3 ctr encryption, decryption algorithm */
4515 static int
4516 process_openssl_cipher_des3ctr(struct rte_mbuf *mbuf_src, uint8_t *dst,
4517- int offset, uint8_t *iv, uint8_t *key, int srclen,
4518- EVP_CIPHER_CTX *ctx)
4519+ int offset, uint8_t *iv, int srclen, EVP_CIPHER_CTX *ctx)
4520 {
4521- uint8_t ebuf[8], ctr[8];
4522+ uint8_t ebuf[8];
4523+ uint64_t ctr;
4524 int unused, n;
4525 struct rte_mbuf *m;
4526 uint8_t *src;
4527@@ -1020,21 +1014,19 @@ process_openssl_cipher_des3ctr(struct rte_mbuf *mbuf_src, uint8_t *dst,
4528 src = rte_pktmbuf_mtod_offset(m, uint8_t *, offset);
4529 l = rte_pktmbuf_data_len(m) - offset;
4530
4531- /* We use 3DES encryption also for decryption.
4532- * IV is not important for 3DES ecb
4533- */
4534- if (EVP_EncryptInit_ex(ctx, EVP_des_ede3_ecb(), NULL, key, NULL) <= 0)
4535- goto process_cipher_des3ctr_err;
4536-
4537- memcpy(ctr, iv, 8);
4538+ memcpy(&ctr, iv, 8);
4539
4540 for (n = 0; n < srclen; n++) {
4541 if (n % 8 == 0) {
4542+ uint64_t cpu_ctr;
4543+
4544 if (EVP_EncryptUpdate(ctx,
4545 (unsigned char *)&ebuf, &unused,
4546 (const unsigned char *)&ctr, 8) <= 0)
4547 goto process_cipher_des3ctr_err;
4548- ctr_inc(ctr);
4549+ cpu_ctr = rte_be_to_cpu_64(ctr);
4550+ cpu_ctr++;
4551+ ctr = rte_cpu_to_be_64(cpu_ctr);
4552 }
4553 dst[n] = *(src++) ^ ebuf[n % 8];
4554
4555@@ -1460,8 +1452,7 @@ process_openssl_cipher_op
4556 srclen, ctx_copy, inplace);
4557 else
4558 status = process_openssl_cipher_des3ctr(mbuf_src, dst,
4559- op->sym->cipher.data.offset, iv,
4560- sess->cipher.key.data, srclen,
4561+ op->sym->cipher.data.offset, iv, srclen,
4562 ctx_copy);
4563
4564 EVP_CIPHER_CTX_free(ctx_copy);
4565diff --git a/drivers/dma/idxd/dpdk_idxd_cfg.py b/drivers/dma/idxd/dpdk_idxd_cfg.py
4566index 3f5d5ee..5c9572b 100755
4567--- a/drivers/dma/idxd/dpdk_idxd_cfg.py
4568+++ b/drivers/dma/idxd/dpdk_idxd_cfg.py
4569@@ -13,18 +13,24 @@ import os.path
4570
4571
4572 class SysfsDir:
4573+ verbose = False
4574+
4575 "Used to read/write paths in a sysfs directory"
4576 def __init__(self, path):
4577 self.path = path
4578
4579 def read_int(self, filename):
4580 "Return a value from sysfs file"
4581+ if SysfsDir.verbose:
4582+ print(f"Reading '{filename}' in {self.path}")
4583 with open(os.path.join(self.path, filename)) as f:
4584 return int(f.readline())
4585
4586 def write_values(self, values):
4587 "write dictionary, where key is filename and value is value to write"
4588 for filename, contents in values.items():
4589+ if SysfsDir.verbose:
4590+ print(f"Writing '{contents}' to '{filename}' in {self.path}")
4591 with open(os.path.join(self.path, filename), "w") as f:
4592 f.write(str(contents))
4593
4594@@ -63,7 +69,15 @@ def get_dsa_id(pci):
4595 sys.exit(f"Could not get device ID for device {pci}")
4596
4597
4598-def configure_dsa(dsa_id, queues, prefix):
4599+def parse_wq_opts(wq_opts):
4600+ "Parse user-specified queue configuration, creating a dict of options"
4601+ try:
4602+ return {o.split('=')[0]: o.split('=')[1] for o in wq_opts}
4603+ except ValueError:
4604+ sys.exit("Invalid --wq-option format, use format 'option=value'")
4605+
4606+
4607+def configure_dsa(dsa_id, args):
4608 "Configure the DSA instance with appropriate number of queues"
4609 dsa_dir = SysfsDir(f"/sys/bus/dsa/devices/dsa{dsa_id}")
4610
4611@@ -72,8 +86,8 @@ def configure_dsa(dsa_id, queues, prefix):
4612 max_queues = dsa_dir.read_int("max_work_queues")
4613 max_work_queues_size = dsa_dir.read_int("max_work_queues_size")
4614
4615- nb_queues = min(queues, max_queues)
4616- if queues > nb_queues:
4617+ nb_queues = min(args.q, max_queues)
4618+ if args.q > nb_queues:
4619 print(f"Setting number of queues to max supported value: {max_queues}")
4620
4621 # we want one engine per group, and no more engines than queues
4622@@ -83,14 +97,18 @@ def configure_dsa(dsa_id, queues, prefix):
4623
4624 # configure each queue
4625 for q in range(nb_queues):
4626+ wqcfg = {"group_id": q % nb_groups,
4627+ "type": "user",
4628+ "mode": "dedicated",
4629+ "name": f"{args.prefix}_wq{dsa_id}.{q}",
4630+ "priority": 1,
4631+ "max_batch_size": 1024,
4632+ "size": int(max_work_queues_size / nb_queues)}
4633 wq_dir = SysfsDir(os.path.join(dsa_dir.path, f"wq{dsa_id}.{q}"))
4634- wq_dir.write_values({"group_id": q % nb_groups,
4635- "type": "user",
4636- "mode": "dedicated",
4637- "name": f"{prefix}_wq{dsa_id}.{q}",
4638- "priority": 1,
4639- "max_batch_size": 1024,
4640- "size": int(max_work_queues_size / nb_queues)})
4641+ if os.path.exists(os.path.join(wq_dir.path, f"driver_name")):
4642+ wqcfg.update({"driver_name": "user"})
4643+ wqcfg.update(parse_wq_opts(args.wq_option))
4644+ wq_dir.write_values(wqcfg)
4645
4646 # enable device and then queues
4647 idxd_dir = SysfsDir(get_drv_dir("idxd"))
4648@@ -112,16 +130,22 @@ def main(args):
4649 arg_p.add_argument('--name-prefix', metavar='prefix', dest='prefix',
4650 default="dpdk",
4651 help="Prefix for workqueue name to mark for DPDK use [default: 'dpdk']")
4652+ arg_p.add_argument('--wq-option', action='append', default=[],
4653+ help="Provide additional config option for queues (format 'x=y')")
4654+ arg_p.add_argument('--verbose', '-v', action='store_true',
4655+ help="Provide addition info on tasks being performed")
4656 arg_p.add_argument('--reset', action='store_true',
4657 help="Reset DSA device and its queues")
4658 parsed_args = arg_p.parse_args(args[1:])
4659
4660 dsa_id = parsed_args.dsa_id
4661 dsa_id = get_dsa_id(dsa_id) if ':' in dsa_id else dsa_id
4662+
4663+ SysfsDir.verbose = parsed_args.verbose
4664 if parsed_args.reset:
4665 reset_device(dsa_id)
4666 else:
4667- configure_dsa(dsa_id, parsed_args.q, parsed_args.prefix)
4668+ configure_dsa(dsa_id, parsed_args)
4669
4670
4671 if __name__ == "__main__":
4672diff --git a/drivers/dma/idxd/idxd_pci.c b/drivers/dma/idxd/idxd_pci.c
4673index 2f8ec06..3dd25bf 100644
4674--- a/drivers/dma/idxd/idxd_pci.c
4675+++ b/drivers/dma/idxd/idxd_pci.c
4676@@ -292,7 +292,7 @@ init_pci_device(struct rte_pci_device *dev, struct idxd_dmadev *idxd,
4677 return nb_wqs;
4678
4679 err:
4680- free(pci);
4681+ rte_free(pci);
4682 return err_code;
4683 }
4684
4685diff --git a/drivers/event/cnxk/cnxk_eventdev.c b/drivers/event/cnxk/cnxk_eventdev.c
4686index 2d422ae..4ad16d2 100644
4687--- a/drivers/event/cnxk/cnxk_eventdev.c
4688+++ b/drivers/event/cnxk/cnxk_eventdev.c
4689@@ -202,8 +202,8 @@ cnxk_setup_event_ports(const struct rte_eventdev *event_dev,
4690 return 0;
4691 hws_fini:
4692 for (i = i - 1; i >= 0; i--) {
4693- event_dev->data->ports[i] = NULL;
4694 rte_free(cnxk_sso_hws_get_cookie(event_dev->data->ports[i]));
4695+ event_dev->data->ports[i] = NULL;
4696 }
4697 return -ENOMEM;
4698 }
4699diff --git a/drivers/event/octeontx/ssovf_evdev.c b/drivers/event/octeontx/ssovf_evdev.c
4700index 634fa8a..42240d9 100644
4701--- a/drivers/event/octeontx/ssovf_evdev.c
4702+++ b/drivers/event/octeontx/ssovf_evdev.c
4703@@ -713,10 +713,20 @@ ssovf_close(struct rte_eventdev *dev)
4704 }
4705
4706 static int
4707-ssovf_parsekv(const char *key __rte_unused, const char *value, void *opaque)
4708+ssovf_parsekv(const char *key, const char *value, void *opaque)
4709 {
4710- int *flag = opaque;
4711- *flag = !!atoi(value);
4712+ uint8_t *flag = opaque;
4713+ uint64_t v;
4714+ char *end;
4715+
4716+ errno = 0;
4717+ v = strtoul(value, &end, 0);
4718+ if ((errno != 0) || (value == end) || *end != '\0' || v > 1) {
4719+ ssovf_log_err("invalid %s value %s", key, value);
4720+ return -EINVAL;
4721+ }
4722+
4723+ *flag = !!v;
4724 return 0;
4725 }
4726
4727diff --git a/drivers/event/sw/iq_chunk.h b/drivers/event/sw/iq_chunk.h
4728index 31d013e..7820815 100644
4729--- a/drivers/event/sw/iq_chunk.h
4730+++ b/drivers/event/sw/iq_chunk.h
4731@@ -9,8 +9,6 @@
4732 #include <stdbool.h>
4733 #include <rte_eventdev.h>
4734
4735-#define IQ_ROB_NAMESIZE 12
4736-
4737 struct sw_queue_chunk {
4738 struct rte_event events[SW_EVS_PER_Q_CHUNK];
4739 struct sw_queue_chunk *next;
4740diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
4741index e43bf25..d1fd0ee 100644
4742--- a/drivers/event/sw/sw_evdev.c
4743+++ b/drivers/event/sw/sw_evdev.c
4744@@ -229,9 +229,7 @@ qid_init(struct sw_evdev *sw, unsigned int idx, int type,
4745 const struct rte_event_queue_conf *queue_conf)
4746 {
4747 unsigned int i;
4748- int dev_id = sw->data->dev_id;
4749 int socket_id = sw->data->socket_id;
4750- char buf[IQ_ROB_NAMESIZE];
4751 struct sw_qid *qid = &sw->qids[idx];
4752
4753 /* Initialize the FID structures to no pinning (-1), and zero packets */
4754@@ -261,8 +259,7 @@ qid_init(struct sw_evdev *sw, unsigned int idx, int type,
4755 goto cleanup;
4756 }
4757
4758- snprintf(buf, sizeof(buf), "sw%d_iq_%d_rob", dev_id, i);
4759- qid->reorder_buffer = rte_zmalloc_socket(buf,
4760+ qid->reorder_buffer = rte_zmalloc_socket(NULL,
4761 window_size * sizeof(qid->reorder_buffer[0]),
4762 0, socket_id);
4763 if (!qid->reorder_buffer) {
4764diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
4765index 88cdc7e..164597d 100644
4766--- a/drivers/net/af_packet/rte_eth_af_packet.c
4767+++ b/drivers/net/af_packet/rte_eth_af_packet.c
4768@@ -6,6 +6,7 @@
4769 * All rights reserved.
4770 */
4771
4772+#include <rte_common.h>
4773 #include <rte_string_fns.h>
4774 #include <rte_mbuf.h>
4775 #include <ethdev_driver.h>
4776@@ -38,7 +39,7 @@
4777 #define DFLT_FRAME_SIZE (1 << 11)
4778 #define DFLT_FRAME_COUNT (1 << 9)
4779
4780-struct pkt_rx_queue {
4781+struct __rte_cache_aligned pkt_rx_queue {
4782 int sockfd;
4783
4784 struct iovec *rd;
4785@@ -54,7 +55,7 @@ struct pkt_rx_queue {
4786 volatile unsigned long rx_bytes;
4787 };
4788
4789-struct pkt_tx_queue {
4790+struct __rte_cache_aligned pkt_tx_queue {
4791 int sockfd;
4792 unsigned int frame_data_size;
4793
4794diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
4795index d7214c2..5e2c239 100644
4796--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
4797+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
4798@@ -100,6 +100,7 @@ struct pkt_rx_queue {
4799 struct xsk_umem_info *umem;
4800 struct xsk_socket *xsk;
4801 struct rte_mempool *mb_pool;
4802+ uint16_t port;
4803
4804 struct rx_stats stats;
4805
4806@@ -270,6 +271,7 @@ af_xdp_rx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4807 unsigned long rx_bytes = 0;
4808 int i;
4809 struct rte_mbuf *fq_bufs[ETH_AF_XDP_RX_BATCH_SIZE];
4810+ struct rte_eth_dev *dev = &rte_eth_devices[rxq->port];
4811
4812 nb_pkts = xsk_ring_cons__peek(rx, nb_pkts, &idx_rx);
4813
4814@@ -297,6 +299,7 @@ af_xdp_rx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4815 * xsk_ring_cons__peek
4816 */
4817 rx->cached_cons -= nb_pkts;
4818+ dev->data->rx_mbuf_alloc_failed += nb_pkts;
4819 return 0;
4820 }
4821
4822@@ -319,6 +322,7 @@ af_xdp_rx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4823 bufs[i]->data_off = offset - sizeof(struct rte_mbuf) -
4824 rte_pktmbuf_priv_size(umem->mb_pool) -
4825 umem->mb_pool->header_size;
4826+ bufs[i]->port = rxq->port;
4827
4828 rte_pktmbuf_pkt_len(bufs[i]) = len;
4829 rte_pktmbuf_data_len(bufs[i]) = len;
4830@@ -347,6 +351,7 @@ af_xdp_rx_cp(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4831 int i;
4832 uint32_t free_thresh = fq->size >> 1;
4833 struct rte_mbuf *mbufs[ETH_AF_XDP_RX_BATCH_SIZE];
4834+ struct rte_eth_dev *dev = &rte_eth_devices[rxq->port];
4835
4836 if (xsk_prod_nb_free(fq, free_thresh) >= free_thresh)
4837 (void)reserve_fill_queue(umem, nb_pkts, NULL, fq);
4838@@ -365,6 +370,8 @@ af_xdp_rx_cp(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4839 * xsk_ring_cons__peek
4840 */
4841 rx->cached_cons -= nb_pkts;
4842+ dev->data->rx_mbuf_alloc_failed += nb_pkts;
4843+
4844 return 0;
4845 }
4846
4847@@ -385,6 +392,7 @@ af_xdp_rx_cp(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
4848 rte_pktmbuf_data_len(mbufs[i]) = len;
4849 rx_bytes += len;
4850 bufs[i] = mbufs[i];
4851+ bufs[i]->port = rxq->port;
4852 }
4853
4854 xsk_ring_cons__release(rx, nb_pkts);
4855@@ -1447,6 +1455,8 @@ eth_rx_queue_setup(struct rte_eth_dev *dev,
4856 rxq->fds[0].fd = xsk_socket__fd(rxq->xsk);
4857 rxq->fds[0].events = POLLIN;
4858
4859+ rxq->port = dev->data->port_id;
4860+
4861 dev->data->rx_queues[rx_queue_id] = rxq;
4862 return 0;
4863
4864diff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c
4865index 676e411..0914717 100644
4866--- a/drivers/net/ark/ark_ethdev_tx.c
4867+++ b/drivers/net/ark/ark_ethdev_tx.c
4868@@ -39,8 +39,8 @@ struct ark_tx_queue {
4869 uint32_t queue_mask;
4870
4871 /* 3 indexes to the paired data rings. */
4872- int32_t prod_index; /* where to put the next one */
4873- int32_t free_index; /* mbuf has been freed */
4874+ uint32_t prod_index; /* where to put the next one */
4875+ uint32_t free_index; /* mbuf has been freed */
4876
4877 /* The queue Id is used to identify the HW Q */
4878 uint16_t phys_qid;
4879@@ -49,7 +49,7 @@ struct ark_tx_queue {
4880
4881 /* next cache line - fields written by device */
4882 RTE_MARKER cacheline1 __rte_cache_min_aligned;
4883- volatile int32_t cons_index; /* hw is done, can be freed */
4884+ volatile uint32_t cons_index; /* hw is done, can be freed */
4885 } __rte_cache_aligned;
4886
4887 /* Forward declarations */
4888@@ -123,7 +123,7 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
4889 uint32_t user_meta[5];
4890
4891 int stat;
4892- int32_t prod_index_limit;
4893+ uint32_t prod_index_limit;
4894 uint16_t nb;
4895 uint8_t user_len = 0;
4896 const uint32_t min_pkt_len = ARK_MIN_TX_PKTLEN;
4897@@ -138,8 +138,13 @@ eth_ark_xmit_pkts(void *vtxq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
4898 /* leave 4 elements mpu data */
4899 prod_index_limit = queue->queue_size + queue->free_index - 4;
4900
4901+ /* Populate the buffer bringing prod_index up to or slightly beyond
4902+ * prod_index_limit. Prod_index will increment by 2 or more each
4903+ * iteration. Note: indexes are uint32_t, cast to (signed) int32_t
4904+ * to catch the slight overage case; e.g. (200 - 201)
4905+ */
4906 for (nb = 0;
4907- (nb < nb_pkts) && (prod_index_limit - queue->prod_index) > 0;
4908+ (nb < nb_pkts) && (int32_t)(prod_index_limit - queue->prod_index) > 0;
4909 ++nb) {
4910 mbuf = tx_pkts[nb];
4911
4912@@ -209,13 +214,13 @@ eth_ark_tx_jumbo(struct ark_tx_queue *queue, struct rte_mbuf *mbuf,
4913 uint32_t *user_meta, uint8_t meta_cnt)
4914 {
4915 struct rte_mbuf *next;
4916- int32_t free_queue_space;
4917+ uint32_t free_queue_space;
4918 uint8_t flags = ARK_DDM_SOP;
4919
4920 free_queue_space = queue->queue_mask -
4921 (queue->prod_index - queue->free_index);
4922 /* We need up to 4 mbufs for first header and 2 for subsequent ones */
4923- if (unlikely(free_queue_space < (2 + (2 * mbuf->nb_segs))))
4924+ if (unlikely(free_queue_space < (2U + (2U * mbuf->nb_segs))))
4925 return -1;
4926
4927 while (mbuf != NULL) {
4928@@ -424,10 +429,11 @@ free_completed_tx(struct ark_tx_queue *queue)
4929 {
4930 struct rte_mbuf *mbuf;
4931 union ark_tx_meta *meta;
4932- int32_t top_index;
4933+ uint32_t top_index;
4934
4935 top_index = queue->cons_index; /* read once */
4936- while ((top_index - queue->free_index) > 0) {
4937+
4938+ while ((int32_t)(top_index - queue->free_index) > 0) {
4939 meta = &queue->meta_q[queue->free_index & queue->queue_mask];
4940 if (likely((meta->flags & ARK_DDM_SOP) != 0)) {
4941 mbuf = queue->bufs[queue->free_index &
4942diff --git a/drivers/net/axgbe/axgbe_common.h b/drivers/net/axgbe/axgbe_common.h
4943index df0aa21..9618d7e 100644
4944--- a/drivers/net/axgbe/axgbe_common.h
4945+++ b/drivers/net/axgbe/axgbe_common.h
4946@@ -407,8 +407,6 @@
4947 #define MAC_MDIOSCAR_PA_WIDTH 5
4948 #define MAC_MDIOSCAR_RA_INDEX 0
4949 #define MAC_MDIOSCAR_RA_WIDTH 16
4950-#define MAC_MDIOSCAR_REG_INDEX 0
4951-#define MAC_MDIOSCAR_REG_WIDTH 21
4952 #define MAC_MDIOSCCDR_BUSY_INDEX 22
4953 #define MAC_MDIOSCCDR_BUSY_WIDTH 1
4954 #define MAC_MDIOSCCDR_CMD_INDEX 16
4955diff --git a/drivers/net/axgbe/axgbe_dev.c b/drivers/net/axgbe/axgbe_dev.c
4956index 6a7fddf..5233633 100644
4957--- a/drivers/net/axgbe/axgbe_dev.c
4958+++ b/drivers/net/axgbe/axgbe_dev.c
4959@@ -63,15 +63,27 @@ static int mdio_complete(struct axgbe_port *pdata)
4960 return 0;
4961 }
4962
4963+static unsigned int axgbe_create_mdio_sca(int port, int reg)
4964+{
4965+ unsigned int mdio_sca, da;
4966+
4967+ da = (reg & MII_ADDR_C45) ? reg >> 16 : 0;
4968+
4969+ mdio_sca = 0;
4970+ AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, RA, reg);
4971+ AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, PA, port);
4972+ AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, da);
4973+
4974+ return mdio_sca;
4975+}
4976+
4977 static int axgbe_write_ext_mii_regs(struct axgbe_port *pdata, int addr,
4978 int reg, u16 val)
4979 {
4980 unsigned int mdio_sca, mdio_sccd;
4981 uint64_t timeout;
4982
4983- mdio_sca = 0;
4984- AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg);
4985- AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr);
4986+ mdio_sca = axgbe_create_mdio_sca(addr, reg);
4987 AXGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca);
4988
4989 mdio_sccd = 0;
4990@@ -97,9 +109,7 @@ static int axgbe_read_ext_mii_regs(struct axgbe_port *pdata, int addr,
4991 unsigned int mdio_sca, mdio_sccd;
4992 uint64_t timeout;
4993
4994- mdio_sca = 0;
4995- AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg);
4996- AXGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr);
4997+ mdio_sca = axgbe_create_mdio_sca(addr, reg);
4998 AXGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca);
4999
5000 mdio_sccd = 0;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches