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

Proposed by Arif Ali
Status: Needs review
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
Ubuntu Sponsors sru Pending
git-ubuntu import Pending
Review via email: mp+485499@code.launchpad.net
To post a comment you must log in.

Unmerged commits

7405bf9... by Arif Ali

Update changelog for 21.11.9-0ubuntu0.22.04.1

e4aae45... by Arif Ali

Import 21.11.9 from upstream

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