Version in base suite: 22.11.7-1~deb12u1 Base version: dpdk_22.11.7-1~deb12u1 Target version: dpdk_22.11.8-1~deb12u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/d/dpdk/dpdk_22.11.7-1~deb12u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/d/dpdk/dpdk_22.11.8-1~deb12u1.dsc .github/workflows/build.yml | 2 .mailmap | 17 VERSION | 2 app/test-bbdev/test_vectors/fft_9.data | 870 ---------------------------- app/test-bbdev/test_vectors/fft_byp_28.data | 48 - app/test-pmd/cmdline.c | 55 + app/test-pmd/cmdline_flow.c | 31 app/test-pmd/config.c | 4 app/test/test_bpf.c | 2 app/test/test_cryptodev.c | 29 app/test/test_cryptodev.h | 1 app/test/test_cryptodev_aes_test_vectors.h | 6 app/test/test_dmadev_api.c | 16 app/test/test_event_eth_rx_adapter.c | 2 app/test/test_link_bonding.c | 75 +- app/test/test_pcapng.c | 2 app/test/test_ring_stress_impl.h | 2 buildtools/get-numa-count.py | 2 config/meson.build | 13 debian/changelog | 7 devtools/check-meson.py | 2 doc/guides/nics/e1000em.rst | 5 doc/guides/nics/features.rst | 1 doc/guides/nics/features/gve.ini | 1 doc/guides/nics/features/mana.ini | 1 doc/guides/nics/features/netvsc.ini | 1 doc/guides/nics/features/virtio.ini | 1 doc/guides/nics/features/vmxnet3.ini | 1 doc/guides/nics/igb.rst | 12 doc/guides/nics/igc.rst | 5 doc/guides/nics/ionic.rst | 16 doc/guides/nics/ixgbe.rst | 22 doc/guides/prog_guide/rte_flow.rst | 2 doc/guides/rel_notes/release_22_11.rst | 226 +++++++ drivers/bus/pci/pci_common.c | 14 drivers/common/cnxk/cnxk_security.c | 2 drivers/common/cnxk/roc_bphy_cgx.c | 12 drivers/common/cnxk/roc_dpi_priv.h | 2 drivers/common/cnxk/roc_npa.h | 2 drivers/crypto/cnxk/cnxk_se.h | 2 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 8 drivers/crypto/dpaa_sec/dpaa_sec.c | 7 drivers/crypto/openssl/rte_openssl_pmd.c | 13 drivers/crypto/virtio/virtio_cryptodev.c | 14 drivers/crypto/virtio/virtio_rxtx.c | 3 drivers/event/dpaa/dpaa_eventdev.c | 10 drivers/net/af_packet/rte_eth_af_packet.c | 30 drivers/net/bnxt/bnxt_ethdev.c | 22 drivers/net/bnxt/tf_core/tf_sram_mgr.c | 4 drivers/net/bonding/rte_eth_bond_8023ad.h | 3 drivers/net/bonding/rte_eth_bond_pmd.c | 24 drivers/net/cnxk/cn10k_tx.h | 7 drivers/net/cnxk/cn9k_tx.h | 7 drivers/net/cxgbe/cxgbe_flow.c | 14 drivers/net/dpaa/dpaa_rxtx.c | 7 drivers/net/dpaa2/dpaa2_flow.c | 14 drivers/net/dpaa2/dpaa2_rxtx.c | 6 drivers/net/e1000/base/e1000_80003es2lan.c | 2 drivers/net/e1000/base/e1000_82575.c | 5 drivers/net/e1000/base/e1000_base.c | 3 drivers/net/e1000/base/e1000_defines.h | 1 drivers/net/e1000/base/e1000_ich8lan.c | 2 drivers/net/e1000/base/e1000_mac.c | 12 drivers/net/e1000/base/e1000_nvm.c | 4 drivers/net/e1000/base/e1000_phy.c | 25 drivers/net/e1000/base/e1000_vf.c | 12 drivers/net/e1000/em_ethdev.c | 80 ++ drivers/net/e1000/igb_ethdev.c | 176 +++++ drivers/net/enetfec/enet_ethdev.c | 1 drivers/net/hinic/hinic_pmd_flow.c | 14 drivers/net/hns3/hns3_cmd.c | 18 drivers/net/hns3/hns3_cmd.h | 4 drivers/net/hns3/hns3_dump.c | 4 drivers/net/hns3/hns3_ethdev.c | 29 drivers/net/hns3/hns3_intr.c | 4 drivers/net/hns3/hns3_intr.h | 2 drivers/net/hns3/hns3_rxtx.c | 2 drivers/net/i40e/i40e_fdir.c | 10 drivers/net/i40e/i40e_rxtx_vec_avx2.c | 2 drivers/net/i40e/i40e_rxtx_vec_avx512.c | 6 drivers/net/i40e/meson.build | 3 drivers/net/iavf/iavf_ethdev.c | 15 drivers/net/iavf/iavf_rxtx.c | 6 drivers/net/iavf/iavf_rxtx.h | 2 drivers/net/iavf/iavf_rxtx_vec_avx2.c | 2 drivers/net/iavf/iavf_rxtx_vec_neon.c | 8 drivers/net/ice/ice_ethdev.c | 4 drivers/net/ice/ice_rxtx.c | 10 drivers/net/ice/ice_rxtx_vec_avx2.c | 2 drivers/net/idpf/idpf_rxtx_vec_avx512.c | 6 drivers/net/igc/base/igc_defines.h | 1 drivers/net/igc/base/igc_i225.c | 24 drivers/net/igc/base/igc_mac.c | 10 drivers/net/igc/base/igc_nvm.c | 4 drivers/net/igc/base/igc_phy.c | 8 drivers/net/igc/igc_ethdev.c | 81 ++ drivers/net/ixgbe/ixgbe_ethdev.c | 242 +++++++ drivers/net/ixgbe/ixgbe_rxtx.h | 2 drivers/net/mana/mana.c | 100 +-- drivers/net/mana/mana.h | 6 drivers/net/mana/mp.c | 2 drivers/net/mlx4/mlx4_flow.c | 6 drivers/net/mlx5/hws/mlx5dr_definer.c | 26 drivers/net/mlx5/hws/mlx5dr_definer.h | 18 drivers/net/mlx5/linux/mlx5_os.c | 5 drivers/net/mlx5/mlx5_flow.c | 19 drivers/net/mlx5/mlx5_flow.h | 2 drivers/net/mlx5/mlx5_flow_dv.c | 63 +- drivers/net/mlx5/mlx5_flow_hw.c | 100 +-- drivers/net/mlx5/mlx5_hws_cnt.c | 5 drivers/net/mlx5/mlx5_rxtx.c | 80 ++ drivers/net/mlx5/mlx5_rxtx_vec.c | 3 drivers/net/mlx5/mlx5_trigger.c | 24 drivers/net/netvsc/hn_ethdev.c | 29 drivers/net/netvsc/hn_vf.c | 13 drivers/net/nfp/nfp_flow.c | 14 drivers/net/qede/base/ecore_dcbx.c | 8 drivers/net/qede/qede_debug.c | 5 drivers/net/sfc/sfc_repr.c | 4 drivers/net/tap/tap_flow.c | 30 drivers/net/thunderx/base/nicvf_mbox.c | 42 - drivers/net/txgbe/base/txgbe_phy.c | 8 drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c | 24 examples/ipsec-secgw/event_helper.c | 2 examples/ipsec-secgw/sa.c | 4 examples/l3fwd-power/main.c | 4 examples/l3fwd/main.c | 5 examples/ptpclient/ptpclient.c | 2 lib/eal/common/eal_common_devargs.c | 2 lib/eal/common/eal_common_lcore.c | 17 lib/eal/linux/eal_dev.c | 3 lib/eal/linux/eal_memory.c | 1 lib/eal/x86/include/rte_vect.h | 4 lib/ethdev/rte_ethdev.c | 14 lib/ethdev/rte_ethdev.h | 8 lib/ethdev/rte_flow.h | 44 - lib/mempool/rte_mempool.c | 4 lib/pdump/rte_pdump.c | 3 lib/stack/rte_stack_lf_c11.h | 2 lib/vhost/vhost.c | 5 lib/vhost/vhost_user.c | 4 lib/vhost/virtio_net.c | 13 142 files changed, 1812 insertions(+), 1522 deletions(-) Unrecognised file line in .dsc: -----BEGIN PGP SIGNATURE----- diff -Nru dpdk-22.11.7/.github/workflows/build.yml dpdk-22.11.8/.github/workflows/build.yml --- dpdk-22.11.7/.github/workflows/build.yml 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/.github/workflows/build.yml 2025-04-08 19:02:56.000000000 +0000 @@ -25,7 +25,7 @@ MINGW: ${{ matrix.config.cross == 'mingw' }} MINI: ${{ matrix.config.mini != '' }} PPC64LE: ${{ matrix.config.cross == 'ppc64le' }} - REF_GIT_REPO: https://dpdk.org/git/dpdk-stable + REF_GIT_REPO: https://github.com/DPDK/dpdk-stable REF_GIT_TAG: v22.11.1 RISCV64: ${{ matrix.config.cross == 'riscv64' }} RUN_TESTS: ${{ contains(matrix.config.checks, 'tests') }} diff -Nru dpdk-22.11.7/.mailmap dpdk-22.11.8/.mailmap --- dpdk-22.11.7/.mailmap 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/.mailmap 2025-04-08 19:02:56.000000000 +0000 @@ -75,6 +75,7 @@ Amine Kherbouche Amin Tootoonchian Ami Sabo +Amir Avivi Amit Bernstein Amit Gupta Amit Prakash Shukla @@ -200,6 +201,7 @@ Chandubabu Namburu Changchun Ouyang Changpeng Liu +Changqi Dingluo Changqing Wu Chaoyong He Chao Zhu @@ -322,6 +324,7 @@ Diana Wang Didier Pallard Dilshod Urazov +Dima Ruinskiy Ding Zhi Diogo Behrens Dirk-Holger Lenz @@ -424,7 +427,8 @@ Gary Mussar Gaurav Singh Gautam Dawar -Gavin Hu +Gavin Hu +Gavin Li Geoffrey Le Gourriérec Geoffrey Lv Geoff Thorpe @@ -560,6 +564,7 @@ Jacek Piasecki Jacek Siuda Jacob Keller +Jakub Buchocki Jakub Chylkowski Jakub Grajciar Jakub Neruda @@ -613,6 +618,7 @@ Jianbo Liu Jianfeng Tan Jiangu Zhao +Jianping Zhao Jianwei Ma Jianwei Mei Jiaqi Min @@ -686,7 +692,7 @@ Julien Massonneau Julien Meunier Július Milan -Junfeng Guo +Junfeng Guo Junjie Chen Junjie Wan Jun Qiu @@ -941,6 +947,7 @@ Mike Ximing Chen Milena Olech Min Cao +Minggang Li (Gavin) Minghuan Lian Mingjin Ye Mingshan Zhang @@ -983,6 +990,7 @@ Natanael Copa Nathan Law Nathan Skrzypczak +Nawal Kishor Neel Patel Neil Horman Nelio Laranjeiro @@ -1011,6 +1019,7 @@ Nir Efrati Nirmoy Das Nithin Dabilpuram +Nithinsen Kaithakadan Nitin Saxena Nitzan Weller Noa Ezra @@ -1084,6 +1093,7 @@ Phanendra Vukkisala Phil Yang Philip Prindeville +Pier Damouny Pierre Pfister Piotr Azarewicz Piotr Bartosiewicz @@ -1132,6 +1142,7 @@ Rahul Lakkireddy Rahul Shah Raja Zidane +Rajesh Mudimadugula Rajesh Ravi Rakesh Kudurumalla Ralf Hoffmann @@ -1250,6 +1261,7 @@ Shally Verma Shannon Nelson Shannon Zhao +Shaokai Zhang Shaopeng He Shaowei Sun <1819846787@qq.com> Sharmila Podury @@ -1553,6 +1565,7 @@ Yajun Wu Yangchao Zhou Yanglong Wu +Yang Ming Yang Zhang Yanjie Xu Yan Xia diff -Nru dpdk-22.11.7/VERSION dpdk-22.11.8/VERSION --- dpdk-22.11.7/VERSION 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/VERSION 2025-04-08 19:02:56.000000000 +0000 @@ -1 +1 @@ -22.11.7 +22.11.8 diff -Nru dpdk-22.11.7/app/test/test_bpf.c dpdk-22.11.8/app/test/test_bpf.c --- dpdk-22.11.7/app/test/test_bpf.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_bpf.c 2025-04-08 19:02:56.000000000 +0000 @@ -3347,7 +3347,7 @@ hdr = rte_pktmbuf_mtod(m, typeof(hdr)); hdr->eth_hdr = (struct rte_ether_hdr) { - .dst_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4), }; hdr->ip_hdr = (struct rte_ipv4_hdr) { diff -Nru dpdk-22.11.7/app/test/test_cryptodev.c dpdk-22.11.8/app/test/test_cryptodev.c --- dpdk-22.11.7/app/test/test_cryptodev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_cryptodev.c 2025-04-08 19:02:56.000000000 +0000 @@ -11453,8 +11453,9 @@ struct crypto_testsuite_params *ts_params = &testsuite_params; struct crypto_unittest_params *ut_params = &unittest_params; + uint32_t i; int retval; - uint8_t *ciphertext, *auth_tag; + uint8_t *ciphertext, *auth_tag, *buffer_oop; uint16_t plaintext_pad_len; struct rte_cryptodev_info dev_info; @@ -11526,6 +11527,18 @@ debug_hexdump(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len); debug_hexdump(stdout, "auth tag:", auth_tag, tdata->auth_tag.len); + /* Check if the data within the offset range is not overwritten in the OOP */ + buffer_oop = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); + for (i = 0; i < ut_params->op->sym->cipher.data.offset; i++) { + if (buffer_oop[i]) { + RTE_LOG(ERR, USER1, + "Incorrect value of the output buffer header\n"); + debug_hexdump(stdout, "Incorrect value:", buffer_oop, + ut_params->op->sym->cipher.data.offset); + return TEST_FAILED; + } + } + /* Validate obuf */ TEST_ASSERT_BUFFERS_ARE_EQUAL( ciphertext, @@ -11555,8 +11568,9 @@ struct crypto_testsuite_params *ts_params = &testsuite_params; struct crypto_unittest_params *ut_params = &unittest_params; + uint32_t i; int retval; - uint8_t *plaintext; + uint8_t *plaintext, *buffer_oop; struct rte_cryptodev_info dev_info; rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info); @@ -11626,6 +11640,17 @@ debug_hexdump(stdout, "plaintext:", plaintext, tdata->ciphertext.len); + /* Check if the data within the offset range is not overwritten in the OOP */ + buffer_oop = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *); + for (i = 0; i < ut_params->op->sym->cipher.data.offset; i++) { + if (buffer_oop[i]) { + RTE_LOG(ERR, USER1, + "Incorrect value of the output buffer header\n"); + debug_hexdump(stdout, "Incorrect value:", buffer_oop, + ut_params->op->sym->cipher.data.offset); + return TEST_FAILED; + } + } /* Validate obuf */ TEST_ASSERT_BUFFERS_ARE_EQUAL( plaintext, diff -Nru dpdk-22.11.7/app/test/test_cryptodev.h dpdk-22.11.8/app/test/test_cryptodev.h --- dpdk-22.11.7/app/test/test_cryptodev.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_cryptodev.h 2025-04-08 19:02:56.000000000 +0000 @@ -90,7 +90,6 @@ struct rte_mempool *large_mbuf_pool; struct rte_mempool *op_mpool; struct rte_mempool *session_mpool; - struct rte_mempool *session_priv_mpool; struct rte_cryptodev_config conf; struct rte_cryptodev_qp_conf qp_conf; diff -Nru dpdk-22.11.7/app/test/test_cryptodev_aes_test_vectors.h dpdk-22.11.8/app/test/test_cryptodev_aes_test_vectors.h --- dpdk-22.11.7/app/test/test_cryptodev_aes_test_vectors.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_cryptodev_aes_test_vectors.h 2025-04-08 19:02:56.000000000 +0000 @@ -833,11 +833,11 @@ }, .plaintext = { .data = plaintext_aes192ecb_192bytes, - .len = 64 + .len = 192 }, .ciphertext = { .data = ciphertext_aes192ecb_192bytes, - .len = 64 + .len = 192 } }; @@ -5145,7 +5145,7 @@ .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT, }, { - .test_descr = "AES-256-ECB Decryption (192-byte plaintext)", + .test_descr = "AES-256-ECB Decryption (256-byte plaintext)", .test_data = &aes_test_data_20, .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT, }, diff -Nru dpdk-22.11.7/app/test/test_dmadev_api.c dpdk-22.11.8/app/test/test_dmadev_api.c --- dpdk-22.11.7/app/test/test_dmadev_api.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_dmadev_api.c 2025-04-08 19:02:56.000000000 +0000 @@ -441,7 +441,9 @@ setup_memory(); /* Check enqueue without submit */ - ret = rte_dma_copy(test_dev_id, 0, (rte_iova_t)src, (rte_iova_t)dst, + ret = rte_dma_copy(test_dev_id, 0, + rte_malloc_virt2iova(src), + rte_malloc_virt2iova(dst), TEST_MEMCPY_SIZE, 0); RTE_TEST_ASSERT_EQUAL(ret, 0, "Failed to enqueue copy, %d", ret); rte_delay_us_sleep(TEST_WAIT_US_VAL); @@ -463,7 +465,9 @@ setup_memory(); /* Check for enqueue with submit */ - ret = rte_dma_copy(test_dev_id, 0, (rte_iova_t)src, (rte_iova_t)dst, + ret = rte_dma_copy(test_dev_id, 0, + rte_malloc_virt2iova(src), + rte_malloc_virt2iova(dst), TEST_MEMCPY_SIZE, RTE_DMA_OP_FLAG_SUBMIT); RTE_TEST_ASSERT_EQUAL(ret, 1, "Failed to enqueue copy, %d", ret); rte_delay_us_sleep(TEST_WAIT_US_VAL); @@ -498,7 +502,9 @@ RTE_TEST_ASSERT_SUCCESS(ret, "Failed to start, %d", ret); /* Check for enqueue with submit */ - ret = rte_dma_copy(test_dev_id, 0, (rte_iova_t)src, (rte_iova_t)dst, + ret = rte_dma_copy(test_dev_id, 0, + rte_malloc_virt2iova(src), + rte_malloc_virt2iova(dst), TEST_MEMCPY_SIZE, RTE_DMA_OP_FLAG_SUBMIT); RTE_TEST_ASSERT_EQUAL(ret, 0, "Failed to enqueue copy, %d", ret); rte_delay_us_sleep(TEST_WAIT_US_VAL); @@ -517,7 +523,9 @@ RTE_TEST_ASSERT_EQUAL(cpl_ret, 0, "Failed to completed status"); /* Check for enqueue with submit again */ - ret = rte_dma_copy(test_dev_id, 0, (rte_iova_t)src, (rte_iova_t)dst, + ret = rte_dma_copy(test_dev_id, 0, + rte_malloc_virt2iova(src), + rte_malloc_virt2iova(dst), TEST_MEMCPY_SIZE, RTE_DMA_OP_FLAG_SUBMIT); RTE_TEST_ASSERT_EQUAL(ret, 1, "Failed to enqueue copy, %d", ret); rte_delay_us_sleep(TEST_WAIT_US_VAL); diff -Nru dpdk-22.11.7/app/test/test_event_eth_rx_adapter.c dpdk-22.11.8/app/test/test_event_eth_rx_adapter.c --- dpdk-22.11.7/app/test/test_event_eth_rx_adapter.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_event_eth_rx_adapter.c 2025-04-08 19:02:56.000000000 +0000 @@ -230,7 +230,6 @@ } struct rte_event_dev_config config = { - .nb_event_queues = 1, .nb_event_ports = 1, }; @@ -242,6 +241,7 @@ dev_info.max_event_port_enqueue_depth; config.nb_events_limit = dev_info.max_num_events; + config.nb_event_queues = dev_info.max_event_queues; err = rte_event_dev_configure(TEST_DEV_ID, &config); TEST_ASSERT(err == 0, "Event device initialization failed err %d\n", err); diff -Nru dpdk-22.11.7/app/test/test_link_bonding.c dpdk-22.11.8/app/test/test_link_bonding.c --- dpdk-22.11.7/app/test/test_link_bonding.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_link_bonding.c 2025-04-08 19:02:56.000000000 +0000 @@ -2226,51 +2226,48 @@ virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i], &gen_pkt_burst[0], burst_size); - /* Call rx burst on bonded device */ - TEST_ASSERT_EQUAL(rte_eth_rx_burst(test_params->bonded_port_id, 0, - &rx_pkt_burst[0], MAX_PKT_BURST), burst_size, - "rte_eth_rx_burst failed"); - - if (test_params->slave_port_ids[i] == primary_port) { - /* Verify bonded device rx count */ - rte_eth_stats_get(test_params->bonded_port_id, &port_stats); - TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size, - "Bonded Port (%d) ipackets value (%u) not as expected (%d)", + /* Expect burst if this was the active port, zero otherwise */ + unsigned int rx_expect + = (test_params->slave_port_ids[i] == primary_port) ? burst_size : 0; + + /* Call rx burst on bonding device */ + unsigned int rx_count = rte_eth_rx_burst(test_params->bonded_port_id, 0, + &rx_pkt_burst[0], MAX_PKT_BURST); + TEST_ASSERT_EQUAL(rx_count, rx_expect, + "rte_eth_rx_burst (%u) not as expected (%u)", + rx_count, rx_expect); + + /* Verify bonding device rx count */ + rte_eth_stats_get(test_params->bonded_port_id, &port_stats); + TEST_ASSERT_EQUAL(port_stats.ipackets, rx_expect, + "Bonding Port (%d) ipackets value (%u) not as expected (%u)", test_params->bonded_port_id, - (unsigned int)port_stats.ipackets, burst_size); + (unsigned int)port_stats.ipackets, rx_expect); - /* Verify bonded slave devices rx count */ - for (j = 0; j < test_params->bonded_slave_count; j++) { - rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats); - if (i == j) { - TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size, - "Slave Port (%d) ipackets value (%u) not as " - "expected (%d)", test_params->slave_port_ids[i], - (unsigned int)port_stats.ipackets, burst_size); - } else { - TEST_ASSERT_EQUAL(port_stats.ipackets, 0, - "Slave Port (%d) ipackets value (%u) not as " - "expected (%d)\n", test_params->slave_port_ids[i], - (unsigned int)port_stats.ipackets, 0); - } - } - } else { - for (j = 0; j < test_params->bonded_slave_count; j++) { - rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats); + for (j = 0; j < test_params->bonded_slave_count; j++) { + rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats); + if (i == j) { + TEST_ASSERT_EQUAL(port_stats.ipackets, rx_expect, + "Member Port (%d) ipackets (%u) not as expected (%d)", + test_params->slave_port_ids[i], + (unsigned int)port_stats.ipackets, rx_expect); + + /* reset member device stats */ + rte_eth_stats_reset(test_params->slave_port_ids[j]); + } else { TEST_ASSERT_EQUAL(port_stats.ipackets, 0, - "Slave Port (%d) ipackets value (%u) not as expected " - "(%d)", test_params->slave_port_ids[i], - (unsigned int)port_stats.ipackets, 0); + "Member Port (%d) ipackets (%u) not as expected (%d)", + test_params->slave_port_ids[i], + (unsigned int)port_stats.ipackets, 0); } } - /* free mbufs */ - for (i = 0; i < MAX_PKT_BURST; i++) { - if (rx_pkt_burst[i] != NULL) { - rte_pktmbuf_free(rx_pkt_burst[i]); - rx_pkt_burst[i] = NULL; - } - } + /* extract packets queued to inactive member */ + if (rx_count == 0) + rx_count = rte_eth_rx_burst(test_params->slave_port_ids[i], 0, + rx_pkt_burst, MAX_PKT_BURST); + if (rx_count > 0) + rte_pktmbuf_free_bulk(rx_pkt_burst, rx_count); /* reset bonded device stats */ rte_eth_stats_reset(test_params->bonded_port_id); diff -Nru dpdk-22.11.7/app/test/test_pcapng.c dpdk-22.11.8/app/test/test_pcapng.c --- dpdk-22.11.7/app/test/test_pcapng.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_pcapng.c 2025-04-08 19:02:56.000000000 +0000 @@ -63,7 +63,7 @@ struct rte_ipv4_hdr ip; } pkt = { .eth = { - .dst_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .ether_type = rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4), }, .ip = { diff -Nru dpdk-22.11.7/app/test/test_ring_stress_impl.h dpdk-22.11.8/app/test/test_ring_stress_impl.h --- dpdk-22.11.7/app/test/test_ring_stress_impl.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test/test_ring_stress_impl.h 2025-04-08 19:02:56.000000000 +0000 @@ -295,7 +295,7 @@ *data = elm; /* alloc ring */ - nr = 2 * num; + nr = rte_align32pow2(2 * num); sz = rte_ring_get_memsize(nr); r = rte_zmalloc(NULL, sz, __alignof__(*r)); if (r == NULL) { diff -Nru dpdk-22.11.7/app/test-bbdev/test_vectors/fft_9.data dpdk-22.11.8/app/test-bbdev/test_vectors/fft_9.data --- dpdk-22.11.7/app/test-bbdev/test_vectors/fft_9.data 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test-bbdev/test_vectors/fft_9.data 1970-01-01 00:00:00.000000000 +0000 @@ -1,870 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause -# Copyright(c) 2021 Intel Corporation -op_type = -RTE_BBDEV_OP_FFT - -input0 = -0xF62CFB88, 0xF17CFB18, 0xF6C0FA9F, 0xF773F742, 0xFCCBFAF0, 0xF908F8A6, 0xFFB3F496, 0x04C1FAC6, -0x07C5019B, 0x017D0139, 0x00F60299, 0x06ABFF06, 0x04E003A0, 0xFF740CAA, 0xF96F1004, 0xF5330D1C, -0xF5520BB9, 0xF327062F, 0xF0BF067D, 0xF29D036F, 0xEF50FFDF, 0xF1D6FE10, 0xEB1AFC5B, 0xEEAFF8ED, -0xEF6AF3FA, 0xEE50F275, 0xF325F63D, 0xF5D0EF1B, 0xF515F101, 0xFB83F18E, 0xF8DEEE63, 0xFA9DF473, -0xFB24ED8F, 0xFFBDEEDD, 0xFBF7F5FD, 0xFC56F8D8, 0x024BF447, 0x0538F24F, 0xFD20F8FB, 0xFBA9F239, -0xFB76F52A, 0xF9E8EE9A, 0xFE68F339, 0xFC76F468, 0xF9D3F4F8, 0xFAECE946, 0x063DEC57, 0x0B23EEAD, -0x094EECCE, 0x0C99EBB7, 0x11F0F617, 0x0CF2F4A6, 0x1319F6AA, 0x0D35FCA7, 0x11D4F94A, 0x14AFFA25, -0x11ACFFDF, 0x0FA302EA, 0x1275FEDB, 0x100F0703, 0x09E906BE, 0x04BD066D, 0x0A2508A8, 0x03B206B6, -0x056605D9, 0xFD1606AB, 0xFC8EFED8, 0x015102AD, 0x01BA0079, 0x012FFF86, 0xFB7EF61F, 0x06F9FC05, -0x05D0FF12, 0x0241FCBF, 0x05E6FDDE, 0x0654FDCC, 0x0788FBC7, 0x0783FBB1, 0x087EFAFA, 0x07D80833, -0x01CB05B9, 0x047A03C9, 0x082C070F, 0x017401A3, 0x0A3F0185, 0x02A90167, 0x0353FE02, 0x0566FFDF, -0x074E0487, 0x075CFC6D, 0x07470020, 0x0ACC019F, 0x0B85074E, 0x11EF03C3, 0x0E2D0508, 0x0B5E04CA, -0x0BB8088A, 0x0E85091F, 0x0B601078, 0x0CAE0DFA, 0x0F0E1394, 0x03A51A51, 0x033D1B87, 0xFEEB1855, -0xFDAC15F8, 0xF8AA17FD, 0xF0AC1377, 0xF15014C7, 0xF2850DF0, 0xF2AD0EB2, 0xF1500B90, 0xEC8305FB, -0xF4BC061B, 0xF11D033D, 0xF4BB087D, 0xF1EEFFD8, 0xF4BCFF91, 0xFCFF0393, 0xF31A04FC, 0xF6840257, -0xF7ECFE51, 0xF919FC35, 0xF5E3FCC3, 0xF5C60450, 0xF4A401C9, 0xF40CFD64, 0xF42B001D, 0xF4D30090, -0xF135F8EB, 0xF832F985, 0xF30EFAF2, 0xF50FF9E5, 0xF791F5BF, 0xFA0FF9A8, 0xF862F834, 0xF996F8AB, -0xFD1BF578, 0xFD28F73F, 0x0249FB2B, 0xFC90FE71, 0x0256014E, 0x0126FD72, 0x010802F3, 0x00A700E2, -0xFD4B046E, 0xFB3506FD, 0x015CFFFB, 0xFB9B081A, 0xF8A80A3A, 0xF6F20360, 0xF58C0218, 0xF88DF9DB, -0xF560FFDC, 0xF2010176, 0xEC58FCB9, 0xECF2F791, 0xEE47F641, 0xEE25F73B, 0xF700F8FA, 0xF15CF0E4, -0xF459EE9C, 0xF80DF177, 0xFA14F139, 0xFAF8EFD5, 0xF9BFEF89, 0xFCE8F0FD, 0xFBE1F0B8, 0x027CF069, -0xFCF5F137, 0x00D4F1CC, 0x0286EB70, 0x07F4EA47, 0x05BDF0B0, 0x056DEF6A, 0x05A5F263, 0x0E2AEC8B, -0x12A4F393, 0x0B71ED91, 0x107EF77D, 0x0D58F5C0, 0x11B1F636, 0x1198FB57, 0x1280FD41, 0x1452FB53, -0x0ED505D3, 0x0C0E0460, 0x0F7603BF, 0x11BB0840, 0x0FC30688, 0x08350A31, 0x06E505E3, 0x05140870, -0x09A60E87, 0x03910CEF, 0xFD560A8E, 0xFDB50C43, 0x02630357, 0xFE7B0924, 0xF91E0652, 0xFD94FFE2, -0xFFD7FD51, 0x01AA02E1, 0xFB8103A0, 0xFD23FB37, 0x05DCFBE3, 0x021500C0, 0x0408FDAE, 0x01720146, -0x0518FC2D, 0x04F9FE57, 0x0EA7FBCD, 0x0462FBA7, 0x0825F9B6, 0x0E47FECE, 0x0F020108, 0x0B39005E, -0x096701C1, 0x0B11027B, 0x0B270492, 0x08C20939, 0x070E09D8, 0x0B3B05CB, 0x0BDF099F, 0x07DC0B11, -0x08790B54, 0x02D50B5A, 0x06360F48, 0x08B610AB, 0x02611070, 0x01CF1436, 0x013D0C5C, 0xFB341474, -0x00E70F6D, 0xFBD414C2, 0xF7301127, 0xF83912C1, 0xF85E0B23, 0xF5D60B8A, 0xF4B60E18, 0xF51F0F86, -0xF2C30AFF, 0xFA9A0953, 0xF42F0797, 0xEFDA0D45, 0xF3370866, 0xF4A70203, 0xEF7206CE, 0xF66B0471, -0xF4B200E2, 0xF346FDF8, 0xF55BFEE1, 0xF1C6FC0D, 0xF89A018A, 0xF824FFFD, 0xF820FD32, 0xF129019D, -0xF356FF5E, 0xF7B70043, 0xF4490050, 0xF373F9BC, 0xF672FEA7, 0xF655F6EF, 0xF85EF696, 0xFCFDFAE0, -0xF80CF769, 0xFC94F3B6, 0xFB72FAEA, 0xFD45F600, 0x0376F540, 0xFC84FBBF, 0xFEA8FF8B, 0xFC17FE78, -0x0228FFC6, 0x004C0143, 0xF6740170, 0xFA6E0265, 0xFD5AFEE3, 0xFAF90113, 0xF7EA02FF, 0xF71B050A, -0xF1920113, 0xF446FC35, 0xF4470038, 0xF257FFAF, 0xF157F7D4, 0xF886FDBA, 0xF440F432, 0xF6F6F387, -0xF6F6F316, 0xF8ECF681, 0xFDDFF4BE, 0xFA82F870, 0x02C3F6D8, 0x00B5ED53, 0xFF54F5B6, 0x007AF986, -0x01A7F540, 0x00B4F5BD, 0xFE30F669, 0xFBDBFA3D, 0xFC22F23B, 0xFDEAF123, 0x044BF0EC, 0x069CF57D, -0x074FF59B, 0x04F1F354, 0x02E9F0E0, 0x0A52F558, 0x1029F647, 0x0A2AFC4F, 0x0AAFF38F, 0x0D9EF7C8, -0x167EF8FD, 0x0C42FE65, 0x0EA7F8FD, 0x124EFCF7, 0x14ABFEBB, 0x09800444, 0x07990B81, 0x0605057D, -0x056900B9, 0x072607E4, 0x06580651, 0x030103D7, 0x02A203AC, 0x01240323, 0xFE5DFD2E, 0xFD10FF1B, -0xFF9EFCFC, 0x0402F8C1, 0x01AAF84A, 0x044DFB7B, 0x07EEF58B, 0x061AFD52, 0x0596FC0F, 0x05ECFADA, -0x0A9A0143, 0x0D840441, 0x0998033D, 0x0D66059E, 0x0D2A0019, 0x0FDA0629, 0x09A50394, 0x080F054E, -0x06580A16, 0x070408EB, 0x05BC0555, 0x09170CB0, 0x03200D3E, 0x051F09A3, 0x05420466, 0x045F0106, -0x01A108B3, 0x069C0AF4, 0xFF7108B4, 0x03020862, 0x06BD0D9D, 0x05721289, 0xFE6D1340, 0xFD920936, -0xFECC0F9C, 0xFF9A1319, 0xFEE60C67, 0xFD3C0C12, 0xFA670B18, 0xFF0E0A37, 0xF8E90F0C, 0xFA950A82, -0xF87C07AC, 0xF4100C46, 0xF60A0CF8, 0xF33E05C3, 0xF3D0FFF1, 0xF2DA074A, 0xF6AD0542, 0xF6860216, -0xF2FE00D3, 0xF8BE005E, 0xF898054C, 0xF4520483, 0xF6060027, 0xF98301BA, 0xFF1702B5, 0xF56502DC, -0xFBB30118, 0xFB60FF11, 0xF8EAFE99, 0xFBEFFF19, 0xFBB1FEA7, 0xF3BAFD54, 0xF99DF969, 0xFFE10262, -0xFA13FD27, 0xF443FFBB, 0xF85CFE6E, 0xFA82FFD0, 0xFD24FF81, 0xF67C01C4, 0xFAC9FEAE, 0xF6FA0229, -0xF56703F1, 0xF71100C2, 0xF347FF38, 0xF8CDF942, 0xF3CAF96F, 0xF5F2FAFF, 0xF542F9D2, 0xF869FBAB, -0xFBA6F8E7, 0xF9A1F147, 0x0050F264, 0xFD3AF3A5, 0x0780F986, 0x06A8004D, 0xFFE4FC48, 0xF6E9FB83, -0x0133F8B5, 0x024FF9E9, 0xFC570589, 0xFFBFFD2C, 0xFB2BF952, 0x00A0FA26, 0x0231F689, 0x0454F8FF, -0x0723F8ED, 0x036BFBB4, 0x0780FDDD, 0x0503FDBB, 0x05D6FFCD, 0xFD33FF83, 0xFD6FFAF9, 0x049DF9C4, -0x038AFA93, 0x080CFBC6, 0x03A2FBD8, 0x0643FCD5, 0x0D8AFF08, 0x0F2E0813, 0x07060D8D, 0xFF530B8E, -0xFC59028D, 0xFA6105D9, 0xFF6F071E, 0xFBDF08D7, 0xF97E00C0, 0xF8CCFE1C, 0x00BBFD7A, 0x08FF030B, -0xFAA603F5, 0xFC75FE4A, 0xFBECF8B5, 0x0789FB77, 0x0A69012A, 0x02D40145, 0xFECAFCB9, 0x06C0FD4B, -0x078FFF2E, 0x05480284, 0x05C709A4, 0x038707D7, 0xFE8A08D5, 0xFE6D0D52, 0x01CF00FC, 0x051F063C, -0xFD150C96, 0xFE660A55, 0x00290DC3, 0x074D0ED2, 0x02110CB7, 0xF94005CC, 0xFD8D06A7, 0x01F204FC, -0x002807F5, 0x031F0E5C, 0xFA6E0782, 0xFDE00A43, 0x05FE0B30, 0x01F10971, 0xFD6C125A, 0xF9551453, -0xF90B10F6, 0xEED90FDF, 0xF1750A5E, 0xEFCA0849, 0xF2D10CF7, 0xEC13073D, 0xF858025D, 0xFB520191, -0xF40800EC, 0xF593052D, 0xF1DF05A9, 0xF2FB04F4, 0xEE2404CC, 0xE9C500E0, 0xF214FD2E, 0xF5E6F533, -0xFA1BF631, 0xFB2CFB19, 0xF55CFE97, 0xF5140378, 0xFB85FF65, 0xF67D02A4, 0xF967076D, 0xF5830893, -0xF17A0959, 0xED3E01A5, 0xF02301B6, 0xF5FE00F4, 0xF914FFAD, 0xED07FD70, 0xF508FE84, 0xF790FBD6, -0xF501FEA0, 0xF817F748, 0xF39AFD8C, 0xF9DAF571, 0xFBCFFAE5, 0xFDA6FA5A, 0xFC5EF927, 0xF5A90009, -0xF906FC1C, 0xF741FF6D, 0xF95B0070, 0xF5DB021A, 0xF55BF85F, 0xF61FFD65, 0xF798FC9A, 0xFB1FFA94, -0xF7ECFC7F, 0xF602FF23, 0xF1B2FBA0, 0xED04FF93, 0xEE31FC87, 0xED59F7F2, 0xF1D5ED9A, 0xF75FF263, -0xF797EEBA, 0x0074F0E1, 0x0390EE61, 0xFE91F59C, 0x0708F8D7, 0xFAC7FBE3, 0x0634FDAE, 0x056CFCA6, -0x026AFCFB, 0xFCEBF457, 0x04F6F827, 0x03ABF2C0, 0x00FFFA09, 0x00A6F799, 0x04EFFB37, 0x07EB00D1, -0x0209FCC1, 0xFF45F9A3, 0x021AFAA4, 0x026CF85A, 0x0382FC38, 0x0397F9A8, 0x03FFF784, 0x046CF929, -0x0948FD40, 0x05F1FED5, 0x0CD6003C, 0x0B36FE7F, 0x09CB009E, 0x070E07AA, 0x027400A5, 0x0996FC87, -0x050E0956, 0x07750630, 0x007C0B62, 0xFEDD04D8, 0x00040264, 0x00F000E7, 0xFE010492, 0xFD7E0008, -0x00B100AB, 0x04700276, 0x00CFFF64, 0x07EF054B, 0x08A601C7, 0x084302DE, 0x05BF08D0, 0x02780776, -0xF8EB070D, 0x049701D7, 0x034B0541, 0x034A0931, 0x061D091C, 0x07DA08B0, 0x015D10D3, 0x06980B55, -0xFC580BC3, 0x03940BF8, 0xFF8B0BCE, 0xF9870867, 0xF33B0889, 0xF83E0651, 0xFE1300C2, 0xFFD905A2, -0xFFDC09BC, 0xFDD60DAD, 0xFF9E03D8, 0xFF0A075D, 0xFF4B1046, 0x05360FB7, 0xF84811EC, 0xFA5E0B86, -0xFCAD092A, 0xFE3B0DD3, 0xFFE00C60, 0xF7471296, 0xF5AD0D6A, 0xFBB60B8D, 0xF64B0BA9, 0xF33C0D50, -0xF04F099A, 0xEF720174, 0xF9200A86, 0xEF5E0BA6, 0xF53C0782, 0xF06A054C, 0xEB250789, 0xF03D08E1, -0xEEC2FF52, 0xE7F6FB5A, 0xEFC3FA72, 0xEFCFFCF8, 0xF05EF9EB, 0xF257FDFD, 0xF9E80036, 0xF4190998, -0xF1BA0025, 0xF4CCFC80, 0xF30101DC, 0xF2920503, 0xF0B5018E, 0xEE1EFC67, 0xF315F529, 0xFC45F421, -0xFF9EFF4D, 0x0018FAE6, 0xF46100BC, 0xF7E8F880, 0xFA79038A, 0xF82BFED7, 0xF40D00E9, 0xF39CFB71, -0xF6FEFDE1, 0xF731FE37, 0xFA72F876, 0xFADCFBA7, 0xF9D7FD8D, 0xF99EFF50, 0xF6CC0552, 0xF62F03EF, -0xF109FE82, 0xF2C0FDC2, 0xF00EFBD9, 0xF352F631, 0xF431FA4F, 0xF1E5F8BE, 0xF3DFF7F8, 0xF6A4F0CD, -0xF4D2F089, 0x0114F634, 0xFB30F79B, 0xFBE2ED25, 0xFEDCF0DB, 0x087AF438, 0x012CF5D1, 0x074CFF17, -0x018BFF6F, 0x00F0F93E, 0x03EAF550, 0x0240FA47, 0x01E7FE7D, 0x01C50089, 0x041BFBC4, 0x02ECF9F9, -0x06EFFCA3, 0x0351FFFA, 0x03D6052A, 0x024F09A5, 0x002006C2, 0xFDDB05CA, 0xFD30FF1E, 0x02190393, -0xF886FCFB, 0x01E0FDB4, 0x024900D1, 0x018F052E, 0x03860646, 0x0543060E, 0x00F60892, 0x034C0AFA, -0xF88A0BFF, 0xFAA10B76, 0xF2D50570, 0xF26EFD3E, 0xF34DFEC1, 0xF849FDE7, 0xF74EFF99, 0xF5FDFDB3, -0xF8F7FE85, 0xF5EFFC0E, 0x0131F8D2, 0x002BFB2C, 0xF9E7005B, 0xFE05FC4F, 0x02B9F6D9, 0x0CF1F65D, -0x0C7A0229, 0x0424044B, 0x064D0266, 0x0E830254, 0x082005D2, 0x07E00865, 0x053904F7, 0x06070445, -0x040C0A8D, 0x031405D0, 0x034F0EDC, 0xFE690E40, 0xF8DF091A, 0xF9DF073F, 0xF7A9068A, 0xFAFC064C, -0xF67E0773, 0xFEBE03A6, 0xFA57FFCC, 0x00C70559, 0x01BA0734, 0xF8BD0838, 0xF68906D0, 0xFBC207FF, -0xFB7C1164, 0xF7E60DAA, 0xF0520FB4, 0xED7A0546, 0xF81BFEEF, 0xF90E030C, 0xF79B0252, 0xF75C09BD, -0xF6C207A8, 0xF60602D5, 0xF7DFFEE9, 0xF118028E, 0xF392FF9C, 0xF0CDFA76, 0xF143F847, 0xFD71F875, -0xF927F8D4, 0xFEDBF728, 0xFBC3FB01, 0x03480316, 0xFF82061B, 0xFFBD0042, 0xF9BD023C, 0xFF790250, -0xFFA90598, 0xFE350268, 0xFC77067A, 0xFA22040B, 0xF198062D, 0xFD78FB8D, 0xFC61FFAA, 0x009A0D61, -0xF909058A, 0xF1A8FE82, 0xF71DFE16, 0xF865FECE, 0xFDA50158, 0xF784FF86, 0xF9200453, 0xF68803AF, -0xF0DC037C, 0xF2FFFE8B, 0xF7E0FB00, 0xFB33FD5E, 0xF833FC81, 0xF4F5F5F1, 0xFD1C00FC, 0x002BFECD, -0xF6C501EA, 0xFC670232, 0xF9BFFF3E, 0xF60D03BC, 0xF30E0096, 0xF0A0F3B6, 0xF3FEF84F, 0xF8A5F6A6, -0xFFB6F42B, 0x0363F524, 0xFFBDF4E1, 0xFF60FAD5, 0x05C3FCC3, 0x014FF92F, 0x0316FB2D, 0xFC2401B3, -0x00FAFD4C, 0xFE3CF99F, 0x00E30278, 0x0129FDB0, 0xFD07FA13, 0xFFB2FC56, 0x0051FA95, 0x069602FF, -0x048905A6, 0x01D704F1, 0x0056FC54, 0xFBFEFC08, 0x04EDFC6B, 0x0087030B, 0x016AFAA2, 0x01EFFDB1, -0x0987F995, 0x0879FF4D, 0x0B0CFFB7, 0x070C02CC, 0x05C804E1, 0xFB6AFF68, 0xFF28FCFF, 0x013700F0, -0x0558FD07, 0x03D200E8, 0x06E7FB15, 0x052B03FD, 0x07FFFD0D, 0x0600FD6C, 0x05F80493, 0x06340137, -0x033706F3, 0x068D0A83, 0x02340294, 0x03CCFC2A, 0x0CEA0110, 0x0CC00A77, 0x0A8A0B85, 0x050508C7, -0x0BF2080B, 0x0CF91173, 0x05AF139F, 0x01CA1434, 0x009F0F28, 0xFC8811E2, 0xF1C411B6, 0xF5170F9C, -0xF1C20B05, 0xF5090A39, 0xF3B01083, 0xEE0F0DF9, 0xEFFE0501, 0xEF8705C5, 0xF0C60249, 0xF032FC82, -0xF428FDE5, 0xF2B0F831, 0xF062FB83, 0xF409FB84, 0xF4EEF536, 0xF001F338, 0xE92BF63D, 0xF68CF331, -0xF5F1EDA3, 0xFCB0F31E, 0xFCF9F227, 0xFB35F0FF, 0xFA9CF276, 0x0103F82E, 0xFC00F65D, 0xFED5F6AD, -0xF832F562, 0x006CF06F, 0xFB3CF573, 0x01F1EACA, 0x0192EB60, 0x0A01F591, 0x08EAF8B2, 0x0758FD12, -0x07D8FBA3, 0x0C26FE82, 0x02AEFDDF, 0x05AE0070, 0x04890509, 0x018600C3, 0xFE230726, 0xF7EE0261, -0xF812FE65, 0xFDA3019E, 0x00450448, 0xFACD0296, 0xEE8200D0, 0xEDC2F945, 0xF216FBD3, 0xF364FA2E, -0xF0D1F58B, 0xEF72F270, 0xF414EED5, 0xF97FEF9C, 0xF466EC1B, 0xF96AE958, 0xFDC7E810, 0xFCC1EB22, -0x02D5F0E6, 0x043BEF6F, 0x0BE6E959, 0x0A78EEF4, 0x0D36F0B9, 0x0AA4F329, 0x0926F6F9, 0x090CF37F, -0x0AA9F3F9, 0x0B5DF02C, 0x0BB3F3FA, 0x10F7EE6B, 0x0CEBF93A, 0x1159F769, 0x0D3EF3A2, 0x0F69F89C, -0x17CBF891, 0x16AD047B, 0x11EB01EB, 0x0B27FF61, 0x0EF00029, 0x0D380085, 0x0CDB034E, 0x08D001EB, -0x152D01EA, 0x143B0736, 0x0F3F08B0, 0x0B220BA9, 0x0FA908A7, 0x04D70FF3, 0x0319128D, 0xF98A1148, -0xFA030F36, 0xF412019A, 0xF7E10932, 0xFB10021B, 0xF8770325, 0xF941FF1E, 0xFB37FD19, 0x0076FE06, -0x0710FE7A, 0xFA5D02A0, 0xF7C702CB, 0xFFF5FD46, 0x0368FA69, 0x00D9F9BF, 0x02C2F84A, 0xFB2EFA4E, -0x072EF77F, 0x04B2FAA2, 0x09F6FE8D, 0x08C7FE58, 0x0B3D0083, 0x0BD701BF, 0x08C1045D, 0x0A0900B1, -0x07110445, 0x0A810487, 0x075605A4, 0x0804053D, 0x0F850765, 0x05FD0A16, 0x021107A2, 0x0367063E, -0x07D204F4, 0x0B610FD1, 0x05D41208, 0xFB40152E, 0xFE0A09F3, 0xFE9F0D80, 0xF9E413D0, 0xF01A1358, -0xF16B0CC8, 0xF2C9FEF1, 0xF03E04FD, 0xEF5E0565, 0xEF650660, 0xF05E04D8, 0xF162FFC3, 0xF08AFFEB, -0xEB77FEC1, 0xEAACFD0F, 0xEE97F425, 0xEC0AF22B, 0xED72F746, 0xECC0F344, 0xF20CECB6, 0xF963ED11, -0xFB69EB40, 0xFCC9ECA8, 0x0011F0C8, 0x041CF440, 0xFD85F827, 0xFC65F6D2, 0x0576EFB3, 0x0337F3A2, -0x00AFFB09, 0xFC9CFA7A, 0x01C9F46D, 0x02B3F1D3, 0x0511FA2C, 0x03FBFA26, 0x03A4FB6F, 0x06DDF6AE, -0x0797FA46, 0x06910082, 0x02EC0456, 0x075DFFF6, 0xFE5E00D7, 0x06B0FE4B, 0xFB69012D, 0xFC7FFEDF, -0xFA0BF977, 0x0139FAC3, 0xFE76FB3C, 0x020DFE19, 0xF784FC35, 0xF91CFDCE, 0xFBB6F74E, 0xFEEEFE68, -0x00ACFD45, 0xFCE402B4, 0xF571FBDC, 0xF88DF661, 0xF312F12B, 0xFB53F0AA, 0xFFC8F00E, 0x005DF1A0, -0xFD36EDE4, 0x01C8F2D8, 0x0504F0D8, 0x0451F3B1, 0xFE5DF804, 0x03C2F566, 0x02C7F116, 0x080CEEC0, -0x070FF56A, 0x093AF3A1, 0x0CAEF352, 0x0ECDEE80, 0x0F0FF592, 0x0C71F98A, 0x1153FD52, 0x1333FF76, -0x167D01CF, 0x0FD701A5, 0x0D0400B0, 0x0DD50277, 0x101EFDF4, 0x14710215, 0x10A107CB, 0x0BD70A69, -0x05950A54, 0x0B1B089C, 0x0D4904CC, 0x0A230DEA, 0x01EB07D0, 0x055A0631, 0xFBD70DF9, 0xFF710B5A, -0xFB530BC8, 0xF9F907E9, 0xFFDE058E, 0xF8C305A9, 0xF761007B, 0xF730FA2C, 0x0149FA16, 0x0190FBDB, -0xFD2DF948, 0xFC42FC29, 0x00A2FBD5, 0x035CFC54, 0x0746FA89, 0x01F4F92A, 0x0228F819, 0x066CF2EA, -0x088DF62E, 0x0A86F661, 0x092BF9F5, 0x100CFB7D, 0x159300A5, 0x141904E6, 0x0DC6040E, 0x0C8B03B5, -0x0E850500, 0x0AA60930, 0x09740B88, 0x04AE09B8, 0x0BE20703, 0x0DA7081A, 0x0B010C13, 0x08FF10D1, -0x0ABC0CE1, 0x03881736, 0x045517B4, 0x011A10BD, 0xFBDA0CDA, 0xFC901452, 0xF70A11A4, 0xF39E16C3, -0xF4B30BE6, 0xF23A08FA, 0xF41D0CD9, 0xECFF099A, 0xED1C06C0, 0xF2FF00C5, 0xF25FFBCB, 0xF0EBFEF6, -0xF1510048, 0xFB71FA59, 0xF414FB17, 0xEFC5FA14, 0xF4B1FEC7, 0xF791F888, 0xF71CF550, 0xFC8AF78A, -0xFFCAF59A, 0xFD99FB2C, 0x024DF92C, 0xFF61FACA, 0x031EFEE4, 0x053200E6, 0x00240305, 0xFA850144, -0xF9F602B3, 0xF642F9EC, 0xF6EA00F6, 0xF84DFE3C, 0xF4EDFAA1, 0xFE62FC1B, 0xFA67035E, 0xF7A501FB, -0xFC350341, 0xF8D2FC0A, 0xF99E0349, 0xF85A007F, 0xF25A00CC, 0xF58AFA28, 0xF742FA73, 0xF901FB79, -0xF7C20062, 0xFADCF6CD, 0xF6FEF882, 0xF44CFE65, 0x002CFB4F, 0xFA5CFFF2, 0xF38CFE56, 0xF001FB20, -0xF1B7F591, 0xF352F67E, 0xF504F4D2, 0xF83FF383, 0xFA0BF226, 0xF223F58E, 0xFAACEDDE, 0x00A5EAD0, -0xFBB5F04C, 0xFB66F131, 0xFBF1E7C8, 0x03A1EA7B, 0x0454EF37, 0x02E4EE75, 0xFDA4EB72, 0x07D1EA88, -0x0AA1EBCA, 0x0381EFC2, 0x02C2F05F, 0x0AE6E94D, 0x1307EB15, 0x11FAEF3C, 0x10BDF1C0, 0x0CE2F60E, -0x0FADF456, 0x1310FC34, 0x1157FD76, 0x0FD50049, 0x0F71FE77, 0x0B47FA90, 0x103CFFCD, 0x0749FBA8, -0x1354FA24, 0x0E65FFB3, 0x0A6303B1, 0x07B302CD, 0x0BDF0BB4, 0x05120848, 0x059106A3, 0xFA260772, -0xFD5200CC, 0xFE99024E, 0xFC66FDD6, 0xFD520066, 0x00D2FE8C, 0x01DEFAF2, 0x033EFEC8, 0x0234FDF6, -0xFF9DFF7F, 0xFE94FD17, 0x02E6F88D, 0x02B7F9A1, 0x0436F9CD, 0x040FFF63, 0x0153FA5F, 0x052EF764, -0x0657FB3F, 0x0967005A, 0x0ABDFE55, 0x0965FEA4, 0x0FEEFDE1, 0x0AADFF83, 0x13C00455, 0x08750631, -0x0E1A0DF9, 0x0DAE095E, 0x056C0629, 0x0C110D56, 0x0B700981, 0x060F082B, 0x07FD087B, 0x07AF10A8, -0x018D03A9, 0x019D0465, 0xFDAB08BD, 0xFA33014E, 0xFFD00387, 0xF94C0135, 0xFFE70279, 0xF77B0358, -0xF56F0307, 0xF367FB02, 0xF8B0FD66, 0xF954FFB8, 0xF67900E6, 0xF22CF748, 0xF048F201, 0xF02CF3A2, -0xF1FFEAA1, 0xF841E83F, 0xFB0FE94A, 0xFA48EF01, 0xFEECEE4B, 0x01AEE5FC, 0x0610E8CF, 0x0805E848, -0x0D55EE76, 0x0A1DF475, 0x0905F405, 0x0976EDCE, 0x0853F679, 0x0A56F4A8, 0x0E2BF634, 0x138AF843, -0x0EE1F81F, 0x0AB3FC46, 0x0A6AFCAD, 0x0C7CFE82, 0x12910090, 0x088B0167, 0x048006A4, 0x0A1F028A, -0x042501BF, 0x07810124, 0x05860043, 0xFE4C022D, 0xF976FC63, 0x03ECFDD5, 0x03EDFFF3, 0x036D0164, -0xFB08018D, 0x007603D2, 0x0187FC30, 0xF857041D, 0xFCF3F952, 0xF932FE3E, 0xF9D6FAF0, 0xF960F638, -0xFB62F2C6, 0xFC57EFC6, 0xFF50EE8F, 0x0781F073, 0x0752F477, 0x0879F164, 0x08B9F666, 0x04E3F4BB, -0x009DF154, 0x0994F617, 0x0CEBF63F, 0x0BD5F456, 0x09EFF66C, 0x0A5DF4EB, 0x135FF3CA, 0x1088FC05, -0x14BA057A, 0x0C280250, 0x0B9D028C, 0x0A2C06A5, 0x0DEB08A2, 0x0A0006A0, 0x01F40B54, 0x043A030D, -0x0407FEEB, 0x0238FFC6, 0xFEA20786, 0x02370385, 0x0768FBD5, 0xFD0D01A9, 0x052803E2, 0x01FBFD7A, -0xFB16003B, 0xFC200115, 0x03D802E6, 0xFD4106C1, 0xFC190006, 0xFBE302D1, 0xFCF6FCCA, 0x0000FAD7, -0x0239FCBA, 0x0190FF7F, 0x01C70257, 0x033F011E, 0xFB8CFDAB, 0x001AFBF8, 0x00C00057, 0xF911FCFE, -0xF5FAFBCC, 0xF812FC34, 0x0257F740, 0xFF3FF890, 0xFB7EF8B6, 0xFEEBF802, 0x015CF6C1, 0x066AF7D4, -0x03B0FBAE, 0x0170FB8D, 0x0316FA51, 0xFD6FFAAF, 0x03B8F996, 0xFA3CFE9D, 0xF8CCFDB7, 0x01A6F7C9, -0x06BFF5E4, 0x08B4FBFB, 0x0589FC60, 0xFE84FB31, 0x0233FC54, 0x0714FA63, 0xFF09003C, 0x015D01D0, -0xFD29FF7A, 0xFADCFEDB, 0xFD91F75C, 0xFD21FB6F, 0xFFC1FAA1, 0x004DFCBD, 0xFCF40229, 0xFFBCFCD0, -0x018AF45E, 0x01FEFC28, 0xFE740371, 0xFBCCFCB7, 0xF913FEAD, 0xF700FC15, 0xFAF9FBF5, 0xF288FB11, -0xF6C2FC68, 0xFA87F937, 0xF9C0F034, 0xF7CEF985, 0xFA01F75F, 0xF7BAEEA2, 0x04CDF17E, 0x0161F48F, -0xFE67F3F1, 0xFBCEF416, 0xF993ECE7, 0x060FE91B, 0x0282EE99, 0x0382F22E, 0x036AEABA, 0x06F0EA62, -0x08DCEB0D, 0x1043F103, 0x0EEBF557, 0x0BF6FA22, 0x0E3BF771, 0x09D6F92A, 0x0CFAF70F, 0x0D39FCDD, -0x0E04FB9D, 0x0AA9FC14, 0x0B2E01AD, 0x082FFEFB, 0x05BEFD3C, 0x0968FB4B, 0x0C13FE9E, 0x0524044B, -0x02E804B0, 0x07AAFC23, 0xFF4F046D, 0xFBD6F8E2, 0xFF50FA85, 0xFBA200D8, 0xFFFBFCE4, 0xFB31FDCD, -0xFEFBF8FA, 0xFFAAF666, 0x0771FA08, 0x04D8FAC1, 0x030FFB5F, 0xFADEF807, 0x05E3F3B8, 0x043FF4BD, -0x0536F317, 0xFE1EF575, 0xFF0FF0B3, 0x0334F351, 0x0218F427, 0x07A3F25D, 0x042AEFB5, 0x0648EFCB, -0x11E6F295, 0x0D39F5FC, 0x0DAFF2B6, 0x0B3CF41D, 0x10C4FBCD, 0x0C32FFA2, 0x0C2902C8, 0x0B6A05F3, -0x12BE0090, 0x0E0D01DF, 0x138000D2, 0x0E19024D, 0x0CA80C5C, 0x0A8509DA, 0x0BC410C2, 0x07B30C72, -0x05AE0D5C, 0x01C71189, 0xFF2E1193, 0xF3FD0A4F, 0xF709059D, 0xF78B05CF, 0xF6E30941, 0xF72D0669, -0xF58701AD, 0xF9550331, 0xF8D6FF65, 0xFB47FE6B, 0xF901F9FF, 0xF964FD51, 0xFBE9F8D4, 0xF908FC20, -0xF524FA29, 0xFA07F620, 0xFE8DF95A, 0x0089F944, 0x00C5FD31, 0xFC62F0FB, 0xFE7AF3BD, 0x066DF793, -0x03F4FD88, 0x00EAFA21, 0x02C9FE45, 0x01D7F9E6, 0xFF8BFCA0, 0x0539FF48, 0x0031FC68, 0xFF53F9EF, -0x031BFBB2, 0x0303FC1B, 0xFB44FB62, 0xFF43FC5A, 0x0539FB70, 0xFD8903F3, 0xFC1CFD2B, 0xFB1601E5, -0xFAA7FBCA, 0xFDC9FCB8, 0xF708FBAD, 0xF6A4FB0E, 0xF732F7FC, 0xF342F3F1, 0xFB91F336, 0xFCB2EF95, -0xFCA4F397, 0xFE9DF866, 0xFD2DF7E9, 0xFF4CF745, 0xFB7FF1F6, 0x0025F489, 0xFF88F635, 0x01B6F002, -0x0001F624, 0x038FEF3F, 0x01E2F00B, 0x0618EDDF, 0x09ADF5E6, 0x0617F5FF, 0x050BF571, 0x089FF045, -0x06A2FA1A, 0x0865F5DA, 0x060BF6E3, 0x0797F84B, 0x025CF5FD, 0xFF71F787, 0x00A8F8B4, 0x0773F63B, -0x0444FC4E, 0x0A8CFA46, 0x05E5FEDB, 0x05AEFCAC, 0x0595F8AB, 0x043DFD99, 0x06B802B4, 0x0CCC059D, -0xFF440159, 0x03FBFAB0, 0x01CA00B9, 0xFEE9FCB4, 0x040AFA3F, 0x00A6F9A6, 0x0434FB9B, 0x0282FEEB, -0x039EFBC0, 0xFE2DFB16, 0x05E7FEB0, 0xFF59FBFA, 0x0020FAD7, 0x0022FB54, 0xFE65F7BC, 0x0284F20E, -0x04D0F8BB, 0x05C9F164, 0x02F1F398, 0x052EF61B, 0x054EF90D, 0x0774F0B6, 0x04FDF895, 0x09C4F82C, -0x0B2DFAD1, 0x0087F78B, 0x08A9F6D7, 0x0507F454, 0x065EF617, 0x0E5EFAD8, 0x0A56F815, 0x0B63F9E9, -0x0C90F9FA, 0x0CA7FD02, 0x0E2DFE2C, 0x0FA00456, 0x07C5023B, 0x0AAA029A, 0x07390507, 0x06620367, -0x08D50791, 0x09BE0978, 0x018A0D75, 0x0793070E, 0x05BD06C8, 0x094F081A, 0x04480E95, 0xFA490E4D, -0xF63D0513, 0xF3C206F2, 0xF56E0110, 0xF17E0631, 0xEF65FF30, 0xEAFDFD0D, 0xF194FC0D, 0xF53FF907, -0xEF61F9ED, 0xFB09F297, 0xFA8EEFFB, 0xFFCBF24D, 0xF6B4F51E, 0xF3FAF56D, 0xF8DEED37, 0x0125F14A, -0x02D6F16F, 0x0178F1E4, 0x00DEF2D6, 0x0356F13B, 0x0BD9ECE4, 0x0C5FF1C1, 0x0BB2FB6C, 0x0B22FE0F, -0x0AEFF94B, 0x0AD3FEDB, 0x07BAFF43, 0x03D5FE91, 0x0C480067, 0x07D00168, 0x054902AA, 0xFD22FFF0, -0x074203CE, 0xFE79FF6D, 0x0442028C, 0x01350020, 0xFDF808EF, 0x008606C4, 0xF6E20886, 0xF6B20184, -0xFB1BFD82, 0xF758FF8F, 0xF65B0045, 0xF0150335, 0xEE0CF9FB, 0xF653F160, 0xF781F40A, 0xF7E9F5B4, -0xF249F98B, 0xF47EF23B, 0xFC1CEDCC, 0xFBEEEACD, 0xFAE1EEDA, 0xFEE8EECE, 0xFDFCE950, 0xFE19ECEB, -0x0277E5C8, 0x01C2E963, 0x06A2E7EC, 0x08BFEF64, 0x161BEB76, 0x0D16F010, 0x0A33F259, 0x1042F616, -0xFC9D118B, 0xFE3708FF, 0xFB5107CB, 0xF72110D4, 0xF4E60FFC, 0xF8F000A3, 0xF80A030D, 0xF68C0575, -0xF9070746, 0xF8F9FF89, 0xFA49FF50, 0xF94AFE4E, 0xFA4AFB07, 0xF960FE93, 0xFCE2F7DD, 0xFC24F775, -0x062CF543, 0x0870FBDB, 0x0B10FC9C, 0x0BBB057E, 0x0A33019F, 0x137C03A2, 0x0E96081D, 0x0AAD08A0, -0x00B20D85, 0x086C0CD0, 0x05430D7E, 0x06D30A95, 0x05D40EEA, 0xFEA90FB0, 0xFFA0128A, 0xFC0C170B, -0xF64C1284, 0xF5941833, 0xF4430F56, 0xEFE60DC9, 0xF59D0D3B, 0xF4AD07A7, 0xF2E80B8E, 0xF3820935, -0xF1070691, 0xF1290737, 0xF184045E, 0xEED5FCDD, 0xECE1028F, 0xE9F101A8, 0xEC25FF88, 0xF343F8D3, -0xF66BFC19, 0xF0F5FB52, 0xF2B1F6A1, 0xF5F7F52F, 0xF68AF594, 0xF14AF05C, 0xFB6EF17C, 0xF33CF104, -0xFA26EBA6, 0xFE61EB0E, 0x02FFEF52, 0x0594EC0D, 0x0BC5EC6F, 0x0D26EDAF, 0x1346F2B5, 0x1154F3DF, -0x0F2FF7E7, 0x1093FABB, 0x1214FABC, 0x14ADFD59, 0x12D901E3, 0x0F3303AE, 0x1442089E, 0x11E5095B, -0x0FAB0D58, 0x0E450CB4, 0x0AF0121F, 0xFFBE1048, 0x026A0C74, 0x038B0E1E, 0xFBD60F7A, 0xF99C073D, -0xFAD60CB4, 0xF9FB06BE, 0xF5FB03EB, 0xF8800454, 0xF65D07EB, 0xF4C30149, 0xF495FECA, 0xF95EFA5B, -0xF77FF4B1, 0xFD49F5E9, 0xFE38F76C, 0xFA4BF455, 0xFFA5F297, 0x0097F792, 0xFF25FB93, 0x0278F32D, -0x03E5F1F1, 0x0AE9F583, 0x0424FA13, 0x08ECF5DA, 0x0DCEF33D, 0x1402F217, 0x0FE9F5E4, 0x1288F850, -0x1219FA6E, 0x16C2FD56, 0x1352006B, 0x19D4FB8A, 0x16510304, 0x1B4D09A9, 0x17760DBC, 0x198D086A, -0x18AA0F1B, 0x17531018, 0x135A1306, 0x10E518D4, 0x0C141D1F, 0x059116FD, 0x04F617B3, 0x07B61B44, -0xFC391B01, 0xFD861AE0, 0xF9D1188D, 0xF53F171E, 0xF2DA13C7, 0xF3B8125C, 0xF0830B1A, 0xF1D908BD, -0xF1DC09B5, 0xEDCF0782, 0xF3A101BF, 0xF56AF9A9, 0xF584FD21, 0xFA7E00C7, 0xFF15FC47, 0xFA92FBA1, -0xF98FFBD4, 0xFF88F3EB, 0x004EF7A9, 0x01B4F85F, 0x0274F87A, 0x073DFB46, 0x06EA01DC, 0x0548FFD9, -0x0B7B00D4, 0x03C6FE95, 0x0995FFF8, 0x01B702D9, 0x054100B9, 0x03E30222, 0x0410031D, 0x08880271, -0x07E303ED, 0x09A807C9, 0x0B5608DC, 0x06800B51, 0x05060B52, 0x00E51119, 0x03920A46, 0x03C30DA4, -0x085F133D, 0x00C91189, 0xFFA30CBF, 0xF8DC1266, 0xF8701296, 0xF1F61479, 0xF2AA154F, 0xEDA009FE, -0xEE4A0860, 0xEFA80A4F, 0xEED8029F, 0xED5FFBC4, 0xEDFA0013, 0xF318FB40, 0xEDE8FD23, 0xEFD9F261, -0xF707F790, 0xF3FFF6C6, 0xF67DEB8D, 0xF92DEAFD, 0x01C8F49D, 0x0139F5EF, 0xFD68F506, 0x06FEF328, -0x06F4F1B2, 0x0611F8BE, 0x072FF62B, 0x0842FEBD, 0x0554FCE1, 0x0BD1FA63, 0x04DEF782, 0x0541F8F1, -0x061DFBA9, 0x03F9FA85, 0x098AFA15, 0x0D13FC8D, 0x05B902FB, 0x065AFBFD, 0x0D2B0102, 0x0D320003, -0x0C280411, 0x0AFB02F1, 0x0C4E0A6F, 0x0AC90508, 0x0ED1061E, 0x0E650B24, 0x07580F5F, 0x01CE1601, -0x00140E8F, 0x00E3099A, 0x00700DA6, 0xF9AF09ED, 0xF76E0C95, 0xF64F08C4, 0xF1ED0765, 0xF4CE00A6, -0xF729FDFA, 0xF7E8FAEC, 0xF918FB03, 0xF590F748, 0xFCEDF5CD, 0xFA53F7D5, 0xFD7EF0C6, 0x011EF022, -0x0C53EDA8, 0x0B31FA76, 0x0A69FE10, 0x09BBF6B4, 0x0C30F53F, 0x0D1AFACF, 0x0D66FABB, 0x0DA4FE19, -0x0DECFFC5, 0x0E59F9E0, 0x11FE003C, 0x12D304A3, 0x126C08A7, 0x0E480670, 0x0ED70911, 0x115106E6, -0x0D850EA5, 0x0DD60C3B, 0x0C840771, 0x0F3A0C37, 0x0DAD125B, 0x0AFE1231, 0x0BC915EC, 0x08341504, -0x024E16B4, 0x04C31380, 0x011212D8, 0xFCE30D7E, 0xFABA1197, 0xF8B70BE1, 0xFB1F09D6, 0xF4C20C7F, -0xF3F40829, 0xF7060761, 0xF0250924, 0xF0C40182, 0xF888FDBA, 0xFF22FD6F, 0xF84D028F, 0xFD02FC5E, -0x0017FB68, 0x0338FCE0, 0x0880040E, 0x03650041, 0x08370472, 0x0AE301B9, 0x0C25046E, 0x09140356, -0x05690B0E, 0x085F0B71, 0x096205FE, 0x04170C41, 0x09BD07F5, 0x05420A4D, 0x001513B0, 0x022A13C1, -0xFDA80CA7, 0xFFCF0DA2, 0xF8A50B21, 0x00360951, 0x016A0DD4, 0xFB8307C2, 0xFF9E0D4F, 0xFE6311F0, -0xFD2E1548, 0xF3C20EAE, 0xF0290C9A, 0xEE5A0F5B, 0xF2C207B6, 0xF4190847, 0xF42F02B8, 0xEF90065D, -0xF177012D, 0xF482FF77, 0xEF590545, 0xF175FE7E, 0xEF34FAD9, 0xF184FB9F, 0xF292F1FF, 0xF47AF40C, -0xF89CF31C, 0xFDADF336, 0x0124F683, 0xFF1EF95F, 0xFE2CF754, 0x013DF7F5, 0x05BCF8E4, 0x01A8F921, -0x047AFD08, 0xFF8DFF4B, 0xFD7DFDD2, 0xFFB2FA44, 0x007EFCC6, 0x018AFCD8, 0x05A2FECC, 0x01BD0314, -0x00CB020E, 0x06AF0047, 0xFFEBFE02, 0x036EFC11, 0xFF43FB37, 0x0795FF19, 0x08D20115, 0x05D80017, -0x05880087, 0x0A7C062A, 0x043DFF12, 0x0359FE81, 0x07870999, 0x02B7072E, 0xFF0405DC, 0xFD0600A5, -0x023E0457, 0x03E60B0B, 0xFA300402, 0xF77A05F4, 0xF052FF3A, 0xF46AFE8D, 0xF729FD1C, 0xF290FAD7, -0xF968F591, 0xF95CF1F9, 0xFA53F227, 0xFE1CF0BE, 0x01F4F371, 0x0193EF9C, 0xFFD2EAD7, 0x0358EE9F, -0x08B8F1DF, 0x0E3FF4D2, 0x0B3BF80D, 0x0DEBF687, 0x1385F531, 0x0FD2FD38, 0x16CAF73C, 0x14F400E7, -0x0C81FE0A, 0x13B2FD3C, 0x118E0317, 0x127C001E, 0x11C906CE, 0x0B5B0625, 0x0F9A0278, 0x12D80BA7, -0x0DF80ED8, 0x0C7008CD, 0x11F8090D, 0x0FC60E8A, 0x0D96102C, 0x078A12A2, 0x06C71243, 0x05FA13F5, -0x0A6F1108, 0x0DD91B05, 0x0336193F, 0x0600162B, 0xFB8013EE, 0xFA4C1829, 0xF52C1142, 0xF3330EE5, -0xEE38123A, 0xEB6C09D5, 0xF24902A0, 0xF35702C9, 0xF4DFFD51, 0xEFC602C8, 0xF7E6FBC3, 0xF637F721, -0xFC50FB1B, 0xFE1AFA4C, 0x003AF567, 0x01A1F0EC, 0x08B6F3CB, 0x0E1AF545, 0x12D5FBA5, 0x0B43FBD9, -0x11AD0494, 0x100C026D, 0x0F21032A, 0x12C80B2A, 0x08E711C2, 0x0A7D0F94, 0x0C751081, 0x04E50FB9, -0xF93EE851, 0xFCAFEC99, 0xFDFBE850, 0x022CF06A, 0x0569EF6A, 0x082CEF30, 0x012AEE1A, 0x0B09EEE9, -0x0A04F0E9, 0x12CDF7D8, 0x142CF83C, 0x120A00A1, 0x138E067C, 0x0F9A0915, 0x0AC91168, 0x0B660FF6, -0x050713F7, 0x042812BA, 0xFB541896, 0xF4AD11E3, 0xF7DA0C39, 0xF59A0ADC, 0xEE1F0C7D, 0xEE790839, -0xE8E10935, 0xEBA701CC, 0xE3C5FF71, 0xE20BFF1C, 0xE5A3F68E, 0xE7B9F777, 0xE465F183, 0xE4C5F044, -0xE97AE9E1, 0xF261DEEA, 0xF931E618, 0xF842E642, 0xF87AE382, 0x0254DFD0, 0x0828E606, 0x0041E548, -0x09D6E549, 0x0D4DE6B2, 0x13D6E525, 0x137EE896, 0x139FE760, 0x150EE72F, 0x1D26EE03, 0x2185EEC3, -0x1E9EF50A, 0x230FFE2B, 0x25E7FB78, 0x236EFEDA, 0x2568057E, 0x219D07D0, 0x1FC40DF0, 0x245A1145, -0x1A9F1A50, 0x121F18DC, 0x12EC1690, 0x113A17E8, 0x0B9521FE, 0x03B91CED, 0x039F182F, 0x043016B8, -0x01921A7F, 0xF0E0185E, 0xF2911590, 0xF3B90D97, 0xF51B13C8, 0xEDEE09C9, 0xF1E20676, 0xEE5601AB, -0xF29BF6BD, 0xFB42FA87, 0xFCB7FA70, 0xFF33FAF4, 0x0012FB34, 0x00DDFCED, 0x00C1F9F5, 0x03CFFD47, -0x008FFB21, 0x04C6FB1C, 0x096B0242, 0x060DFCDB, 0x0990FA70, 0x0C300019, 0x0B9B02BC, 0x107A04F2, -0x0D9706D4, 0x0DB70D86, 0x0B890D97, 0x0C040ACF, 0x0FB107D9, 0x0C9811C6, 0x09A80EE5, 0x0B671480, -0x08F81447, 0x040D171D, 0x02EF168E, 0x080E1797, 0x046713D5, 0xFF472002, 0xFC0E1D35, 0xFA7A1AC7, -0xF8CF1D17, 0xEE6B1C36, 0xECBA1997, 0xE85B1D31, 0xE7011420, 0xE9561017, 0xE3640C37, 0xE4D00777, -0xE8500791, 0xEF2804CB, 0xE64D03B7, 0xE81A06C9, 0xE6C90159, 0xE4D501EE, 0xEAE4013C, 0xE5470083, -0xE72AF94F, 0xE895F7FA, 0xEAD9F6E4, 0xEBC7F38D, 0xF2AFF8CE, 0xF783F396, 0xF75FF378, 0xF721F8FC, -0xF545F6EC, 0xF516F47D, 0xF95EF3C6, 0xFAF4F923, 0xF95AF34B, 0x000EEDA1, 0x028AF3E0, 0xFE4BF58A, -0x06CEF569, 0x09A5F3E7, 0x0C5EF7B9, 0x0E49FA3A, 0x08D104DC, 0x07AE01FA, 0x053304C6, 0x0793FF7F, -0x064E0A38, 0xFE440596, 0x022804BE, 0x0444085B, 0x0009081C, 0xFC4F0859, 0xF5520355, 0xF8370231, -0xFF57049E, 0xF4CE084C, 0xF1C40302, 0xEFFBFA02, 0xF2DDFF85, 0xF51AFAEA, 0xEDF3F836, 0xF187F74E, -0xF4BBFBEC, 0xF3C7F837, 0xF13FEDE7, 0xF442F02D, 0xFAC1EB66, 0x02EFEC28, 0xFFF4EC3F, 0x034FEF22, -0xFE8DEC54, 0x020EEA1B, 0xFF87EAAD, 0x07B0F70D, 0x0BDBEAFD, 0x174AE5CE, 0x0BD3EC35, 0x123DEBEA, -0x14C5EDA4, 0x1D68EDC1, 0x1DD5F6C2, 0x234EF8E7, 0x21CFFF87, 0x1C3E06F9, 0x1AE80156, 0x1CFF074E, -0x1FC80A34, 0x1B7A0F81, 0x19730E14, 0x166B179E, 0x192D16B9, 0x14DA191E, 0x0F651952, 0x106013F9, -0x09281BF0, 0x026A1DBC, 0xFC0E184F, 0xF8E5170C, 0xF9501453, 0xFB4D1B97, 0xF7BA1112, 0xF54612F6, -0xF6BE0AFB, 0xF4340C6C, 0xF20A101C, 0xF6E90782, 0xF3A406F3, 0xF7A60338, 0xF124065F, 0xF1CF0349, -0xF2E6FCD3, 0xF9EDFC96, 0xFB70FB8B, 0xFDF2FFA7, 0xFA4EF6E6, 0x0106F7EF, 0x0302F8FE, 0x0918F2CE, -0x0679F4DF, 0x11F2F8C7, 0x1427FD14, 0x0FA90664, 0x12F507C6, 0x137F07F9, 0x14DF09D3, 0x111D0C1D, -0x09280FE0, 0x0D2F13A0, 0x0FDA1274, 0x107419D8, 0x0D641A94, 0x041F1E7C, 0x0857220F, 0x018D2601, -0xF96E2E93, 0xEEED22F9, 0xEDF122C5, 0xE8E612A6, 0xED9A1685, 0xEBF410E2, 0xE39A0D5D, 0xE6820B09, -0xE70A0790, 0xE786048D, 0xE3C106EA, 0xE5F5FD26, 0xE155FD58, 0xEC17FDE0, 0xE941FBA3, 0xE938F410, -0xEA95F9CB, 0xEE03F211, 0xF88EF467, 0xF46DF64D, 0xF972EEF5, 0xFAC0F4F3, 0xF819F2F9, 0xFC7CEFFC, -0x008EF24C, 0x0568F104, 0x02DDF835, 0x0208F642, 0x017BFDA3, 0x0474FB4B, 0x03D100E0, 0xFE6DF9C6, -0x0602FE30, 0x035BFC25, 0x07A7F9AE, 0x0906083A, 0x0AE90969, 0x057C06F6, 0xFFA60ABF, 0x002609A9, -0xFE5A114B, 0xF8170B67, 0xF5750BD5, 0xF3EB0660, 0xEF4E04B6, 0xF0C201DD, 0xEFAB0027, 0xF265FBEA, -0xEEA2FF23, 0xEFA3FBDC, 0xF3E00259, 0xECFE0201, 0xEA3DF558, 0xF2ABF1E7, 0xFA0CEF15, 0xEF19F241, -0xF26BEE10, 0xF660E56C, 0xF8FDE7BF, 0x0149E38A, 0x0160E856, 0x032AED98, 0x0BCDEFE1, 0x0B31F1B6, -0x05FAF194, 0x08B7EB2E, 0x13ADED8E, 0x0EFAF25E, 0x1112F34E, 0x134DEFE4, 0x1554F2FC, 0x14DFF67F, -0x1989F8D3, 0x19F6FBDC, 0x161BFEE2, 0x192502C7, 0x1A6E076C, 0x1B0205ED, 0x137C0620, 0x16DE08BE, -0x1678139A, 0x0E0715E8, 0x0E6A1705, 0x0CDA1335, 0x0AEF0DA6, 0x0D3713AC, 0x08121764, 0x035819FC, -0xFE1E19C1, 0xFFC818D2, 0xF6EE18A2, 0xF3F21190, 0xF04413AA, 0xF1881017, 0xEF15071B, 0xE9C2003D, -0xF238003E, 0xF4330088, 0xF654FD53, 0xF653FCE9, 0xFA26F87E, 0x0008F993, 0xF9F2F6C6, 0xF716FC2E, -0xFE6BF20F, 0xFF55F1CB, 0x015FF741, 0x01F7F6DF, 0x063FF0E3, 0x0C6FF8E3, 0x139FF893, 0x15FE01E1, -0x1515FF14, 0x17B90109, 0x16B103F8, 0x17720735, 0x17280831, 0x1C630EA2, 0x1678108A, 0x13EA11B6, -0x129517E7, 0x11771F01, 0x0C8622CC, 0x063120C7, 0x057422A9, 0x0463288E, 0xFBCD29D0, 0xF4CF29E9, -0xF0DE2ACD, 0xECAF2571, 0xE7562335, 0xE3411DBF, 0xD8AA1B67, 0xDCF812A2, 0xD8030FE6, 0xD69B0979, -0xDB4E011D, 0xE081FF40, 0xDA72FD2C, 0xDF78FE51, 0xE178F4D8, 0xE573F211, 0xE350F16F, 0xE4FAED2A, -0xE6A0E727, 0xF0B0E5F5, 0xF297E26A, 0xFA83EA3C, 0xFA17E8A5, 0xFB6EDF78, 0x04A7E4EC, 0x0D13EF6A, -0x0885F3BF, 0x0A28F2F3, 0x1081F475, 0x04D3F6EB, 0x0BBAFB4D, 0x0696FAB0, 0x0EBBFCFE, 0x109BFFB7, -0x0E050309, 0x0C9D0584, 0x0B78091B, 0x0A490DEC, 0x04F90EBB, 0x02F41577, 0xFD1213E8, 0xF7AF1205, -0xF9660EC2, 0xF14D1376, 0xEBAF1039, 0xF12A0BAF, 0xF1240BF5, 0xEA9C0C10, 0xE67D0108, 0xE61DFFE0, -0xFF6313FA, 0xFF541A0C, 0xFED818E8, 0xF9B71169, 0xFF5A1691, 0xFA5D1C69, 0xF88118F8, 0xF9501C79, -0xF2B218C4, 0xEF0B1999, 0xEC9D185D, 0xECB91370, 0xE8131882, 0xE4660F2B, 0xEA8F0D4A, 0xEEFC0A0F, -0xE46108A4, 0xE7CA0C1C, 0xE7610475, 0xEAD8F989, 0xF00AFC14, 0xF00AFD85, 0xF37FFC37, 0xF543F69D, -0x000DF6F2, 0xFB6BFA94, 0xFFCEFFC8, 0xFCE102E7, 0xFEB9034C, 0x03CC0773, 0xFC0E047F, 0xFF830297, -0x01B00441, 0xFB5E079C, 0x00830C93, 0xFBE90C09, 0xFD860DE7, 0xF6CD092C, 0xF1D40959, 0xFC500AA1, -0xF2FB074B, 0xF701097F, 0xF5B3094C, 0xF18606EE, 0xF6C30095, 0xF7F30683, 0xF9740753, 0xF2080724, -0xEE620B28, 0xEE67067D, 0xEFDE0468, 0xEB6B070F, 0xEA5E015E, 0xF2420379, 0xE7290345, 0xE41AFEEC, -0xE8E3F837, 0xE2B8F621, 0xEB51F18E, 0xEA56EE19, 0xEE5FEF06, 0xE8ECE76D, 0xF51AE62D, 0xFB4DE82C, -0xFDE3E231, 0x009EE06B, 0x09F0E6C7, 0x0B03E834, 0x0DF0EDDA, 0x0F7DEB2C, 0x179BF08C, 0x19DCF040, -0x1AAAFA4F, 0x13500057, 0x15E7FFE8, 0x1A0405A5, 0x1760083F, 0x141F0C97, 0x0F250A66, 0x0EB70BE6, -0x05220F29, 0x0579101D, 0x035B1035, 0x047F0A00, 0xFFBF0B0F, 0xFAF707F4, 0x00840783, 0x01810772, -0x001306D0, 0xFB8307B8, 0xF992040E, 0xFC9A0766, 0x02120914, 0xFF2002D1, 0xFA1A04F4, 0xFC8AFE4A, -0xFDF300D0, 0xFED604AB, 0x000005B3, 0xFDA4FFB8, 0xFC130510, 0x0117F9C9, 0x025AFDF7, 0x032BFB79, -0x0466FF7A, 0x09DDFD7C, 0x09F60055, 0x0921FCE1, 0x07B9FD95, 0x0BE3FCC2, 0x09510037, 0x1236F97D, -0x165302FB, 0x16C509B7, 0x15780C34, 0x13D1067C, 0x187E0C18, 0x13CA153F, 0x12F01B86, 0x07E92089, -0x08B01B0C, 0x07C61E57, 0x00D21F88, 0xFA5C1D5D, 0xFBF01A3B, 0xFC021632, 0xF617196D, 0xF1D21367, -0xF122162B, 0xF34A1126, 0xEF80105A, 0xF0640C08, 0xF1600C28, 0xF4E40C23, 0xF4920AE0, 0xF0E6077A, -0xF74B0407, 0xFED40C13, 0xFA7B0DAE, 0xF439165A, 0xF2040CB4, 0xF7F70A43, 0xFB121109, 0xF9800DF1, -0xEF041318, 0xEFCA0CDC, 0xF01409C4, 0xECD608C2, 0xEF3607DA, 0xF30608A4, 0xF2DB0447, 0xF2E9FF9D, -0xF47C0186, 0xF2B6FEEB, 0xF1360154, 0xFA320176, 0xFD3CFF20, 0xFAE2FB17, 0xFDEF07CE, 0xFB51061C, -0xFA5803FA, 0xFDD7056A, 0xFD0B0437, 0xFF490496, 0xFDCE05BB, 0xFBCE092E, 0xFB25037A, 0xF92509AE, -0xF9880E77, 0xFDC3063A, 0xF5F805A4, 0xF4E203D8, 0xF89E05F9, 0xF38F0712, 0xF1E6083C, 0xEECB049B, -0xEEE301B1, 0xFAFCFF64, 0xF62401EE, 0xF4B60621, 0xF5A90067, 0xF730FE5F, 0xF536F9F5, 0xF734FF49, -0xF5720333, 0xF455FE9E, 0xEE7BFD8F, 0xFB93FAD9, 0xF907F8DA, 0xF2DFFD34, 0xF107F8EB, 0xF669F97B, -0xF7B6F440, 0xF66DF65E, 0xF85CF30E, 0xF324ECAE, 0xFC08EDD6, 0x03AFF01C, 0x031AF494, 0x02F9F1BD, -0x0882EEEA, 0x0A48F37F, 0x0E95F05D, 0x1427F172, 0x0F930021, 0x0D15FF92, 0x126FF9BF, 0x1250FDB1, -0x1345000F, 0x13CF089A, 0x0F5C0B8B, 0x084C0D30, 0x0CB00C42, 0x0C851158, 0xFFE11339, 0x04470CD8, -0x05250F61, 0x020B11CC, 0xFC1D0E7B, 0xF7C20F7D, 0x006A0D36, 0xFBE4045C, 0xFE9C0ADB, 0x01F91124, -0xFA370D8F, 0xF76C021C, 0xFAC2FF19, 0xFBF40159, 0x03E9FEC9, 0xFE660457, 0xF6E90534, 0xFE27FE71, -0x003400D1, 0x0299FD90, 0x00640296, 0xFE7EFF61, 0x0043FDF3, 0x02C1F9CA, 0x0C090027, 0x0B9E05D5, -0x0CB4FF5A, 0x0CE80365, 0x0F950154, 0x150D0915, 0x141608A4, 0x0B8F0B40, 0x0C791097, 0x12BE0B35, -0x0D4B1035, 0x09551441, 0x030B1919, 0x04D61950, 0x05D8172A, 0xFE611E67, 0xFF821B9C, 0xFB351C78, -0xFA341B0D, 0xF7E717AA, 0xF44D106F, 0xF3AE17CB, 0xED841049, 0xEC74129F, 0xF0690DB1, 0xF5150A62, -0xF8170D20, 0xF18C0E10, 0xF13B0AC4, 0xF2AD0471, 0xF63406C0, 0xF3510B07, 0xF44D0978, 0xF1580C12, -0xF76F0479, 0xF4FE06D7, 0xF2AE068E, 0xEB210B8E, 0xECCF02DE, 0xF241040E, 0xF7AE01C0, 0xF74601A9, -0xF927FF3B, 0xFC7701BF, 0xF713FFF6, 0xFF2C0018, 0xFB86FFC5, 0x02050098, 0xFB390910, 0xF7960A18, -0xFC6405D0, 0xF8C106BC, 0xFB7608D3, 0xFAA80C0D, 0xF5A10FE4, 0xF53C10CC, 0xF19C1027, 0xFA870F04, -0xEC2A0FC4, 0xE99D06A1, 0xEB8206CD, 0xE1C6099F, 0xE73C02B4, 0xE85BFCB0, 0xE382FCE0, 0xEB57FB6C, -0xECF2FC0B, 0xEF0AF7C7, 0xF146F6F1, 0xEF09F4AE, 0xEE80F2AF, 0xF7C5EEBE, 0xFB9CF2DD, 0xFC8BF882, -0xF885F593, 0xF95FF579, 0xF7B0F8CE, 0xFEB8F949, 0xF7C8FA59, 0xFAF7F582, 0xFF01F027, 0xFE94F4D0, -0xFD68F161, 0x0215F177, 0x02BFEDA0, 0x042AF11B, 0x0624EDCF, 0x0379F737, 0x0481EE7D, 0x0575EF18, -0x102EF5F4, 0x0EEEF09B, 0x10EAFC93, 0x0D9CFA9C, 0x123CFBD1, 0x0F8903C0, 0x0F600304, 0x1479091D, -0x0D920332, 0x0B810B84, 0x052F0C6E, 0x05910696, 0x0AA40789, 0x0BC005DA, 0x04C109D4, 0x016D09C4, -0xFFE80CE9, 0xFD4D0866, 0x077406D5, 0x02C704D5, 0xFC890315, 0x00810277, 0x0386FE1C, 0x027402AA, -0x022F0208, 0x0472018B, 0x03660832, 0x06B9FDBB, 0x070F0520, 0x0603063E, 0x07C2034F, 0x05BFFF30, -0x07E40251, 0x0A0503B1, 0x0884FE1E, 0x0A170594, 0x0B1301C2, 0x035505DF, 0x0C6001DF, 0x0B400326, -0x0805006F, 0x0D86003E, 0x134E05C4, 0x11050A47, 0x0FEF0E5E, 0x11B61060, 0x12A9161B, 0x105C1356, -0x11D91857, 0x13C11FCE, 0x0A74219D, 0x058A1B28, 0x06341916, 0x087121E9, 0x09DC2079, 0xFF6E23FB, -0xF2321C03, 0xF3A91A28, 0xF15E2014, 0xF2E12175, 0xEDC61CAB, 0xE3B31575, 0xEE6A163F, 0xE7421668, -0xE56D12CF, 0xE3C60D25, 0xEDF30D93, 0xEE4602E4, 0xE9F20645, 0xEEBB0171, 0xED6CFE29, 0xEF030236, -0xF1BBFFB3, 0xF581F904, 0xF570FBCE, 0xFB4DFCEF, 0xF59205C3, 0xF9DFFC49, 0xF99F0060, 0xFC1E0001, -0x0C1E04EE, 0x0A19025F, 0x06E70439, 0x0ACD0567, 0x0B5805A4, 0x0B990CF4, 0x078A13EA, 0xFDC50C9F, -0x04090A99, 0x06940977, 0x01A70D56, 0xF87C0D0E, 0xFB5B0AC5, 0xF90A0BB8, 0xF367061E, 0xF1880544, -0xF218FE11, 0x01C000B8, 0xFDBD021F, 0xF96506DE, 0xF758FE03, 0xFB61F604, 0xFC8FF9FF, 0xFF330218, -0x01E3FE24, 0x0199FADE, 0x0604FBDD, 0x003EFD2C, 0x05C8FA41, 0x06A9FC04, 0x0894FB77, 0x07AAFE5A, -0x0B2803B4, 0x060B048F, 0x0CD60201, 0x081A02B6, 0x073E09C6, 0x08F308CF, 0x08DD085B, 0x0A190B32, -0x065B0C19, 0x0A0207F0, 0x09C50AF6, 0x09571054, 0x04C716D1, 0x00FC14C4, 0x03F210CB, 0x01CF1048, -0x00021A8F, 0xF61418DA, 0xF6DD17BC, 0xF31615D1, 0xEFD61563, 0xF48613EB, 0xF1310D75, 0xEB640E34, -0xEB320E90, 0xEE3C04A9, 0xE8E307CC, 0xEAD9085F, 0xE3C20658, 0xE9610031, 0xE799FCFA, 0xE62CFEF9, -0xE947FBCF, 0xF1F3F4CE, 0xEEEBF59E, 0xF3BBF38C, 0xF31CF13B, 0xF3FCF085, 0xF629F572, 0xFDFEF3C1, -0xFC33F47F, 0xF89CF46A, 0xF9ECF821, 0xFB5BF30D, 0xFF5BF820, 0x00EAFA94, 0xFFDB0188, 0x02A9FC82, -0x02C0FAF2, 0xFF950069, 0x06D6FC2F, 0x031FFF9B, 0x07610689, 0xF9710D13, 0xF7F006E5, 0xF9780698, -0xFF74049B, 0xF31B056E, 0xF5F3080F, 0xF67401A3, 0xF323FE99, 0xF058FEC1, 0xF5D40167, 0xF465FDA6, -0xF79DFB4B, 0xFAB7FE59, 0xF317FD78, 0xF0F6FA44, 0xEF27F4E8, 0xF756F297, 0xF706F36A, 0xF584F683, -0xF410F186, 0xF73FF462, 0xFFBAEA40, 0xFB68ECD6, 0xFD67F19D, 0xFDC5ED46, 0x0108F3E1, 0xFF2DF92D, -0xFA9DF0D0, 0xFFF6F413, 0x067DECA6, 0x0720F5B8, 0x0DB4F057, 0x0682F07C, 0x0E24F01B, 0x0E4FF4DC, -0x0BF2F50B, 0x111AF404, 0x139DF90A, 0x0DC2FBB6, 0x109EFDDD, 0x101BFBF9, 0x0F7B03C7, 0x0FFB06BA, -0x104A0726, 0x0D8E0720, 0x0CBC0111, 0x07FE053F, 0x0715089C, 0x0C7F0B66, 0x0AAB0C6E, 0x00C209F7, -0x04380774, 0x0B030AC1, 0x04A20C07, 0x054B0A89, 0xFFC40A72, 0xFF3808DE, 0x0082077F, 0x031700E8, -0xFF040282, 0xFBF00A7F, 0xFB3605A4, 0xF83006A2, 0xFD4D06B8, 0xFB230740, 0xF99B0851, 0xFEEC0529, -0xFB790634, 0xF7A3FF51, 0xF934005E, 0xFC79FB92, 0xFF700284, 0xFCE0019D, 0xFF3AFA7E, 0x0651FAC0, -0x0482FF0A, 0x04DC0139, 0x06A6FC3C, 0x09ADFF6F, 0x0E7A054E, 0x022E0733, 0x0DE90038, 0x0FDF076E, -0x0E050DEF, 0x0CB41543, 0x06EF161E, 0xFF641777, 0x058115C2, 0x01AF1C06, 0xFBFE1C98, 0xFBCA1850, -0xF845157F, 0xF15915E3, 0xF06C167D, 0xEDB513ED, 0xEED71361, 0xF00A0D9D, 0xEB450EC6, 0xEAFA0CA7, -0xE887077C, 0xEDEB0606, 0xEE92028C, 0xED050605, 0xEDB1057F, 0xEE7E0581, 0xE9E3068D, 0xED5FF90A, -0xEA0AFD54, 0xEE84FF91, 0xEE69FE1C, 0xECD7FAA6, 0xEC16F798, 0xEFBCF605, 0xF3A8F9B9, 0xF37AF92F, -0xF1C0F65B, 0xF3E3F37C, 0xEF5BFA70, 0xF7ACF111, 0xF1E9EF7C, 0xF692EDF7, 0xFAFFEEAD, 0xFE84EAC4, -0x014AF3C3, 0xFDEFF769, 0x0721F5C9, 0x024EF290, 0x03A9F9F3, 0x00C2020E, 0xF9D500B5, 0xFEBCFF79, -0xFCB3088D, 0xF93B0752, 0xF9640306, 0xF3A60311, 0xF5AC00EB, 0xF65CFFDB, 0xF6EBFF67, 0xF48C0329, -0xF584FCC1, 0xEFBFFC76, 0xF159F83C, 0xF446F5B8, 0xF3ADF55A, 0xF42AF3DB, 0xF8C3F7AA, 0xF6D7F8C0, -0xF9E3F36D, 0xF6C4F166, 0xF957F356, 0xFFCEF516, 0xFDAAF3BA, 0xF9D5F48C, 0x013EF0DA, 0x0301F145, -0xFDF9F264, 0x02D0F4D4, 0x02C5F35B, 0x023FF4BC, 0x066EF1D0, 0x063CEBF5, 0x0684ED5A, 0x0AC0F465, -0x0F2DF1D1, 0x0F5CF3CD, 0x0ACCF68D, 0x1305FC13, 0x138900BD, 0x12B603C9, 0x0AE50561, 0x0B28047D, -0x0D6C03AB, 0x0AA00945, 0x0B1C0BA4, 0x0605105B, 0x06090B4A, 0x039A136C, 0xFE3D0B3D, 0xFC190EF2, -0xF87E097D, 0xFAEF07AE, 0xF3F90858, 0xEE140881, 0xF132014F, 0xF7A003CB, 0xF6C101FA, 0xF1540172, -0xF908FCA9, 0xF577F6A5, 0xFD2FF597, 0xFDEEFCE3, 0xF8BCF8C1, 0xFC97F982, 0xF94BF30A, 0xFBC3F7FD, -0xFB6DF6E8, 0x0177F3BA, 0x036BF366, 0x042CFB26, 0x00D8FA96, 0x0197F395, 0x07FAF61C, 0x0FB2FCB0, -0x0C7CFA6A, 0x0D99FC2C, 0x085EFDCA, 0x0B99000F, 0x0B1E01F8, 0x0AA20645, 0x0B9806F6, 0x09BC0B9E, -0x05470A5B, 0x01810A9B, 0x07F50966, 0x038E0561, 0x06650E04, 0x03491089, 0xFE2A1020, 0xF8E60C7E, -0xF97110A8, 0xF6590FFB, 0xF35C0A99, 0xF0F20CBA, 0xEB820724, 0xEE6204A7, 0xEC3EFCF7, 0xF580FF55, -0xF691FD75, 0xF028FD1F, 0xF36D0020, 0xF3F2F71F, 0xF785F9D3, 0xF7E3F987, 0xF754F957, 0xFC51F932, -0xFA2DFCD7, 0xF7E8FB34, 0xFB0CF1FD, 0x0167F8A6, 0xFDCBFE0D, 0xFEC5FAA6, 0x01F7FE1F, 0xFA2EF859, -0xFE76F8E6, 0x041DFEB8, 0x0023FBBF, 0x0079FE5B, 0x0593FB38, 0x0557FBD7, 0x0224FA5F, 0x05B8FDB7, -0x089E0309, 0x07FE0131, 0x07FD090F, 0x04C90324, 0x075505A7, 0x0BA10AE6, 0x02FA0BAB, 0xFDE50E89, -0xFFF80BBC, 0xF9F20DA7, 0xFAF90DC9, 0xF8640A7A, 0xF92F0E00, 0xF5740ACD, 0xF1120F17, 0xEBCA067E, -0xEEBF00D5, 0xEE4E05EB, 0xF0E9FDEF, 0xEE6504C5, 0xECF0FAD3, 0xF66CFAD5, 0xEDC0F4A7, 0xF273F4E9, -0xEFA2F545, 0xF578F562, 0xF942F379, 0xF95FF490, 0xF55DF462, 0xFEB8ED72, 0x0121F5C5, 0x01AAF8CE, -0xFD78F957, 0xF6DFF2ED, 0xF969F142, 0xFF6DF1A8, 0x0810F784, 0x03A2F957, 0x0983F64A, 0x0B8DF51D, -0x0868F2E1, 0x0D37F5F5, 0x0F01F588, 0x0B32016F, 0x108C02BA, 0x0EEA054C, 0x0D570A27, 0x10B3036A, -0x12A50AB5, 0x0DE20FC2, 0x05B31421, 0x07EC14D3, 0x032C125F, 0xFEF8111C, 0xF82811C6, 0xF8670CD5, -0xF96C0D76, 0xF1400D9B, 0xF1EC07C5, 0xEC7D0522, 0xEA3C02F1, 0xEB040569, 0xEA95FB0E, 0xEC76FAC0, -0xF0E6F7EA, 0xF4FBF785, 0xFE1AF489, 0x0194F342, 0xFFEAFA85, 0x0084F2A3, 0xFE99FA9D, 0x03B1FAF2 - -output0 = -0xFBF20264, 0xFB14007E, 0xFB2CFE4A, 0xFC4DFC44, 0xFE49FAE0, 0x00C8FA6A, 0x035DFB04, 0x05A0FC9A, -0x073DFEFC, 0x07FE01E1, 0x07C604FB, 0x069407F9, 0x04780A90, 0x019E0C78, 0xFE460D7C, 0xFAC30D7F, -0xF76D0C87, 0xF4920ABC, 0xF2660861, 0xF0F705C1, 0xF032031B, 0xEFF40096, 0xF018FE3A, 0xF089FC01, -0xF149F9E3, 0xF265F7E6, 0xF3E8F626, 0xF5C7F4CE, 0xF7DFF402, 0xF9F6F3D2, 0xFBD1F42E, 0xFD45F4EA, -0xFE45F5CF, 0xFEE4F6AE, 0xFF40F774, 0xFF73F824, 0xFF81F8CD, 0xFF55F976, 0xFED3FA07, 0xFDF1FA4E, -0xFCC8FA07, 0xFBA1F900, 0xFAE5F731, 0xFAFDF4D4, 0xFC2CF259, 0xFE71F049, 0x0182EF1F, 0x04E1EF1F, -0x0802F040, 0x0A77F239, 0x0C0FF499, 0x0CDBF6F3, 0x0D1EF903, 0x0D27FABC, 0x0D31FC43, 0x0D47FDD3, -0x0D49FF9B, 0x0CF801A7, 0x0C1903D5, 0x0A8B05DE, 0x0859076F, 0x05BB0845, 0x0302083E, 0x00840762, -0xFE8805DC, 0xFD3703EE, 0xFC9C01DD, 0xFCA7FFE4, 0xFD36FE2F, 0xFE24FCD6, 0xFF49FBE1, 0x0088FB4C, -0x01CAFB0E, 0x0300FB1B, 0x0422FB6D, 0x0525FBFF, 0x05FBFCCF, 0x0690FDD6, 0x06CCFF02, 0x069B002F, -0x05FB012F, 0x050101CC, 0x03E101E0, 0x02E0015D, 0x0248005E, 0x024CFF21, 0x02F8FDF7, 0x0431FD2C, -0x05B5FCF1, 0x073AFD4B, 0x0886FE18, 0x0980FF22, 0x0A390037, 0x0AD70143, 0x0B84025A, 0x0C4F03AA, -0x0D1C056B, 0x0DAA07BD, 0x0DA30A96, 0x0CBC0DB9, 0x0ACD10C4, 0x07E61348, 0x044714E9, 0x00511572, -0xFC7014DE, 0xF9021355, 0xF6431119, 0xF4510E76, 0xF32C0BB2, 0xF2BC0908, 0xF2E306A0, 0xF3790495, -0xF45A02F3, 0xF55F01BC, 0xF66B00E8, 0xF7650064, 0xF842001F, 0xF8FC0006, 0xF993000F, 0xFA080034, -0xFA550071, 0xFA7100BD, 0xFA510108, 0xF9F20138, 0xF9620130, 0xF8BA00D8, 0xF8210028, 0xF7BEFF2B, -0xF7AEFDFE, 0xF7FEFCC6, 0xF8A7FBA6, 0xF998FAB8, 0xFABCFA0A, 0xFBFFF99E, 0xFD56F976, 0xFEBAF997, -0x001FFA08, 0x0171FAD5, 0x0292FBFE, 0x0363FD7A, 0x03C6FF2E, 0x03AC00F2, 0x0316029D, 0x021A040D, -0x00D2052C, 0xFF5E05F4, 0xFDD4066B, 0xFC410698, 0xFAAA0684, 0xF911062E, 0xF77A0590, 0xF5EE04A2, -0xF47F035C, 0xF34601BE, 0xF25DFFCF, 0xF1DFFDA3, 0xF1E2FB57, 0xF270F913, 0xF385F706, 0xF508F55A, -0xF6CEF430, 0xF8A0F392, 0xFA46F370, 0xFB95F3A0, 0xFC80F3EA, 0xFD15F416, 0xFD7EF3FE, 0xFDF2F39A, -0xFEA0F300, 0xFFA2F25B, 0x00F7F1D9, 0x0284F19F, 0x0426F1B8, 0x05BEF21D, 0x073BF2BA, 0x08A0F37E, -0x09F7F463, 0x0B47F575, 0x0C8AF6C5, 0x0DAAF860, 0x0E85FA45, 0x0EFBFC5D, 0x0EFEFE84, 0x0E910090, -0x0DCB0263, 0x0CCE03F1, 0x0BB50540, 0x0A8E0662, 0x09550767, 0x07FC0857, 0x066F0925, 0x04A809B8, -0x02AF09F1, 0x009E09B4, 0xFE9D08F3, 0xFCDA07B2, 0xFB7D0607, 0xFAA70419, 0xFA650218, 0xFAB00036, -0xFB6FFE9F, 0xFC79FD70, 0xFD9BFCB1, 0xFEA8FC50, 0xFF83FC29, 0x0026FC0E, 0x00A8FBD9, 0x0132FB77, -0x01F3FAF7, 0x030AFA7F, 0x0478FA47, 0x061DFA82, 0x07BEFB48, 0x091CFC90, 0x0A05FE2E, 0x0A64FFE3, -0x0A4C0175, 0x09E802BB, 0x096D03AE, 0x09050466, 0x08C40507, 0x08A305B8, 0x08870690, 0x08520790, -0x07EA08A9, 0x074809C3, 0x066E0ACA, 0x05680BB0, 0x04400C72, 0x02FA0D0F, 0x01970D84, 0x00170DC5, -0xFE840DC3, 0xFCEF0D73, 0xFB770CCF, 0xFA380BE6, 0xF94A0AD1, 0xF8B309B8, 0xF86408BE, 0xF83E07FB, -0xF8190771, 0xF7D4070D, 0xF75D06A9, 0xF6BB061E, 0xF60F054A, 0xF5850426, 0xF54E02C4, 0xF58B0151, -0xF6400009, 0xF74EFF25, 0xF87EFEC8, 0xF989FEF2, 0xFA31FF7F, 0xFA55002F, 0xF9F700BA, 0xF93F00E5, -0xF86A0093, 0xF7BAFFC9, 0xF760FEAB, 0xF771FD69, 0xF7EBFC33, 0xF8B8FB28, 0xF9C2FA58, 0xFAF7F9C8, -0xFC4EF97D, 0xFDBCF983, 0xFF31F9EB, 0x008BFAC2, 0x019DFC04, 0x023CFD92, 0x024EFF39, 0x01D700BF, -0x00FA01F1, 0xFFED02BD, 0xFEDF0330, 0xFDEB036E, 0xFD09039D, 0xFC1803CE, 0xFAF503F0, 0xF99003D7, -0xF7FE034B, 0xF677022B, 0xF549007A, 0xF4B1FE68, 0xF4CEFC42, 0xF58FFA56, 0xF6C0F8D9, 0xF821F7DC, -0xF97EF749, 0xFAC2F702, 0xFBEFF6EC, 0xFD11F704, 0xFE26F75C, 0xFF11F803, 0xFFA1F8F0, 0xFFAAF9F6, -0xFF1EFAC5, 0xFE22FB0A, 0xFD11FA8D, 0xFC5AF955, 0xFC5DF7AA, 0xFD3FF600, 0xFEDDF4CE, 0x00D7F460, -0x02B7F4B8, 0x041FF594, 0x04F3F68F, 0x055CF74B, 0x05B5F7A1, 0x0658F7B0, 0x0775F7CD, 0x08F9F85F, -0x0A8DF9AA, 0x0BC0FBB3, 0x0C30FE37, 0x0BB200C7, 0x0A6002F3, 0x088B0471, 0x06920532, 0x04C2055C, -0x033B052B, 0x01ED04D4, 0x00B50465, 0xFF7803C8, 0xFE3C02D6, 0xFD2E016F, 0xFC8FFF97, 0xFC9CFD80, -0xFD6FFB7A, 0xFEF1F9DB, 0x00E6F8E0, 0x02FBF89D, 0x04E7F8FE, 0x067DF9D2, 0x07B1FAE2, 0x0890FC07, -0x0933FD2F, 0x09A9FE5B, 0x09F7FF90, 0x0A1500D1, 0x09FA0214, 0x09A3034A, 0x09140462, 0x08570550, -0x077A060B, 0x06860690, 0x058706D7, 0x048C06D5, 0x03B20687, 0x031D05F7, 0x02F20547, 0x034004AF, -0x03F50474, 0x04D604C8, 0x058F05BC, 0x05CA072B, 0x055008C3, 0x04210A1D, 0x02790AE4, 0x00BA0AF0, -0xFF480A5C, 0xFE660976, 0xFE1A08A2, 0xFE2D0831, 0xFE440842, 0xFE0808B2, 0xFD470934, 0xFC0D096B, -0xFA970917, 0xF93E0825, 0xF85106BC, 0xF7FB0524, 0xF83403AC, 0xF8D0028B, 0xF99201D3, 0xFA480173, -0xFAD90149, 0xFB450135, 0xFB9C0127, 0xFBE9011F, 0xFC2F0125, 0xFC65013D, 0xFC80015E, 0xFC7B0178, -0xFC610179, 0xFC480159, 0xFC460120, 0xFC6400E6, 0xFC9D00BF, 0xFCDF00B8, 0xFD1300CE, 0xFD3000F0, -0xFD3C010E, 0xFD440123, 0xFD56013C, 0xFD6F0170, 0xFD7101D1, 0xFD340255, 0xFC9502D5, 0xFB8E030E, -0xFA4702BB, 0xF91401B8, 0xF8580013, 0xF865FE16, 0xF95AFC33, 0xFB13FADD, 0xFD30FA65, 0xFF36FAD7, -0xFA04FDBF, 0xFB68FC07, 0xFD74FB2D, 0xFF99FB6A, 0x0142FC9D, 0x0208FE5D, 0x01CA001D, 0x00B8015B, -0xFF3801C5, 0xFDC50149, 0xFCCE0013, 0xFC98FE79, 0xFD3AFCE6, 0xFE96FBBE, 0x0063FB4E, 0x023EFBBA, -0x03B7FCF1, 0x0471FEAC, 0x043B0077, 0x032801CC, 0x01960238, 0x001E018E, 0xFF66FFFB, 0xFFE8FE10, -0x01BBFC92, 0x047CFC42, 0x0766FD91, 0x0987006D, 0x0A19043C, 0x08C6080B, 0x05CF0ADD, 0x01F30C00, -0xFE2E0B49, 0xFB63091F, 0xFA0E0647, 0xFA24039A, 0xFB2D01B4, 0xFC8000C4, 0xFD8B008F, 0xFE12009B, -0xFE340072, 0xFE55FFDC, 0xFEDFFEF6, 0x000DFE1F, 0x01C8FDCA, 0x03B8FE45, 0x0561FF97, 0x065B017E, -0x067C0389, 0x05DD0549, 0x04CF0677, 0x03B2070A, 0x02D2072C, 0x024B0722, 0x020E072B, 0x01EF0768, -0x01BC07D7, 0x01570859, 0x00B908C7, 0xFFF608FE, 0xFF3008EC, 0xFE900894, 0xFE3A0809, 0xFE4A0775, -0xFEC9070D, 0xFFA30713, 0x00A007BF, 0x0165092D, 0x01850B45, 0x009E0DB0, 0xFE850FE1, 0xFB601136, -0xF7AE112F, 0xF42D0F9D, 0xF1A50CC1, 0xF09C0943, 0xF12B0601, 0xF2EC03C4, 0xF51702FA, 0xF6C8038B, -0xF75304E5, 0xF6840629, 0xF4AF0687, 0xF2930584, 0xF116032E, 0xF0ED0012, 0xF25AFD0F, 0xF51DFB01, -0xF884FA7C, 0xFBAFFB9C, 0xFDD6FE03, 0xFE8500FF, 0xFDBA03C5, 0xFBD005B2, 0xF9630672, 0xF7100608, -0xF55004C4, 0xF45B0317, 0xF424016F, 0xF4710014, 0xF4F7FF1F, 0xF578FE76, 0xF5DAFDEB, 0xF62DFD4F, -0xF69CFC90, 0xF759FBC3, 0xF87DFB23, 0xF9F3FAF6, 0xFB78FB72, 0xFCAAFC9C, 0xFD2CFE3D, 0xFCCDFFE6, -0xFBA3011B, 0xFA0E017E, 0xF89800F8, 0xF7C2FFCF, 0xF7C9FE88, 0xF88AFDBC, 0xF985FDD0, 0xFA0BFEC3, -0xF989001E, 0xF7CF011E, 0xF53200F7, 0xF27BFF2E, 0xF0A6FBD0, 0xF088F781, 0xF279F346, 0xF633F034, -0xFAE1EF0D, 0xFF69EFFF, 0x02CAF29C, 0x0470F602, 0x0458F934, 0x0304FB67, 0x013EFC43, 0xFFCDFBEE, -0xFF32FAE8, 0xFF8BF9D2, 0x0099F934, 0x01EBF950, 0x0307FA1A, 0x0399FB4D, 0x0388FC86, 0x02EEFD6D, -0x0211FDC8, 0x0141FD8A, 0x00CCFCCF, 0x00E5FBD3, 0x01A0FAE4, 0x02E3FA50, 0x0479FA4F, 0x0612FAF9, -0x075FFC3A, 0x0827FDDC, 0x0857FF94, 0x0807011E, 0x076D0256, 0x06BE033F, 0x061B03FC, 0x057E04B6, -0x04BD057E, 0x03AD063A, 0x023A06AB, 0x00880684, 0xFEEF0595, 0xFDE403EE, 0xFDC801E7, 0xFEBD000B, -0x008FFEE9, 0x02BBFEDF, 0x049FFFEE, 0x05B401BF, 0x05BD03BC, 0x04DE054B, 0x038C0608, 0x025C05E7, -0x01C70534, 0x02020474, 0x02E8042A, 0x041004AD, 0x04F20607, 0x051B07F4, 0x044D09FB, 0x02950B97, -0x00420C5C, 0xFDCF0C15, 0xFBC00ACE, 0xFA8408D3, 0xFA56069D, 0xFB3404B0, 0xFCDA0382, 0xFED10358, -0x00940433, 0x01AF05D0, 0x01E107BD, 0x01360978, 0xFFF90AA3, 0xFE9A0B1D, 0xFD7E0B10, 0xFCD90AD5, -0xFC950ACE, 0xFC630B33, 0xFBDF0BF9, 0xFAC80CD0, 0xF91D0D4B, 0xF72D0D13, 0xF56E0C17, 0xF44D0A95, -0xF3F60908, 0xF43D07EF, 0xF4AA078D, 0xF4B107CC, 0xF3F4083A, 0xF26F083B, 0xF086074C, 0xEEE30541, -0xEE32025F, 0xEED8FF47, 0xF0CDFCC2, 0xF397FB71, 0xF673FB97, 0xF89BFD01, 0xF986FF1B, 0xF9120122, -0xF78A0262, 0xF587026F, 0xF3BE013E, 0xF2CCFF21, 0xF30AFCAB, 0xF47DFA85, 0xF6D1F941, 0xF977F935, -0xFBC7FA61, 0xFD2FFC70, 0xFD5CFECB, 0xFC5700C4, 0xFA8401C9, 0xF88C0196, 0xF7210050, 0xF6C6FE7C, -0xF79AFCD5, 0xF94AFC08, 0xFB2AFC72, 0xFC75FDFD, 0xFC970022, 0xFB66021D, 0xF92F0337, 0xF6950309, -0xF454019B, 0xF2F5FF5B, 0xF2A4FCE2, 0xF32FFAB4, 0xF42FF90F, 0xF541F7E0, 0xF63AF6E3, 0xF733F5D5, -0xF872F4A5, 0xFA3AF387, 0xFC97F2DC, 0xFF4BF306, 0x01DEF430, 0x03CBF634, 0x04B6F8A0, 0x0496FAE3, -0x03B7FC7F, 0x0298FD39, 0x01C0FD2C, 0x0188FCB2, 0x0205FC44, 0x0307FC49, 0x0431FCF9, 0x051EFE53, -0x05790023, 0x05150216, 0x03EF03CD, 0x023004F0, 0x00270541, 0xFE3F04A6, 0xFCEC0341, 0xFC8F016C, -0xFD53FFB5, 0xFF0FFEBD, 0x0143FF02, 0x033000AD, 0x040E0378, 0x035606B0, 0x00F4096C, 0xFD5A0AD5, -0xF95F0A74, 0xF5FA085D, 0xF3E80524, 0xF36E01A3, 0xF44FFEAB, 0xF5EEFCB3, 0xF797FBBD, 0xF8CCFB65, -0xF975FB1D, 0xF9DAFA78, 0xFA76F95A, 0xFBB6F805, 0xFDC0F6F6, 0x0060F6AB, 0x031DF767, 0x056DF91D, -0x06EDFB72, 0x077FFDEC, 0x074F001E, 0x06B201D5, 0x06000318, 0x0569041F, 0x04EA0526, 0x04590654, -0x037907A1, 0x022108DA, 0x004E09B8, 0xFE2A09F4, 0xFC040968, 0xFA3D0817, 0xF92C0639, 0xF9080429, -0xF9D7025E, 0xFB660148, 0xFD4B0137, 0xFEF9023F, 0xFFE4042A, 0xFFA9067C, 0xFE31088F, 0xFBC209C4, -0xF8F009B6, 0xF6730861, 0xF4E80626, 0xF49B03B0, 0xF56A01B5, 0xF6CF00B7, 0xF81400CE, 0xF89801A2, -0xF80F028C, 0xF69E02D7, 0xF4D30206, 0xF36B0002, 0xF311FD2B, 0xF41EFA2F, 0xF67EF7D1, 0xF9B5F6A8, -0xFD12F6F0, 0xFFE4F882, 0x01AEFAE8, 0x024AFD86, 0x01DEFFD2, 0x00CC0173, 0xFF840254, 0xFE650298, -0xFDA00287, 0xFD34026A, 0xFCFC0275, 0xFCC002B3, 0xFC53030A, 0xFBA8034B, 0xFAD40345, 0xFA0B02E4, -0xF986023B, 0xF969017E, 0xF9AB00F6, 0xFA1800D8, 0xFA5B012F, 0xFA2601C9, 0xF9550245, 0xF80D0239, -0xF6B6015C, 0xF5DAFFB8, 0xF5ECFDAB, 0xF718FBD3, 0xF91CFAD7, 0xFB5DFB1F, 0xFD11FCA8, 0xFD8EFEF4, -0xFC890134, 0xFA3C028D, 0xF7540265, 0xF4BA0098, 0xF343FD8B, 0xF36CFA02, 0xF535F6E0, 0xF82BF4DF, -0xFB92F459, 0xFEAAF540, 0x00E1F729, 0x01F7F982, 0x01FAFBB7, 0x0137FD61, 0x0013FE4D, 0xFEF3FE81, -0xFE24FE28, 0xFDD2FD88, 0xFE04FCE9, 0xFE9DFC8F, 0xFF67FCA3, 0x001DFD2F, 0x007DFE14, 0x0061FF15, -0xFFCAFFE8, 0xFEE8004F, 0xFE030031, 0xFD69FFA6, 0xFD47FEEF, 0xFD9DFE5D, 0xFE39FE2E, 0xFECDFE73, -0x05D2FCB5, 0x06AFFEB0, 0x067500D9, 0x0538028D, 0x03660351, 0x01A002FF, 0x007801D7, 0x00430058, -0x00FBFF18, 0x024DFE89, 0x03BAFED3, 0x04CBFFD8, 0x05330140, 0x04E3029D, 0x04060392, 0x02F003E8, -0x0201039B, 0x019002DA, 0x01D101F7, 0x02CB015A, 0x044D0167, 0x05F90262, 0x0750045B, 0x07D4071C, -0x07300A34, 0x054F0D10, 0x026E0F25, 0xFF05101C, 0xFBA60FEB, 0xF8C80ED5, 0xF6A00D47, 0xF51C0BAD, -0xF3F60A41, 0xF2E008FF, 0xF1AF07AD, 0xF077060A, 0xEF7D03F4, 0xEF12018A, 0xEF64FF21, 0xF05DFD22, -0xF1A4FBD3, 0xF2C2FB33, 0xF35CFAF3, 0xF35CFA96, 0xF308F9AD, 0xF2E3F80E, 0xF374F5EE, 0xF507F3D9, -0xF782F270, 0xFA66F22E, 0xFCFCF32B, 0xFE9FF50C, 0xFEF7F723, 0xFE24F8AF, 0xFCACF922, 0xFB50F851, -0xFAC4F686, 0xFB72F45F, 0xFD60F297, 0x0030F1C9, 0x0348F244, 0x0601F3FF, 0x07DBF6A2, 0x0893F9AE, -0x082EFC9D, 0x06E8FF08, 0x051D00B5, 0x032C019E, 0x016101E9, 0xFFE601D0, 0xFEBB0195, 0xFDC10166, -0xFCC60153, 0xFB9A0148, 0xFA220113, 0xF8680077, 0xF69AFF45, 0xF500FD67, 0xF3E4FAF5, 0xF37CF825, -0xF3E0F543, 0xF500F294, 0xF6B4F04A, 0xF8CBEE7B, 0xFB20ED27, 0xFD9CEC48, 0x0034EBDF, 0x02D9EBF6, -0x0570EC9E, 0x07CAEDDF, 0x09ABEFA5, 0x0AE2F1BF, 0x0B58F3DD, 0x0B1DF5AC, 0x0A70F6E6, 0x09A9F76E, -0x0923F755, 0x0928F6D9, 0x09D5F652, 0x0B1BF61D, 0x0CBDF680, 0x0E66F79D, 0x0FBAF969, 0x106BFBAA, -0x1051FE09, 0x0F740022, 0x0E0D01A0, 0x0C7F0253, 0x0B3A0245, 0x0AA101BE, 0x0AE20138, 0x0BE4013A, -0x0D430232, 0x0E61044B, 0x0E990754, 0x0D6F0AC5, 0x0ABB0DDE, 0x06C10FDD, 0x02221039, 0xFDB00ECA, -0xFA380BD9, 0xF8460807, 0xF8010420, 0xF92800E3, 0xFB2BFECC, 0xFD5BFDFB, 0xFF1AFE35, 0x000CFF00, -0x0021FFCE, 0xFF95002B, 0xFED3FFD6, 0xFE50FED8, 0xFE66FD70, 0xFF3BFC04, 0x00BCFAF9, 0x02A6FA9B, -0x049AFB03, 0x063FFC1A, 0x0758FDA3, 0x07D4FF4E, 0x07C700D9, 0x0763021B, 0x06DA030E, 0x065303C4, -0x05DA045A, 0x056B04E4, 0x04FC0567, 0x048905DB, 0x041E063D, 0x03D20695, 0x03AF0705, 0x03AA07BA, -0x039208DA, 0x03190A6B, 0x01F00C3C, 0xFFE70DEF, 0xFD0A0F0B, 0xF9AA0F27, 0xF64D0E14, 0xF3810BEF, -0xF1B40923, 0xF1070640, 0xF14703D2, 0xF1FF022E, 0xF2A50156, 0xF2C90100, 0xF23D00B1, 0xF123FFEE, -0xEFD9FE66, 0xEEDDFC0B, 0xEE9DF913, 0xEF59F5E2, 0xF11AF2ED, 0xF3B0F099, 0xF6CBEF28, 0xFA0BEEB2, -0xFD16EF29, 0xFFA5F060, 0x0185F218, 0x02A0F406, 0x02FCF5DE, 0x02BCF75E, 0x021CF854, 0x0167F8B1, -0x00E6F887, 0x00D1F80B, 0x013DF784, 0x021DF738, 0x033FF75E, 0x0461F809, 0x0544F92C, 0x05B5FA9F, -0x059FFC2B, 0x0503FD99, 0x03F9FEBA, 0x02A4FF6D, 0x012FFFA0, 0xFFCAFF51, 0xFEA4FE8B, 0xFDE6FD71, -0xFDADFC32, 0xFDFEFB0F, 0xFEBEFA46, 0xFFB1FA07, 0x0089FA5D, 0x00F2FB29, 0x00B5FC20, 0xFFC5FCDE, -0xFE50FD01, 0xFCB3FC48, 0xFB66FAAE, 0xFADAF86A, 0xFB54F5ED, 0xFCD6F3BC, 0xFF1FF250, 0x01B5F1ED, -0x040DF291, 0x05B0F3EF, 0x0664F589, 0x063AF6D6, 0x058DF76B, 0x04E0F724, 0x04B6F627, 0x0567F4DF, -0x0702F3D5, 0x0949F385, 0x0BC3F432, 0x0DECF5D5, 0x0F58F821, 0x0FDCFAA1, 0x0F8FFCE2, 0x0EC3FE97, -0x0DDBFFB3, 0x0D28005F, 0x0CCC00E6, 0x0CB40192, 0x0CAA028A, 0x0C6C03C8, 0x0BD00524, 0x0AD00663, -0x098A075A, 0x082A07FD, 0x06D7085E, 0x059A08A0, 0x045E08E0, 0x02FA091E, 0x01500936, 0xFF5E08ED, -0xFD4C0808, 0xFB680669, 0xFA0F0422, 0xF98C017A, 0xF9FCFED6, 0xFB45FCA3, 0xFD16FB31, 0xFF03FA9B, -0x00A3FABE, 0x01B1FB49, 0x0220FBD4, 0x021EFC01, 0x0206FB9E, 0x0241FAB2, 0x0326F981, 0x04DDF878, -0x074AF80E, 0x0A15F8A2, 0x0CB9FA59, 0x0EACFD0D, 0x0F850056, 0x0F1F03A1, 0x0DA5065B, 0x0B88081B, -0x095E08C4, 0x07B4088D, 0x06DF07EF, 0x06E5077A, 0x077C07A8, 0x082408B2, 0x08550A7F, 0x07B10CB4, -0x061A0ED2, 0x03BE1067, 0x00F91132, 0xFE30112F, 0xFBAF108F, 0xF98C0F96, 0xF7B60E77, 0xF6040D42, -0xF45A0BDC, 0xF2C20A1B, 0xF16F07E3, 0xF0A80542, 0xF0A70278, 0xF179FFE6, 0xF2EEFDE9, 0xF4A6FCB6, -0xF631FC40, 0xF73EFC3A, 0xF7BAFC38, 0xF7DDFBD7, 0xF80EFAED, 0xF8C0F99F, 0xFA3BF854, 0xFC78F793, -0xFF21F7CF, 0x01A3F938, 0x0363FBA7, 0x03F2FEA5, 0x032C018E, 0x014703C8, 0xFEBF04EA, 0xFC2A04DA, -0xFA1303CB, 0xF8D00228, 0xF876006E, 0xF8DCFF0D, 0xF9ACFE48, 0xFA81FE31, 0xFB02FEA7, 0xFAF5FF61, -0xFA490008, 0xF91D0047, 0xF7B7FFE4, 0xF673FECE, 0xF5ACFD28, 0xF5A1FB41, 0xF663F981, 0xF7C4F850, -0xF965F7F0, 0xFACEF866, 0xFB92F978, 0xFB76FAB4, 0xFA83FB9C, 0xF907FBC9, 0xF777FB10, 0xF64AF98D, -0xF5D3F794, 0xF624F58F, 0xF716F3DC, 0xF85BF2A9, 0xF9A6F1EF, 0xFAC4F182, 0xFBB1F129, 0xFC88F0BF, -0xFD74F040, 0xFE90EFC9, 0xFFDBEF83, 0x0133EF8A, 0x0268EFDD, 0x0355F057, 0x03F6F0C1, 0x046BF0EB, -0x04F3F0C0, 0x05D0F058, 0x072EEFF2, 0x090FEFE2, 0x0B41F076, 0x0D6EF1D8, 0x0F2DF400, 0x1025F6AD, -0x1027F979, 0x0F3FFBEC, 0x0DB4FDA4, 0x0BF9FE70, 0x0A8EFE61, 0x09D8FDCD, 0x0A01FD35, 0x0AE0FD21, -0x0C08FDF3, 0x0CDCFFBD, 0x0CCB0235, 0x0B8204C5, 0x090B06BD, 0x05D60786, 0x029506E0, 0x000304F7, -0xFEA30253, 0xFE96FFAB, 0xFF96FDA2, 0x0114FC90, 0x0277FC6D, 0x0351FCE0, 0x0384FD6B, 0x0340FDA8, -0x02E4FD6B, 0x02C7FCCD, 0x0316FC12, 0x03C5FB84, 0x04A0FB4A, 0x0570FB5C, 0x0618FB92, 0x06A8FBC1, -0x074AFBDE, 0x0827FC07, 0x0944FC79, 0x0A78FD6B, 0x0B74FEF2, 0x0BE700EF, 0x0BA10311, 0x0AA504FE, -0x09290670, 0x077B0752, 0x05D907BA, 0x045B07D9, 0x02F507D3, 0x018607AB, 0xFFFF0740, 0xFE740667, -0xFFB4FF1B, 0xFEF80021, 0xFDCE00CD, 0xFC7500FA, 0xFB3200AF, 0xFA35001D, 0xF981FF7F, 0xF8F3FF04, -0xF851FEB3, 0xF768FE6B, 0xF625FDEA, 0xF4A2FCEA, 0xF323FB3B, 0xF200F8D6, 0xF18BF5E4, 0xF1FFF2B0, -0xF36AEF99, 0xF5B4ECF8, 0xF8A3EB14, 0xFBE9EA15, 0xFF32EA01, 0x0231EABF, 0x04AAEC1D, 0x067EEDD7, -0x07ABEFA6, 0x084FF14C, 0x089CF2A3, 0x08CDF3A5, 0x0916F46A, 0x0991F520, 0x0A38F5F9, 0x0AEAF71B, -0x0B78F892, 0x0BAFFA4F, 0x0B70FC28, 0x0AB2FDEB, 0x0985FF6A, 0x08080083, 0x06640126, 0x04C10151, -0x0343010E, 0x020A0072, 0x012EFF9E, 0x00BFFEB9, 0x00B6FDF5, 0x00F9FD81, 0x0150FD7D, 0x0176FDEA, -0x0127FEA1, 0x0039FF55, 0xFEAFFFA6, 0xFCC2FF3B, 0xFADCFDE0, 0xF979FB9E, 0xF905F8BF, 0xF9BFF5C2, -0xFB9BF336, 0xFE47F194, 0x013DF11F, 0x03EBF1C8, 0x05DAF33B, 0x06D4F4F5, 0x06EEF66D, 0x0686F73F, -0x061BF74B, 0x0628F6BE, 0x06FCF603, 0x089AF59E, 0x0ABEF602, 0x0CECF76B, 0x0E9CF9CB, 0x0F61FCD0, -0x0F07FFFE, 0x0D9F02D4, 0x0B7304F0, 0x08E90624, 0x06670679, 0x0434061C, 0x0277054B, 0x0135043E, -0x0063031E, 0xFFF50205, 0xFFDD0106, 0x0013003A, 0x007FFFBA, 0x00FDFF9B, 0x015BFFDC, 0x01660061, -0x010100F0, 0x00350143, 0xFF330121, 0xFE4A0077, 0xFDCAFF65, 0xFDE5FE36, 0xFE99FD47, 0xFFADFCE8, -0x00C3FD3C, 0x0179FE2E, 0x0187FF74, 0x00D700AA, 0xFF8B0171, 0xFDED018D, 0xFC5A00EF, 0xFB25FFB3, -0xFA83FE18, 0xFA8AFC66, 0xFB2EFAE4, 0xFC4BF9CA, 0xFDACF93C, 0xFF11F949, 0x003BF9E6, 0x00EDFAEB, -0x0104FC18, 0x007AFD1C, 0xFF76FDAB, 0xFE43FD90, 0xFD42FCC6, 0xFCCCFB7E, 0xFD18FA14, 0xFE1EF8F5, -0xFF9FF87F, 0x0131F8DC, 0x0260F9FA, 0x02D7FB88, 0x0279FD16, 0x0167FE3A, 0xFFF7FEAC, 0xFE91FE5E, -0xFD91FD78, 0xFD2BFC4A, 0xFD66FB2C, 0xFE1AFA65, 0xFF07FA1C, 0xFFEEFA56, 0x0097FAF9, 0x00E3FBDE, -0x00C4FCDE, 0x003BFDD1, 0xFF4FFE97, 0xFE10FF0F, 0xFC97FF1E, 0xFB07FEAB, 0xF994FDAC, 0xF875FC2E, -0xF7DDFA59, 0xF7E6F86E, 0xF888F6B6, 0xF997F56E, 0xFACAF4B3, 0xFBD3F477, 0xFC76F482, 0xFCA5F483, -0xFC80F42B, 0xFC54F34D, 0xFC7CF1EC, 0xFD46F042, 0xFED8EEAD, 0x011CED94, 0x03CCED43, 0x0681EDDB, -0x08D9EF42, 0x0A8EF135, 0x0B85F35D, 0x0BD3F56B, 0x0BA7F72C, 0x0B39F890, 0x0AB9F9A1, 0x0A40FA77, -0x09D8FB2D, 0x097CFBD5, 0x0928FC79, 0x08D4FD21, 0x0878FDD7, 0x0802FE9F, 0x075DFF76, 0x066F0045, -0x052E00E7, 0x03A6012A, 0x020200E6, 0x0087000C, 0xFF79FEB9, 0xFF0AFD2B, 0xFF40FBB8, 0xFFF2FAAA, -0x00D5FA28, 0x0197FA29, 0x01FCFA78, 0x01F4FACE, 0x019BFAE9, 0x0125FAAC, 0x00CAFA1C, 0x00ABF95A, -0x00CBF88B, 0x011AF7C4, 0x0186F700, 0x0213F62E, 0x02DAF545, 0x0406F455, 0x05B3F394, 0x07D9F34D, -0x0A3EF3C6, 0x0C80F51C, 0x0E37F72D, 0x0F17F9A1, 0x0F15FBFF, 0x0E6EFDE0, 0x0D8DFF10, 0x0CEAFFA9, -0x0CD00006, 0x0D46009F, 0x0E0401DD, 0x0E9203E8, 0x0E6E069C, 0x0D40098E, 0x0AF60C34, 0x07C90E0F, -0x042B0ED0, 0x009B0E6D, 0xFD870D19, 0xFB300B2A, 0xF9A108FD, 0xF8C106DC, 0xF86104F2, 0xF854034F, -0xF87801ED, 0xF8B700C4, 0xF905FFCB, 0xF957FEFC, 0xF9A3FE4D, 0xF9E0FDB3, 0xFA0CFD1A, 0xFA33FC6F, -0xFA6CFBA7, 0xFAD3FACB, 0xFB7FF9F3, 0xFC74F946, 0xFDA2F8EB, 0xFEE1F8FC, 0xFFFFF97E, 0x00CDFA5A, -0x012BFB63, 0x0114FC65, 0x009DFD30, 0xFFEEFDA4, 0xFF35FDBB, 0xFE9DFD83, 0xFE41FD1C, 0xFE2DFCAD, -0xFE56FC5B, 0xFEA3FC43, 0xFEF0FC74, 0xFF14FCEC, 0xFEE9FD93, 0xFE53FE42, 0xFD4AFEC1, 0xFBE2FED7, -0xFA4EFE52, 0xF8D8FD1D, 0xF7D3FB4A, 0xF785F914, 0xF80FF6D8, 0xF961F4F9, 0xFB3AF3CB, 0xFD32F372, -0xFEE1F3DA, 0xFFF8F4BA, 0x005BF5AC, 0x002DF64F, 0xFFBAF666, 0xFF64F5E9, 0xFF7AF508, 0x0024F415, -0x0155F365, 0x02D6F334, 0x045BF397, 0x059FF479, 0x0679F5A8, 0x06DFF6EC, 0x06E0F816, 0x069BF90D, -0x062DF9C9, 0x05A9FA4B, 0x051FFA96, 0x049BFAAB, 0x042FFA89, 0x03F0FA39, 0x03F7F9D2, 0x044DF978, -0x04EBF955, 0x05ACF990, 0x065DFA38, 0x06C3FB3E, 0x06B2FC76, 0x0618FD9E, 0x0507FE76, 0x03B2FEC9, -0x025FFE86, 0x0155FDBF, 0x00C7FCA8, 0x00CBFB88, 0x014DFAA5, 0x0219FA36, 0x02E8FA4C, 0x0370FAD0, -0x0381FB8A, 0x030DFC2C, 0x0234FC6E, 0x0139FC21, 0x0070FB41, 0x0020F9F9, 0x0073F892, 0x0165F762, -0x02C7F6AD, 0x044DF696, 0x05ABF711, 0x06A8F7F2, 0x072CF8F9, 0x0741F9EB, 0x070AFA9D, 0x06B4FAFD, -0x0669FB0F, 0x0649FAE5, 0x0669FA98, 0x06D6FA46, 0x0795FA11, 0x089CFA1F, 0x09D0FA96, 0x0B01FB8E, -0x0BF1FD08, 0x0C66FEE0, 0x0C3B00D9, 0x0B7302A4, 0x0A3A03FE, 0x08DC04C9, 0x07AA0517, 0x06D90525, -0x06710546, 0x064705C0, 0x060A06B3, 0x0566080D, 0x041E098B, 0x021F0AD5, 0xFF890B96, 0xFC9B0B95, -0xF9A30ABA, 0xF6EE0910, 0xF4B806BA, 0xF32E03E7, 0xF26C00D0, 0xF27DFDB5, 0xF357FADA, 0xF4D6F87F, -0xF6BAF6D3, 0xF8AEF5E3, 0xFA64F590, 0xFBA7F593, 0xFC72F596, 0xFCF6F550, 0xFD86F4A3, 0xFE79F3AA, -0x0004F2B5, 0x0227F225, 0x04A6F24D, 0x0720F353, 0x0930F523, 0x0A8CF779, 0x0B1CF9FD, 0x0AEFFC60, -0x0A35FE6B, 0x09220009, 0x07E2013B, 0x06940209, 0x05510282, 0x042C02B1, 0x033C02AD, 0x028C0297, -0x0216029A, 0x01B802D9, 0x013D0361, 0x006B041A, 0xFF1D04CB, 0xFD550527, 0xFB4104F0, 0xF92E040B, -0xF7690287, 0xF624009A, 0xF56EFE85, 0xF531FC7A, 0xF54AFA90, 0xF59EF8C3, 0xF62AF706, 0xF6F9F559, -0xF817F3D1, 0xF97CF28D, 0xFB04F1A9, 0xFC7DF11F, 0xFDC1F0C5, 0xFED4F05A, 0xFFECEFAD, 0x0161EEBD, -0x0387EDD0, 0x0678ED62, 0x09F7EDFF, 0x0D73EFFF, 0x102DF35C, 0x1180F7A2, 0x1119FC0C, 0x0F1FFFC4, -0x09F7080F, 0x07C60A68, 0x04E00BB1, 0x01E00BBC, 0xFF5E0AB7, 0xFDB80917, 0xFCF8076B, 0xFCD2061F, -0xFCD40555, 0xFC9804D9, 0xFBF90445, 0xFB27032F, 0xFA930165, 0xFAC2FF0C, 0xFC13FC9D, 0xFE89FABE, -0x01CAFA06, 0x052CFAC5, 0x07F4FCE1, 0x098FFFDF, 0x09C6030E, 0x08C805BE, 0x0717077E, 0x0556083D, -0x04070843, 0x03650811, 0x03500829, 0x036108D9, 0x03190A1F, 0x02150BA8, 0x00360CF2, 0xFDB40D81, -0xFB040D0C, 0xF8B60B9B, 0xF7370986, 0xF6B50750, 0xF709057D, 0xF7CF0461, 0xF8890406, 0xF8D10430, -0xF8790476, 0xF7990472, 0xF67C03E0, 0xF58202BA, 0xF4F70131, 0xF4FAFF95, 0xF570FE33, 0xF61DFD3A, -0xF6B5FCA6, 0xF700FC4B, 0xF6EAFBE1, 0xF68CFB25, 0xF622F9EA, 0xF5F7F828, 0xF652F5FD, 0xF765F3A8, -0xF942F178, 0xFBD8EFBF, 0xFEF3EEC2, 0x0244EEA9, 0x0570EF79, 0x0826F10C, 0x0A2CF31A, 0x0B77F54B, -0x0C28F751, 0x0C84F902, 0x0CD6FA64, 0x0D52FBAC, 0x0DFCFD25, 0x0E9FFF11, 0x0EE2017E, 0x0E690441, -0x0D0006F5, 0x0AB20921, 0x07D20A61, 0x04DC0A8F, 0x024D09CF, 0x00740880, 0xFF5C0716, 0xFECE05ED, -0xFE6D0526, 0xFDE604A0, 0xFD130410, 0xFC0C0326, 0xFB1C01B3, 0xFA9CFFC4, 0xFACFFD9E, 0xFBC4FBA2, -0xFD4EFA28, 0xFF1AF962, 0x00C7F949, 0x0211F9A7, 0x02DAFA2D, 0x0336FA90, 0x0359FAA1, 0x0383FA58, -0x03E8F9CB, 0x04A6F926, 0x05BFF897, 0x0723F847, 0x08B2F84C, 0x0A4BF8AD, 0x0BD0F961, 0x0D2EFA58, -0x0E5FFB7C, 0x0F66FCBA, 0x1051FE0D, 0x112FFF7A, 0x12030116, 0x12BF02F7, 0x1342052E, 0x136007B4, -0x12ED0A6B, 0x11D10D1C, 0x10130F87, 0x0DD51178, 0x0B5112D4, 0x08BE139E, 0x064213F5, 0x03E813FC, -0x01A313CC, 0xFF5C1365, 0xFD0712AF, 0xFAB21185, 0xF8870FCF, 0xF6C30D8D, 0xF5A10AE4, 0xF5450816, -0xF5AE0573, 0xF6B6033F, 0xF81A01A3, 0xF99300A1, 0xFAE50019, 0xFBF1FFD7, 0xFCBDFFA5, 0xFD67FF5D, -0xFE1FFEF7, 0xFF0CFE8B, 0x0041FE4A, 0x01ABFE6A, 0x0315FF14, 0x0433004C, 0x04BA01E6, 0x047D038D, -0x038804D8, 0x021E056E, 0x00B10526, 0xFFBE041F, 0xFF9B02B9, 0x005F017B, 0x01CC00DE, 0x036B0125, -0x04B40240, 0x054803D5, 0x05130564, 0x04500683, 0x036F0709, 0x02DB0721, 0x02C60732, 0x030D07AE, -0x034608D8, 0x02E80A9B, 0x018F0C8D, 0xFF290E12, 0xFC070E9D, 0xF8BF0DE4, 0xF5F10C02, 0xF4130963, -0xF3430698, 0xF34A041C, 0xF3C4022A, 0xF44A00B2, 0xF4A6FF6F, 0xF4E2FE16, 0xF537FC7D, 0xF5ECFAAF, -0xF72DF8E9, 0xF8F9F777, 0xFB20F696, 0xFD5BF65D, 0xFF68F6BE, 0x011DF78E, 0x026BF8A3, 0x0351F9DB, -0x03D3FB1F, 0x03EFFC5B, 0x03A3FD70, 0x02FAFE35, 0x021AFE7F, 0x013EFE3C, 0x00AFFD78, 0x00A3FC6B, -0x012BFB5F, 0x022BFA9B, 0x0369FA48, 0x04A4FA61, 0x05B2FABF, 0x0692FB34, 0x0765FBA0, 0x0854FC0F, -0x0978FCAC, 0x0ABFFDB3, 0x0BEEFF4C, 0x0CB30177, 0x0CC40403, 0x0BF80699, 0x0A5B08DB, 0x08220A7E, -0x05980B5F, 0x030A0B80, 0x00AF0AFD, 0xFEA50A00, 0xFCF708AB, 0xFBA40719, 0xFAAC0559, 0xFA100377, -0xF9D4017F, 0xF9FBFF7D, 0xFA8EFD82, 0xFB92FBA0, 0xFD0EF9F5, 0xFEFDF8AA, 0x0148F7ED, 0x03B9F7E8, -0x0601F8A9, 0x07CAFA13, 0x08D2FBD7, 0x0909FD89, 0x08A5FEC0, 0x080CFF42, 0x07BAFF21, 0x0806FEB5, -0x08FDFE7D, 0x0A5AFEE5, 0x0B9D0018, 0x0C4701E0, 0x0C1603C2, 0x0B270530, 0x09EE05CF, 0x090405A3, -0x08DE0512, 0x099504BD, 0x0AD50532, 0x0BFF06AF, 0x0C6D0901, 0x0BB90B98, 0x09EA0DC6, 0x076C0F07, -0x04DB0F36, 0x02C20E93, 0x015C0D97, 0x008B0CBB, 0xFFF20C39, 0xFF2F0BFB, 0xFE110BAF, 0xFCAF0AF6, -0xFB60099C, 0xFA8B07B1, 0xFA780582, 0xFB310375, 0xFC8801DF, 0xFE3100E5, 0xFFEA007F, 0x018B008E, -0x030E00F8, 0x047101B8, 0x05A702D9, 0x0687045C, 0x06E00624, 0x069707EE, 0x05BC096D, 0x04920A65, -0x03730AD7, 0x02A50AFF, 0x022F0B38, 0x01D10BCC, 0x01210CC0, 0xFFC60DC4, 0xFDB30E50, 0xFB430DE6, -0xF91F0C57, 0xF7F709F1, 0xF832076D, 0xF9AA05A8, 0xFBB60546, 0xFD5E0663, 0xFDCA087A, 0xFC980A9B, -0xFA0E0BCB, 0xF6FD0B69, 0xF4680976, 0xF318068C, 0xF34C039A, 0xF4A60179, 0xF65F0093, 0xF7A200C0, -0xF7EC0161, 0xF73E01AF, 0xF6120118, 0xF51DFF77, 0xF501FD21, 0xF607FAB0, 0xF810F8C8, 0xFAAFF7D4, -0xFD58F7EE, 0xFF99F8E5, 0x0133FA65, 0x021FFC1B, 0x026EFDCB, 0x023EFF50, 0x01A50094, 0x00B9017E, -0xFF9C01F5, 0xFE8001EF, 0xFD9B017B, 0xFD1700CC, 0xFCF40022, 0xFD0BFFAF, 0xFD1BFF7F, 0xFCEDFF67, -0xFC78FF20, 0xFBEDFE66, 0xFBAAFD28, 0xFC0AFB9C, 0xFD39FA30, 0xFF11F95F, 0x0124F978, 0x02E8FA75, -0x03F2FC02, 0x0423FD98, 0x03B7FEC5, 0x031EFF5B, 0x02C3FF85, 0x02D5FFA9, 0x0324002F, 0x03420146, -0x02B402BA, 0x0136040B, 0xFEEB049D, 0xFC500402, 0xFA16022E, 0xF8D3FF7A, 0xF8CBFC86, 0xF9DDF9F3, -0xFB98F825, 0xFD75F727, 0xFF18F6B6, 0x006AF676, 0x0198F623, 0x02EBF5B3, 0x0495F55D, 0x0692F56B, -0x08A4F617, 0x0A74F763, 0x0BBAF919, 0x0C60FAE6, 0x0C85FC7F, 0x0C68FDC2, 0x0C45FEBC, 0x0C37FF98, -0x0C30007C, 0x0C0D016F, 0x0BB40256, 0x0B2D0305, 0x0AA5035F, 0x0A580372, 0x0A6C0374, 0x0ADD03AD, -0x0B740453, 0x0BE3056B, 0x0BEC06C7, 0x0B810818, 0x0ACE0922, 0x0A1F09D8, 0x09B40A6D, 0x09930B3B, -0x09790C92, 0x08EE0E85, 0x077910CC, 0x04DE12D8, 0x01411400, 0xFD2813C8, 0xF94D1210, 0xF65C0F26, -0xF4B90BA4, 0xF45D0838, 0xF4EE055F, 0xF5E60344, 0xF6D701BD, 0xF7940070, 0xF836FF0B, 0xF908FD6A, -0xFA58FBAB, 0xFC50FA1D, 0xFEE0F91B, 0x01C8F8EA, 0x04B0F9A2, 0x0747FB35, 0x0950FD7A, 0x0AA2003F, -0x0B240358, 0x0AB8068F, 0x094A09A0, 0x06D80C30, 0x038D0DD5, 0xFFC90E37, 0xFC1C0D2C, 0xF9230AD9, -0xF8490132, 0xF8E1FDFD, 0xFA6EFB73, 0xFC76F9C2, 0xFE90F8CC, 0x0093F849, 0x0295F805, 0x04CAF7FF, -0x0752F877, 0x0A0FF9C6, 0x0C98FC31, 0x0E58FFB2, 0x0EC603E6, 0x0D9E0828, 0x0AFE0BBE, 0x075F0E1D, -0x036A0F0D, 0xFFBF0EB8, 0xFCC50D86, 0xFA930BF3, 0xF9000A60, 0xF7C508F8, 0xF69E07B3, 0xF5680667, -0xF42504E6, 0xF2EE0312, 0xF1E700DE, 0xF134FE51, 0xF0F5FB76, 0xF149F864, 0xF250F540, 0xF41FF240, -0xF6B4EFAD, 0xF9EAEDD4, 0xFD70ECEE, 0x00DFED05, 0x03D2EDEE, 0x0609EF4E, 0x0780F0B7, 0x086DF1CF, -0x092EF26C, 0x0A21F2A4, 0x0B80F2BC, 0x0D51F307, 0x0F69F3C9, 0x1185F51F, 0x1365F6F7, 0x14E4F928, -0x1601FB88, 0x16CBFE00, 0x17550093, 0x179A0350, 0x177E0645, 0x16D70963, 0x157F0C7D, 0x136C0F50, -0x10BA1193, 0x0DA71317, 0x0A8413CD, 0x079713D4, 0x050A1363, 0x02DF12BB, 0x00F7120A, 0xFF1F115A, -0xFD2B108F, 0xFB0C0F71, 0xF8E10DC1, 0xF6F00B52, 0xF59E0827, 0xF54D047A, 0xF63F00BB, 0xF877FD7A, -0xFBADFB3F, 0xFF5BFA62, 0x02DDFAF0, 0x059AFCA1, 0x0738FEEC, 0x07B0012F, 0x074E02E6, 0x069803D1, -0x06120407, 0x061803E2, 0x06B803DC, 0x07B70458, 0x08AC057E, 0x092F072E, 0x09040912, 0x082D0AC5, -0x06E80BFE, 0x05890CA7, 0x045A0CE1, 0x037B0CEC, 0x02DD0D04, 0x02530D45, 0x01AF0DA6, 0x00DF0E01, -0xFFF30E2F, 0xFF160E27, 0xFE6D0E05, 0xFE010E00, 0xFDAE0E4E, 0xFD290F03, 0xFC1F0FFE, 0xFA5A10E8, -0xF7DE114E, 0xF4F510C7, 0xF21E0F21, 0xEFE80C73, 0xEEC8091E, 0xEEEE05B7, 0xF03E02D4, 0xF24E00EC, -0xF48F002C, 0xF66F0077, 0xF783016B, 0xF7A40285, 0xF6F10342, 0xF5C5034B, 0xF4960281, 0xF3D3010A, -0xF3C8FF3C, 0xF484FD86, 0xF5DCFC4E, 0xF774FBCF, 0xF8E4FC0E, 0xF9CDFCD9, 0xF9FAFDD2, 0xF96FFE8F, -0xF864FEB6, 0xF736FE14, 0xF650FCAB, 0xF60FFAB3, 0xF6A9F885, 0xF827F68C, 0xFA5DF528, 0xFCFAF49B, -0xFF9CF4FB, 0x01E0F631, 0x037CF7FD, 0x0449FA06, 0x0452FBEF, 0x03C7FD70, 0x02F3FE63, 0x0224FECE, -0x0195FEDB, 0x015BFECB, 0x0165FED9, 0x0182FF27, 0x017AFFB0, 0x0126004F, 0x008000CD, 0xFFA400FC, -0xFEC600CB, 0xFE18004A, 0xFDB4FFA8, 0xFD91FF12, 0xFD89FEA5, 0xFD6EFE59, 0xFD26FE05, 0xFCBAFD76, -0xFC5BFC89, 0xFC4EFB42, 0xFCCAF9D7, 0xFDDEF89B, 0xFF5FF7E0, 0x00F5F7D4, 0x0235F865, 0x02D3F943, -0x02BCF9F8, 0x0229FA18, 0x018BF965, 0x016AF7ED, 0x0230F60A, 0x0407F447, 0x06C9F32E, 0x0A0CF323, -0x0D45F440, 0x0FF4F659, 0x11CAF90B, 0x12B6FBE2, 0x12E2FE7E, 0x129A00AD, 0x122C026C, 0x11D203E2, -0x119E0548, 0x118106CE, 0x11500891, 0x10DB0A90, 0x0FF80CAE, 0x0E910EC0, 0x0CA6108E, 0x0A4F11E9, -0x07B612AB, 0x051512C5, 0x02A8123F, 0x00A4113C, 0xFF270FF2, 0xFE360EA3, 0xFDB30D87, 0xFD680CC0, -0xFD190C4A, 0xFC950C05, 0xFBCB0BB8, 0xFACE0B30, 0xF9CB0A4E, 0xF8F60916, 0xF87407AA, 0xF84B0636, -0xF86404DB, 0xF89C039C, 0xF8DE025E, 0xF93800FB, 0xF9DEFF5D, 0xFB13FD9E, 0xFD0DFC0A, 0xFFC7FB15, -0x02F4FB29, 0x060BFC7D, 0x086AFEF1, 0x09980208, 0x09720511, 0x08460763, 0x06B308A0, 0x057708DD, -0x051908A0, 0x05B608AB, 0x06EA09B0, 0x07EC0C04, 0x07E00F74, 0x0624134D, 0x02961696, 0xFDA51864, -0xF831182E, 0xF33F15F4, 0xEFA5123F, 0xEDCC0DEB, 0xED9C09D8, 0xEE9006A8, 0xEFF80494, 0xF136036D, -0xF1F202C2, 0xF22B0216, 0xF2230115, 0xF23BFFAB, 0xF2C2FE03, 0xF3D5FC6E, 0xF55EFB3B, 0xF718FA96, -0xF8B9FA7F, 0xFA07FAC7, 0xFAF3FB2D, 0xFB95FB78, 0xFC26FB90, 0xFCDAFB86, 0xFDD0FB8F, 0xFEF6FBEA, -0x0015FCC1, 0x00DAFE11, 0x00FEFFA2, 0x00670112, 0xFF3701F9, 0xFDD00211, 0xFCB40155, 0xFC550011, -0xFCECFECD, 0xFE57FE20, 0x001EFE7B, 0x019AFFF7, 0x0229024C, 0x016A04DD, 0xFF6206F2, 0xFC7707F0, -0xF951078D, 0xF6A005E1, 0xF4E5035A, 0xF450008D, 0xF4C2FE04, 0xF5E0FC1C, 0xF73EFAEF, 0xF87FFA64, -0xF968FA3D, 0xF9E8FA38, 0xFA08FA16, 0xF9E9F9A8, 0xF9BBF8CE, 0xF9BCF77C, 0xFA30F5C2, 0xFB5AF3D7, -0xFD5CF218, 0x0025F0F3, 0x0363F0CD, 0x0693F1D1, 0x0923F3E0, 0x0AA2F688, 0x0AF4F92B, 0x0A55FB34, -0x094DFC4D, 0x0875FC7D, 0x0841FC24, 0x08D0FBC8, 0x09EBFBDF, 0x0B26FC9E, 0x0C17FDEA, 0x0C85FF70, -0x0C7E00D7, 0x0C4401F0, 0x0C2002CA, 0x0C3703A4, 0x0C6E04C7, 0x0C7A0650, 0x0C08081D, 0x0AF109D4, -0x09530B13, 0x078E0B9D, 0x06140B85, 0x05350B29, 0x04F10B07, 0x04EE0B85, 0x04A00CBA, 0x03810E5D, -0x01520FD9, 0xFE361086, 0xFAAE0FED, 0xF76C0DEF, 0xF5120AD2, 0xF4080720, 0xF45C037E, 0xF5CE0078, -0xF7EEFE60, 0xFA42FD47, 0xFC60FD0C, 0xFE02FD68, 0xFF08FE07, 0xFF7BFE93, 0xFF87FEC6, 0xFF78FE75, -0xFFA6FD9E, 0x0067FC75, 0x01E8FB55, 0x0421FAAF, 0x06C6FAE0, 0x0961FC0E, 0x0B79FE17, 0x0CC00098, -0x0D30031A, 0x0D08053E, 0x0CB006E8, 0x0C820845, 0x0C9E09AF, 0x0CDB0B7F, 0x0CDE0DD9, 0x0C43109E, -0x0AD51373, 0x08A015F1, 0x05E917D5, 0x0309191B, 0x003519F4, 0xFD661AA3, 0xFA5F1B44, 0xF6D61BB1, -0xF2AC1B84, 0xEE111A42, 0xE9861798, 0xE5B8138B, 0xE33F0E83, 0xE261092B, 0xE300043B, 0xE4A7002F, -0xE6BDFD2E, 0xE8C3FB08, 0xEA78F95E, 0xEBE2F7D2, 0xED34F62B, 0xEEABF463, 0xF070F294, 0xF293F0E3, -0xF511EF6A, 0xF7E8EE40, 0xFB1DED81, 0xFEAAED5A, 0x026EEE0B, 0x0616EFC6, 0x0928F28F, 0x0B2AF61E, -0x0BCFF9E5, 0x0B2AFD36, 0x09AFFF84, 0x0814009E, 0x070800CB, 0x06EE00AA, 0x07B000F5, 0x08C80230, -0x097E046E, 0x0936074E, 0x07B00A26, 0x051F0C4F, 0x02040D69, 0xFEEF0D76, 0xFC3E0CC2, 0xF9FF0BAB, -0xF8020A64, 0xF61208D9, 0xF42A06BF, 0xF29903D2, 0xF1EB000F, 0xF2A9FBDC, 0xF517F7F6, 0xF8FEF532, -0x09A104D6, 0x092507A7, 0x080A09FC, 0x06A60BCC, 0x05330D3F, 0x03B50E88, 0x02090FC2, 0x000110D7, -0xFD8C118D, 0xFAC9119D, 0xF80610E1, 0xF59D0F67, 0xF3D20D70, 0xF2B10B54, 0xF2100957, 0xF1AC078C, -0xF15205D0, 0xF10003E1, 0xF0F1018F, 0xF184FEE4, 0xF309FC30, 0xF595F9F7, 0xF8E5F8C2, 0xFC6DF8E2, -0xFF81FA4E, 0x0198FC9F, 0x0279FF33, 0x024D0171, 0x018A02F6, 0x00B803BC, 0x003D040E, 0x0032045A, -0x006304FF, 0x006A0618, 0xFFE70778, 0xFEB108B6, 0xFCE80963, 0xFAF10937, 0xF9490834, 0xF85806A4, -0xF84804FE, 0xF8FB03BC, 0xFA16032C, 0xFB2C0360, 0xFBDC042A, 0xFBF5053B, 0xFB790641, 0xFA8F0703, -0xF969076C, 0xF82F0788, 0xF6EE076A, 0xF59A0721, 0xF42506A0, 0xF28705CA, 0xF0D50474, 0xEF3E0280, -0xEE05FFEA, 0xED6BFCCE, 0xEDA2F964, 0xEEBFF5F6, 0xF0B7F2CD, 0xF368F021, 0xF6A5EE1A, 0xFA3DECCB, -0xFE05EC3B, 0x01D6EC69, 0x058CED54, 0x0903EEF4, 0x0C14F139, 0x0E9BF409, 0x107EF73E, 0x11AFFAAD, -0x122DFE2D, 0x1205019D, 0x114104E5, 0x0FE907F0, 0x0E020AA6, 0x0B920CE6, 0x08AE0E84, 0x05830F55, -0x02570F3F, 0xFF7C0E49, 0xFD430CA3, 0xFBDB0A9F, 0xFB47089E, 0xFB5B06F3, 0xFBCA05C8, 0xFC42051B, -0xFC8C04BC, 0xFC9A0470, 0xFC850406, 0xFC7C036F, 0xFCA702C1, 0xFD0F022A, 0xFD9B01D0, 0xFE1901BD, -0xFE5C01D6, 0xFE5201E2, 0xFE1701AA, 0xFDE60110, 0xFE040027, 0xFE9AFF2A, 0xFFA8FE62, 0x00FAFE0B, -0x0245FE31, 0x0349FEAB, 0x03EDFF30, 0x0455FF77, 0x04D0FF60, 0x05B8FF09, 0x0745FEC9, 0x0971FF13, -0x0BF1004D, 0x0E4302A6, 0x0FDD0600, 0x105109FC, 0x0F710E12, 0x0D5311B8, 0x0A451486, 0x06B11647, -0x030016F9, 0xFF8416BE, 0xFC7115CD, 0xF9DD145C, 0xF7CB1298, 0xF63610A3, 0xF5110E94, 0xF4540C79, -0xF3F70A5A, 0xF3FC083C, 0xF46C0629, 0xF5520433, 0xF6B9027D, 0xF89A0138, 0xFAD50098, 0xFD2B00C7, -0xFF4A01CD, 0x00DC038A, 0x01A005B7, 0x018007F6, 0x009109EC, 0xFF100B58, 0xFD450C1F, 0xFB750C4B, -0xF9C90BFE, 0xF8510B58, 0xF70C0A6F, 0xF5FA0947, 0xF52907DD, 0xF4B20639, 0xF4B40475, 0xF53F02C2, -0xF6490159, 0xF7A80068, 0xF91F0002, 0xFA72001B, 0xFB780088, 0xFC270118, 0xFC8F01A2, 0xFCCD0213, -0xFCFC026F, 0xFD2802C4, 0xFD4F0320, 0xFD630388, 0xFD5C03F5, 0xFD38045A, 0xFCFE04AF, 0xFCB504F3, -0xFC62052A, 0xFBFD0558, 0xFB7D0571, 0xFAE30563, 0xFA3E0516, 0xF9B2047E, 0xF96A03A7, 0xF98802BA, -0xFA1201F0, 0xFAE90182, 0xFBD2018E, 0xFC8B020A, 0xFCE002CD, 0xFCC40396, 0xFC4C042F, 0xFBA6047C, -0xFAFE0484, 0xFA6E0463, 0xF9EE043B, 0xF9630416, 0xF8AE03E4, 0xF7C4037A, 0xF6BD02A9, 0xF5CF0156, -0xF53CFF84, 0xF53EFD60, 0xF5F1FB2C, 0xF74EF92E, 0xF930F79C, 0xFB64F693, 0xFDBBF615, 0x000FF618, -0x0249F68B, 0x045BF75E, 0x0638F886, 0x07D6F9F5, 0x092DFB9E, 0x0A39FD73, 0x0AFAFF68, 0x0B71017A, -0x0B9703A8, 0x0B5805EF, 0x0A9C083B, 0x094C0A62, 0x076C0C29, 0x051F0D53, 0x02AC0DB8, 0x006B0D5B, -0xFEA80C6D, 0xFD880B42, 0xFCF90A33, 0xFCBD0979, 0xFC840919, 0xFC1008E8, 0xFB53089C, 0xFA7307F6, -0xF9BB06E2, 0xF9710581, 0xF9B80420, 0xFA7A0312, 0xFB6E028C, 0xFC3A0288, 0xFC9B02CA, 0xFC8102F7, -0xFC1B02BC, 0xFBBE01F7, 0xFBC900BF, 0xFC76FF5E, 0xFDCFFE32, 0xFFA5FD89, 0x01ACFD8B, 0x039BFE31, -0x053AFF54, 0x067800C3, 0x07590259, 0x07E90404, 0x083305BD, 0x08330783, 0x07DF094B, 0x07340B00, -0x06390C8B, 0x04FF0DDB, 0x039B0EEE, 0x021A0FC9, 0x007A1073, 0xFEB210E8, 0xFCBB110F, 0xFAA210C7, -0xF88E0FF1, 0xF6BC0E85, 0xF56C0CA1, 0xF4C80A82, 0xF4D80874, 0xF57B06BD, 0xF6750582, 0xF78604C7, -0xF8810470, 0xF9560458, 0xFA0A0467, 0xFAAA0496, 0xFB3704F1, 0xFB9F0585, 0xFBBD064D, 0xFB6E0726, -0xFAA407D5, 0xF9790818, 0xF82A07C0, 0xF70C06C3, 0xF66F0548, 0xF685039C, 0xF754021A, 0xF8B10113, -0xFA5400B6, 0xFBE8010B, 0xFD2601EE, 0xFDE50324, 0xFE1D046B, 0xFDE8058D, 0xFD72066C, 0xFCEB0709, -0xFC760780, 0xFC1C07FC, 0xFBC308A5, 0xFB3B098E, 0xFA450AA3, 0xF8B40BAA, 0xF67C0C4C, 0xF3C90C2E, -0xF0F50B13, 0xEE7708F3, 0xECBE0605, 0xEC0B02B3, 0xEC64FF75, 0xED8EFCAF, 0xEF2DFA8F, 0xF0E9F908, -0xF292F7E6, 0xF42AF6ED, 0xF5DCF605, 0xF7D7F547, 0xFA29F4F4, 0xFCA6F555, 0xFEEDF691, 0x008AF888, -0x0125FAD7, 0x00AEFCF1, 0xFF65FE51, 0xFDCCFEAE, 0xFC74FE13, 0xFBCDFCD8, 0xFBF8FB7D, 0xFCCCFA75, -0xFDE8F9F9, 0xFEE8F9FB, 0xFF91FA34, 0xFFEAFA4D, 0x0031FA0C, 0x00BDF975, 0x01D4F8C4, 0x0385F85A, -0x05A1F893, 0x07CBF9A4, 0x0994FB84, 0x0AA6FDF3, 0x0AD6008F, 0x0A3202F6, 0x08EF04DC, 0x075B061F, -0x05BE06C1, 0x045306E5, 0x033606BC, 0x02680678, 0x01D4063D, 0x0157061E, 0x00CC0611, 0x001C05FB, -0xFF4A05B0, 0xFE74050D, 0xFDD00404, 0xFD9A02AC, 0xFDFF0142, 0xFF010016, 0x0072FF76, 0x01FFFF89, -0x03460043, 0x0401015F, 0x041A0280, 0x03B9034F, 0x032E039F, 0x02D00380, 0x02D40333, 0x03370308, -0x03C10339, 0x042303C7, 0x041E047C, 0x03A804FF, 0x02F70500, 0x02700462, 0x027D034F, 0x035F022C, -0x05110178, 0x0744019E, 0x097B02C9, 0x0B3A04DD, 0x0C2A0783, 0x0C310A4C, 0x0B730CD8, 0x0A350EF2, -0x08BF1099, 0x073E11E9, 0x05BE130C, 0x042E141C, 0x0271151B, 0x007615F4, 0xFE381689, 0xFBCB16BE, -0xF9481684, 0xF6CB15D8, 0xF46C14BC, 0xF2401339, 0xF05B1156, 0xEED20F21, 0xEDB90CAD, 0xED200A17, -0xED0B0782, 0xED6E050F, 0xEE3702D6, 0xEF4E00E5, 0xF0A0FF3D, 0xF222FDE2, 0xF3CAFCD8, 0xF58DFC2C, -0xF752FBE7, 0xF8FBFC0C, 0xFA65FC8B, 0xFB73FD44, 0xFC22FE0C, 0xFC7FFEBC, 0xFCADFF3E, 0xFCCEFF93, -0x0429FC0A, 0x0619FD70, 0x0767FF76, 0x07EC01C0, 0x07B103F8, 0x06E305E6, 0x05B60773, 0x044F08A6, -0x02BA0988, 0x00F70A17, 0xFF0B0A3B, 0xFD1009D7, 0xFB3A08DA, 0xF9C80751, 0xF8F1056D, 0xF8CC0378, -0xF94701BD, 0xFA2A0071, 0xFB34FFA1, 0xFC28FF36, 0xFCECFF04, 0xFD83FEDC, 0xFE07FEA3, 0xFE99FE59, -0xFF4EFE0D, 0x002BFDD9, 0x0127FDD1, 0x0231FE00, 0x033AFE68, 0x0435FF08, 0x0514FFE0, 0x05C700EB, -0x063D021D, 0x0666035F, 0x06400490, 0x05DD058F, 0x05620646, 0x04FC06BA, 0x04D1070A, 0x04EE076A, -0x0540080B, 0x05990910, 0x05C00A79, 0x05840C2D, 0x04CA0DFE, 0x038E0FBA, 0x01E01139, 0xFFD81263, -0xFD8F1325, 0xFB1D1374, 0xF89C1344, 0xF6301290, 0xF4031160, 0xF23C0FD4, 0xF0F00E1F, 0xF0140C7A, -0xEF7D0B0D, 0xEEEE09DE, 0xEE3408CA, 0xED3E078E, 0xEC2D05EA, 0xEB4B03BA, 0xEAEE0112, 0xEB59FE36, -0xEC9BFB8C, 0xEE88F96E, 0xF0CDF811, 0xF30CF774, 0xF501F766, 0xF691F7A3, 0xF7CCF7F3, 0xF8D8F83A, -0xF9D7F87E, 0xFAD2F8D5, 0xFBC0F94E, 0xFC89F9E6, 0xFD27FA88, 0xFDA7FB1D, 0xFE26FB9F, 0xFEC2FC28, -0xFF7FFCE8, 0x0037FE0D, 0x00A2FFA8, 0x00730197, 0xFF750387, 0xFDAC050D, 0xFB5905C9, 0xF8E9058F, -0xF6D00473, 0xF56402C2, 0xF4C000E3, 0xF4C8FF33, 0xF53BFDEC, 0xF5CDFD17, 0xF646FC99, 0xF68AFC47, -0xF699FBF8, 0xF680FB90, 0xF652FAFD, 0xF623FA35, 0xF60BF92F, 0xF629F7EC, 0xF6A4F67D, 0xF79AF50D, -0xF911F3DB, 0xFAE8F328, 0xFCD6F31F, 0xFE82F3B8, 0xFF9DF4B9, 0x0009F5C1, 0xFFE5F66A, 0xFF87F673, -0xFF5BF5D9, 0xFFBBF4D7, 0x00CBF3D1, 0x0272F328, 0x0465F317, 0x064FF3A5, 0x07EEF4A7, 0x092FF5E1, -0x0A25F721, 0x0AF5F85B, 0x0BB9F9A1, 0x0C6EFB12, 0x0CF0FCBF, 0x0D13FE9A, 0x0CBB0071, 0x0BF00207, -0x0AE0032D, 0x09D103D7, 0x08FD0427, 0x087F0459, 0x084604A9, 0x08230539, 0x07DD0604, 0x074F06E3, -0x067707A5, 0x05710820, 0x046A084B, 0x038A0836, 0x02E20805, 0x026D07D9, 0x021407C7, 0x01C007CF, -0x016107E9, 0x00F2080A, 0x0071082D, 0xFFD8084D, 0xFF1F0864, 0xFE3C085D, 0xFD310818, 0xFC180774, -0xFB21065F, 0xFA8704E3, 0xFA7E032F, 0xFB160188, 0xFC3A0036, 0xFDB0FF66, 0xFF35FF1C, 0x0096FF38, -0x01C1FF86, 0x02D0FFDC, 0x03F00032, 0x054A00AA, 0x06E30183, 0x089302FC, 0x0A060537, 0x0ADD081F, -0x0AC80B6E, 0x09A70EBA, 0x07911197, 0x04CF13B5, 0x01BD14F5, 0xFEB21567, 0xFBE9153B, 0xF97314AB, -0xF74613DF, 0xF54C12EB, 0xF37311C8, 0xF1BF1064, 0xF0480EB6, 0xEF330CC6, 0xEE9D0AB8, 0xEE9308C1, -0xEEFE071C, 0xEFAE05F2, 0xF05D0552, 0xF0C9051F, 0xF0C30521, 0xF045050B, 0xEF72049B, 0xEE8E03AC, -0xEDE60245, 0xEDB60098, 0xEE12FEF1, 0xEEDDFD9C, 0xEFD5FCC4, 0xF0A5FC65, 0xF10EFC48, 0xF0FAFC17, -0xF08EFB7C, 0xF01AFA44, 0xF006F871, 0xF0A7F641, 0xF22CF416, 0xF487F261, 0xF777F17A, 0xFA99F191, -0xFD86F2A3, 0xFFE5F485, 0x017EF6F1, 0x0239F995, 0x021BFC27, 0x0142FE65, 0xFFDB001D, 0xFE200132, -0xFC51019E, 0xFAAA0174, 0xF95500E0, 0xF8600015, 0xF7BFFF43, 0xF74DFE85, 0xF6E5FDD5, 0xF674FD18, -0xF604FC28, 0xF5BBFAF2, 0xF5CDF985, 0xF65BF810, 0xF766F6D7, 0xF8C0F614, 0xFA20F5DD, 0xFB3EF615, -0xFBF2F67D, 0xFC43F6CA, 0xFC67F6CB, 0xFCA4F67E, 0xFD2BF611, 0xFE01F5CA, 0xFEF5F5DA, 0xFFBCF647, -0x001AF6D9, 0x0002F737, 0xFFAFF70C, 0xFF8EF636, 0x0014F4E3, 0x018BF386, 0x03ECF2B0, 0x06D9F2DD, -0x09BDF43B, 0x0C03F6A1, 0x0D47F999, 0x0D7DFC94, 0x0CE5FF1F, 0x0BED010B, 0x0AF80273, 0x0A3A03A1, -0x09A204E5, 0x08F2066B, 0x07DC0823, 0x062F09CC, 0x03ED0B10, 0x014B0BAC, 0xFE980B82, 0xFC220AA8, -0xFA19094D, 0xF88A07A8, 0xF76B05DF, 0xF6AC0404, 0xF649021A, 0xF64D002C, 0xF6C3FE53, 0xF7A8FCB9, -0xF8E1FB87, 0xFA37FAD7, 0xFB6CFA9C, 0xFC51FAAB, 0xFCDDFAC4, 0xFD2BFAB0, 0xFD72FA56, 0xFDEAF9C2, -0xFEB6F923, 0xFFD4F8AE, 0x0123F887, 0x0278F8B7, 0x03B2F92C, 0x04CBF9C8, 0x05D1FA79, 0x06D8FB48, -0x07E8FC51, 0x08E6FDB5, 0x099FFF7F, 0x09D50195, 0x096403B5, 0x0851058B, 0x06D606D1, 0x054D076F, -0x04130787, 0x035B076C, 0x031D0785, 0x0311081E, 0x02CA094B, 0x01E20AD8, 0x001D0C5B, 0xFD860D53, -0xFA6F0D57, 0xF7570C39, 0xF4C30A10, 0xF31A0733, 0xF285041B, 0xF2F0013D, 0xF416FEF1, 0xF59CFD59, -0xF72CFC6D, 0xF88CFBFE, 0xF9A4FBD5, 0xFA7DFBC2, 0xFB33FBA9, 0xFBE3FB86, 0xFCA1FB67, 0xFD71FB62, -0xFE48FB89, 0xFF0FFBE3, 0xFFB0FC69, 0x0019FD07, 0x0047FDA3, 0x0042FE24, 0x001DFE78, 0xFFF3FE99, -0xFFD9FE8B, 0xFFE3FE5A, 0x001FFE19, 0x0093FDDD, 0x013DFDBB, 0x0219FDCA, 0x0318FE22, 0x0421FED4, -0x0510FFED, 0x05BE0166, 0x06030328, 0x05C60509, 0x050206D8, 0x03C90866, 0x023F0997, 0x008E0A62, -0xFED40AD5, 0xFD210B04, 0xFB6F0B01, 0xF9B00ACC, 0xF7DF0A51, 0xF6060977, 0xF4480827, 0xF2D60664, -0xF1DD044E, 0xF174021A, 0xF1920002, 0xF212FE2C, 0xF2C3FCA4, 0xF382FB53, 0xF448FA18, 0xF52AF8DB, -0xF64EF7A5, 0xF7CDF69C, 0xF99DF5FD, 0xFB85F5FA, 0xFD32F69A, 0xFE50F7AE, 0xFEB1F8D9, 0xFE65F9AA, -0xFDC0F9CC, 0xFD38F926, 0xFD40F7E9, 0xFE1AF67F, 0xFFC3F561, 0x01F5F4EE, 0x0444F54A, 0x0651F659, -0x07E6F7D0, 0x0907F965, 0x09E4FAEB, 0x0AB5FC6A, 0x0B94FE14, 0x0C690025, 0x0CED02C0, 0x0CC505CE, -0x0BAA0902, 0x098C0BE9, 0x069C0E17, 0x033B0F48, 0xFFDD0F7A, 0xFCD90EE1, 0xFA570DD0, 0xF8420C92, -0xF6690B47, 0xF49709DB, 0xF2BE0817, 0xF10505C0, 0xEFBE02B9, 0xEF51FF22, 0xF00EFB56, 0xF20EF7DC, -0xF523F53C, 0xF8DDF3DC, 0xFCAAF3E2, 0xFFF9F529, 0x025EF752, 0x03AAF9DF, 0x03EDFC55, 0x0368FE5A - - -in_sequence_size = -408 - -in_leading_padding = -0 - -out_sequence_size = -408 - -out_leading_depadding = -0 - -window_index = -2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 - -cs_bitmap = -1 - -num_antennas_log2 = -3 - -ifft_log2 = -9 - -fft_log2 = -9 - -cs_time_adjustment = -0 - -ifft_shift = -4 - -fft_shift = -5 - -ncs_reciprocal = -5461 - -op_flags = -RTE_BBDEV_FFT_CS_ADJUSTMENT, RTE_BBDEV_FFT_WINDOWING - -expected_status = -OK diff -Nru dpdk-22.11.7/app/test-bbdev/test_vectors/fft_byp_28.data dpdk-22.11.8/app/test-bbdev/test_vectors/fft_byp_28.data --- dpdk-22.11.7/app/test-bbdev/test_vectors/fft_byp_28.data 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test-bbdev/test_vectors/fft_byp_28.data 2025-04-08 19:02:56.000000000 +0000 @@ -30,30 +30,30 @@ 0xF7B50127, 0x0C83E9D9, 0x046B181F, 0x08B612A4, 0x024E0B91, 0x01000207, 0xFC97F83A, 0xF8B40DD4 output0 = -0xFFF0FE8A, 0x01B3FE2F, 0x020EFFF3, 0x000C005A, 0x0040012B, 0xFF70015F, 0xFF40FD66, 0x0120FCAD, -0x01DAFE8E, 0xFF05FFC8, 0x00EE0080, 0x00350269, 0x0094FCA0, 0x0398FD13, 0x03240016, 0xFF7AFEFE, -0x006401AB, 0xFDB70295, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFB2C034A, 0xFC8F0175, 0xFE6402D8, 0x00810097, 0x015C007D, 0x01760158, 0xFAB702B3, 0xFBC0008C, -0xFDE80195, 0x0050FFB2, 0x012BFFF2, 0x00EB00CD, 0xFAB30041, 0xFCDDFFFF, 0xFD200228, 0xFFD70030, -0x004A0030, 0x004A00A4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x0157004F, 0x01B2FFA3, 0x025EFFFE, 0xFE5D048C, 0xFAC301F3, 0xFD5BFE59, 0xFFE10181, 0x0151FF78, -0x035B00E8, 0xFE3C030C, 0xFB1CFFA5, 0xFE84FC85, 0xFDB80124, 0x0063FF8B, 0x01FC0236, 0xFEEE01EE, -0xFD31FF7F, 0xFFA1FDC2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x034202FC, 0xFFFF0471, 0xFE8B012F, 0x002B0237, 0x00A10164, 0x017301DA, 0x029803A6, 0xFE8A03A1, -0xFE8EFF93, 0xFECC031E, 0xFF180338, 0xFEFE0385, 0x0199041C, 0xFE1B02C8, 0xFF6EFF4A, 0xFEAE0180, -0xFE6A0189, 0xFE610144, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x0143FD7B, 0x03030124, 0xFF5B02E4, 0x00A6FFE1, 0x001901AD, 0xFE4D0120, 0x0109FD68, 0x01A90075, -0xFE9C0115, 0x01AB0028, 0xFF9D0119, 0xFEACFF0B, 0x01C2FCFD, 0x0211000C, 0xFF02005C, 0x00D600A9, -0xFFAD0038, 0x001EFF0E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x0180FE7E, 0x0186FED1, 0x0133FED6, 0xFE52FFE6, 0xFFCB00C9, 0xFEE70242, 0x00ACFE85, 0x019DFF6D, -0x00B5005F, 0xFF0501FC, 0xFE9100E4, 0xFFA90070, 0x00D0FDE8, 0x017DFEDA, 0x008AFF87, 0xFDF101B9, -0xFE30001D, 0xFFCD005C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x032A0018, 0x0472FEFA, 0x05900042, 0x0034FE3D, 0x00AEFF8E, 0xFF5D0008, 0x031F0119, 0x055100BB, -0x05AE02EC, 0x0036FE6A, 0x00100002, 0xFE78FFDC, 0x03D40175, 0x04410261, 0x035502CE, 0x00A0FE4E, -0x001EFFCF, 0xFE9DFF4C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFF8AFE0D, 0x01F3FFD6, 0x002A023F, 0x005FFF16, 0x020C003C, 0x00E601EA, 0x003DFE48, 0x025A00FD, -0xFFA5031A, 0x004C0068, 0x011500DC, 0x00A101A5, 0x0087FD60, 0x01BC01B5, 0xFD6602EA, 0x006A01B3, -0x00090192, 0x002A0131, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 +0xFFF0FE8A, 0x01B3FE2F, 0x020EFFF3, 0xFC0901D2, 0x027501DE, 0xFF660279, 0x00ADFA89, 0xFE72FF52, +0x0450FD29, 0xFB34FF92, 0x032C0136, 0xFE780346, 0x01BFFAC9, 0x00DDFF9A, 0x068FFF1F, 0xFB6DFF18, +0x02D9034F, 0xFCFF0289, 0x0101FEA7, 0xFD2D016A, 0x02E40068, 0x00000000, 0x00000000, 0x00000000, +0xFB2C034A, 0xFC8F0175, 0xFE6402D8, 0x0054FD1C, 0xFFA403AA, 0x02E1000F, 0xFBBE06CD, 0xFB8FFDEA, +0xFF910362, 0x0031FCA4, 0x00BA02DD, 0x0138FE72, 0xFBC80412, 0xFC67FD73, 0xFEDA0415, 0x00D3FD1C, +0xFDCA02DA, 0x0260FF7E, 0x0055046F, 0x0033FCD9, 0x0115029F, 0x00000000, 0x00000000, 0x00000000, +0x0157004F, 0x01B2FFA3, 0x025EFFFE, 0xFF090623, 0xFAA8024A, 0xFF63FD71, 0xFD3DFEE3, 0x025000C5, +0x010A0140, 0xFEFA0575, 0xFA6BFF7D, 0x0177FCA0, 0xFC05FF1E, 0x01D500C8, 0xFFC20139, 0xFE1A0397, +0xFD29003C, 0x020FFDE0, 0xFE3FFCB4, 0x00740264, 0xFEA4FEEA, 0x00000000, 0x00000000, 0x00000000, +0x034202FC, 0xFFFF0471, 0xFE8B012F, 0xFF440324, 0x0224032D, 0x02A6FF74, 0x04D00629, 0xFC86FEE6, +0xFE59041B, 0xFD140405, 0x00830542, 0x008401C8, 0x034707AB, 0xFCCEFCE1, 0xFE6304CE, 0xFD2A022A, +0xFF88041C, 0x0080FF16, 0x005502F2, 0x0006FB55, 0xFE420451, 0x00000000, 0x00000000, 0x00000000, +0x0143FD7B, 0x03030124, 0xFF5B02E4, 0x0064FE8F, 0xFDE7013A, 0xFEBA0406, 0x01DFFF4B, 0x023F00C1, +0x0035FF5C, 0x01D9FF2E, 0xFD26FFAA, 0xFEB902C3, 0x020FFF39, 0x02F600F7, 0x0144FE3F, 0x00DEFE9B, +0xFE25FE61, 0xFDC20265, 0xFFA00261, 0x00D00119, 0x02A9FE77, 0x00000000, 0x00000000, 0x00000000, +0x0180FE7E, 0x0186FED1, 0x0133FED6, 0xFF9B01B2, 0xFD94FF7A, 0x019B0480, 0xFD99FFDF, 0x02210198, +0x03B600C2, 0xFFE6037E, 0xFC71FF70, 0x01D90323, 0xFDA0FE73, 0x00DE01A8, 0x04810088, 0xFE5A033B, +0xFBEDFDBF, 0x01340495, 0xFC67FFF8, 0xFE9A0247, 0x03A402B8, 0x00000000, 0x00000000, 0x00000000, +0x032A0018, 0x0472FEFA, 0x05900042, 0xFEF6FE6B, 0x0155FDD4, 0xFD290258, 0x02FE0438, 0x077BFE5F, +0x0447033F, 0xFEC5FC97, 0xFF6EFFE3, 0xFD27020C, 0x03810467, 0x05140185, 0x0498032B, 0x0001FE27, +0x014EFE85, 0xFBFD0004, 0xFE8E0309, 0x018BFE07, 0xFF8601E0, 0x00000000, 0x00000000, 0x00000000, +0xFF8AFE0D, 0x01F3FFD6, 0x002A023F, 0x0341029B, 0x01F2FC54, 0x009D030A, 0xFE5FFE5B, 0x039B01AC, +0xFF260308, 0x023404C9, 0x01D3FCFC, 0x006402DF, 0x0043FC95, 0x02E90289, 0xFC41012D, 0x020E070B, +0x01D0FD78, 0xFFA001E1, 0xFEA900C2, 0x022801E2, 0x007CFD4D, 0x00000000, 0x00000000, 0x00000000 in_sequence_size = diff -Nru dpdk-22.11.7/app/test-pmd/cmdline.c dpdk-22.11.8/app/test-pmd/cmdline.c --- dpdk-22.11.7/app/test-pmd/cmdline.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test-pmd/cmdline.c 2025-04-08 19:02:56.000000000 +0000 @@ -3046,6 +3046,9 @@ uint8_t pfc_en; int ret; + if (port_id_is_invalid(port_id, ENABLED_WARN)) + return; + port = &ports[port_id]; /** Check if the port is not started **/ if (port->port_status != RTE_PORT_STOPPED) { @@ -6237,6 +6240,9 @@ int rx_fc_enable, tx_fc_enable; int ret; + if (port_id_is_invalid(res->port_id, ENABLED_WARN)) + return; + /* * Rx on/off, flow control is enabled/disabled on RX side. This can indicate * the RTE_ETH_FC_TX_PAUSE, Transmit pause frame at the Rx side. @@ -10915,7 +10921,7 @@ struct cmd_rx_offload_get_configuration_result *res = parsed_result; struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; struct rte_eth_conf dev_conf; uint64_t port_offloads; uint64_t queue_offloads; @@ -10923,12 +10929,13 @@ int q; int ret; - printf("Rx Offloading Configuration of port %d :\n", port_id); - ret = eth_dev_conf_get_print_err(port_id, &dev_conf); if (ret != 0) return; + port = &ports[port_id]; + printf("Rx Offloading Configuration of port %d :\n", port_id); + port_offloads = dev_conf.rxmode.offloads; printf(" Port :"); print_rx_offloads(port_offloads); @@ -11033,12 +11040,17 @@ struct cmd_config_per_port_rx_offload_result *res = parsed_result; portid_t port_id = res->port_id; struct rte_eth_dev_info dev_info; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; uint16_t nb_rx_queues; int q; int ret; + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + + port = &ports[port_id]; if (port->port_status != RTE_PORT_STOPPED) { fprintf(stderr, "Error: Can't config offload when Port %d is not stopped\n", @@ -11141,10 +11153,15 @@ struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; uint16_t queue_id = res->queue_id; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; int ret; + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + + port = &ports[port_id]; if (port->port_status != RTE_PORT_STOPPED) { fprintf(stderr, "Error: Can't config offload when Port %d is not stopped\n", @@ -11152,10 +11169,6 @@ return; } - ret = eth_dev_info_get_print_err(port_id, &dev_info); - if (ret != 0) - return; - if (queue_id >= dev_info.nb_rx_queues) { fprintf(stderr, "Error: input queue_id should be 0 ... %d\n", @@ -11334,7 +11347,7 @@ struct cmd_tx_offload_get_configuration_result *res = parsed_result; struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; struct rte_eth_conf dev_conf; uint64_t port_offloads; uint64_t queue_offloads; @@ -11342,12 +11355,12 @@ int q; int ret; - printf("Tx Offloading Configuration of port %d :\n", port_id); - ret = eth_dev_conf_get_print_err(port_id, &dev_conf); if (ret != 0) return; + printf("Tx Offloading Configuration of port %d :\n", port_id); + port = &ports[port_id]; port_offloads = dev_conf.txmode.offloads; printf(" Port :"); print_tx_offloads(port_offloads); @@ -11456,12 +11469,17 @@ struct cmd_config_per_port_tx_offload_result *res = parsed_result; portid_t port_id = res->port_id; struct rte_eth_dev_info dev_info; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; uint16_t nb_tx_queues; int q; int ret; + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + + port = &ports[port_id]; if (port->port_status != RTE_PORT_STOPPED) { fprintf(stderr, "Error: Can't config offload when Port %d is not stopped\n", @@ -11567,10 +11585,15 @@ struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; uint16_t queue_id = res->queue_id; - struct rte_port *port = &ports[port_id]; + struct rte_port *port; uint64_t single_offload; int ret; + ret = eth_dev_info_get_print_err(port_id, &dev_info); + if (ret != 0) + return; + + port = &ports[port_id]; if (port->port_status != RTE_PORT_STOPPED) { fprintf(stderr, "Error: Can't config offload when Port %d is not stopped\n", @@ -11578,10 +11601,6 @@ return; } - ret = eth_dev_info_get_print_err(port_id, &dev_info); - if (ret != 0) - return; - if (queue_id >= dev_info.nb_tx_queues) { fprintf(stderr, "Error: input queue_id should be 0 ... %d\n", diff -Nru dpdk-22.11.7/app/test-pmd/cmdline_flow.c dpdk-22.11.8/app/test-pmd/cmdline_flow.c --- dpdk-22.11.7/app/test-pmd/cmdline_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test-pmd/cmdline_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -690,20 +690,20 @@ .select_ipv4 = 1, .select_vlan = 0, .select_tos_ttl = 0, - .vni = "\x00\x00\x00", + .vni = { 0x00, 0x00, 0x00 }, .udp_src = 0, .udp_dst = RTE_BE16(RTE_VXLAN_DEFAULT_PORT), .ipv4_src = RTE_IPV4(127, 0, 0, 1), .ipv4_dst = RTE_IPV4(255, 255, 255, 255), - .ipv6_src = "\x00\x00\x00\x00\x00\x00\x00\x00" - "\x00\x00\x00\x00\x00\x00\x00\x01", - .ipv6_dst = "\x00\x00\x00\x00\x00\x00\x00\x00" - "\x00\x00\x00\x00\x00\x00\x11\x11", + .ipv6_src = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + .ipv6_dst = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11 }, .vlan_tci = 0, .ip_tos = 0, .ip_ttl = 255, - .eth_src = "\x00\x00\x00\x00\x00\x00", - .eth_dst = "\xff\xff\xff\xff\xff\xff", + .eth_src = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .eth_dst = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; /** Maximum number of items in struct rte_flow_action_vxlan_encap. */ @@ -726,16 +726,16 @@ struct nvgre_encap_conf nvgre_encap_conf = { .select_ipv4 = 1, .select_vlan = 0, - .tni = "\x00\x00\x00", + .tni = { 0x00, 0x00, 0x00 }, .ipv4_src = RTE_IPV4(127, 0, 0, 1), .ipv4_dst = RTE_IPV4(255, 255, 255, 255), - .ipv6_src = "\x00\x00\x00\x00\x00\x00\x00\x00" - "\x00\x00\x00\x00\x00\x00\x00\x01", - .ipv6_dst = "\x00\x00\x00\x00\x00\x00\x00\x00" - "\x00\x00\x00\x00\x00\x00\x11\x11", + .ipv6_src = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, + .ipv6_dst = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11 }, .vlan_tci = 0, - .eth_src = "\x00\x00\x00\x00\x00\x00", - .eth_dst = "\xff\xff\xff\xff\xff\xff", + .eth_src = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .eth_dst = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; /** Maximum number of items in struct rte_flow_action_nvgre_encap. */ @@ -6519,7 +6519,8 @@ void *buf, unsigned int size) { const struct arg *arg = pop_args(ctx); - static const uint8_t conv[] = "\x00\x80\xc0\xe0\xf0\xf8\xfc\xfe\xff"; + static const uint8_t conv[] = { 0x00, 0x80, 0xc0, 0xe0, 0xf0, + 0xf8, 0xfc, 0xfe, 0xff }; char *end; uintmax_t u; unsigned int bytes; diff -Nru dpdk-22.11.7/app/test-pmd/config.c dpdk-22.11.8/app/test-pmd/config.c --- dpdk-22.11.7/app/test-pmd/config.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/app/test-pmd/config.c 2025-04-08 19:02:56.000000000 +0000 @@ -6527,8 +6527,8 @@ printf("\n TC : "); for (i = 0; i < dcb_info.nb_tcs; i++) printf("\t%4d", i); - printf("\n Priority : "); - for (i = 0; i < dcb_info.nb_tcs; i++) + printf("\n Prio2TC : "); + for (i = 0; i < RTE_ETH_DCB_NUM_USER_PRIORITIES; i++) printf("\t%4d", dcb_info.prio_tc[i]); printf("\n BW percent :"); for (i = 0; i < dcb_info.nb_tcs; i++) diff -Nru dpdk-22.11.7/buildtools/get-numa-count.py dpdk-22.11.8/buildtools/get-numa-count.py --- dpdk-22.11.7/buildtools/get-numa-count.py 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/buildtools/get-numa-count.py 2025-04-08 19:02:56.000000000 +0000 @@ -11,7 +11,7 @@ if os.name == 'posix': if os.path.isdir('/sys/devices/system/node'): numa_nodes = glob.glob('/sys/devices/system/node/node*') - numa_nodes.sort(key=lambda l: int(re.findall('\d+', l)[0])) + numa_nodes.sort(key=lambda l: int(re.findall(r'\d+', l)[0])) print(int(os.path.basename(numa_nodes[-1])[4:]) + 1) else: subprocess.run(['sysctl', '-n', 'vm.ndomains'], check=False) diff -Nru dpdk-22.11.7/config/meson.build dpdk-22.11.8/config/meson.build --- dpdk-22.11.7/config/meson.build 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/config/meson.build 2025-04-08 19:02:56.000000000 +0000 @@ -262,7 +262,7 @@ # enable extra warnings and disable any unwanted warnings # -Wall is added by default at warning level 1, and -Wextra # at warning level 2 (DPDK default) -warning_flags = [ +global_cflags = [ # additional warnings in alphabetical order '-Wcast-qual', '-Wdeprecated', @@ -283,22 +283,25 @@ '-Wno-address-of-packed-member', '-Wno-packed-not-aligned', '-Wno-missing-field-initializers', + + # guarantee that all non-initialized parts of structure/union are zero + '-fzero-init-padding-bits=all', ] if cc.get_id() == 'gcc' and cc.version().version_compare('>=10.0') # FIXME: Bugzilla 396 - warning_flags += '-Wno-zero-length-bounds' + global_cflags += '-Wno-zero-length-bounds' endif if not dpdk_conf.get('RTE_ARCH_64') # for 32-bit, don't warn about casting a 32-bit pointer to 64-bit int - it's fine!! - warning_flags += '-Wno-pointer-to-int-cast' + global_cflags += '-Wno-pointer-to-int-cast' endif if cc.get_id() == 'intel' warning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656] foreach i:warning_ids - warning_flags += '-diag-disable=@0@'.format(i) + global_cflags += '-diag-disable=@0@'.format(i) endforeach endif -foreach arg: warning_flags +foreach arg: global_cflags if cc.has_argument(arg) add_project_arguments(arg, language: 'c') endif diff -Nru dpdk-22.11.7/debian/changelog dpdk-22.11.8/debian/changelog --- dpdk-22.11.7/debian/changelog 2024-12-13 23:28:47.000000000 +0000 +++ dpdk-22.11.8/debian/changelog 2025-04-08 21:53:10.000000000 +0000 @@ -1,3 +1,10 @@ +dpdk (22.11.8-1~deb12u1) bookworm; urgency=medium + + * New upstream release 22.11.8; for a full list of changes see: + http://doc.dpdk.org/guides-22.11/rel_notes/release_22_11.html + + -- Luca Boccassi Tue, 08 Apr 2025 22:53:10 +0100 + dpdk (22.11.7-1~deb12u1) bookworm-security; urgency=medium * Update upstream source from tag 'upstream/22.11.7' diff -Nru dpdk-22.11.7/devtools/check-meson.py dpdk-22.11.8/devtools/check-meson.py --- dpdk-22.11.7/devtools/check-meson.py 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/devtools/check-meson.py 2025-04-08 19:02:56.000000000 +0000 @@ -51,7 +51,7 @@ code, comments = split_code_comments(line) if not code.strip(): continue - if re.match('^ *\t', code): + if re.match(r'^ *\t', code): print(f'Error parsing {filename}:{lineno}, got some tabulation') if code.endswith('files('): if infiles: diff -Nru dpdk-22.11.7/doc/guides/nics/e1000em.rst dpdk-22.11.8/doc/guides/nics/e1000em.rst --- dpdk-22.11.7/doc/guides/nics/e1000em.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/e1000em.rst 2025-04-08 19:02:56.000000000 +0000 @@ -153,3 +153,8 @@ #. Qemu e1000 only supports one interrupt source, so link and Rx interrupt should be exclusive. #. Qemu e1000 does not support interrupt auto-clear, application should disable interrupt immediately when woken up. + +Secondary Process Support +------------------------- + +Control plane operations are currently not supported in secondary processes. diff -Nru dpdk-22.11.7/doc/guides/nics/features/gve.ini dpdk-22.11.8/doc/guides/nics/features/gve.ini --- dpdk-22.11.7/doc/guides/nics/features/gve.ini 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features/gve.ini 2025-04-08 19:02:56.000000000 +0000 @@ -6,6 +6,7 @@ [Features] Speed capabilities = Y Link status = Y +Queue start/stop = Y MTU update = Y TSO = Y RSS hash = Y diff -Nru dpdk-22.11.7/doc/guides/nics/features/mana.ini dpdk-22.11.8/doc/guides/nics/features/mana.ini --- dpdk-22.11.7/doc/guides/nics/features/mana.ini 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features/mana.ini 2025-04-08 19:02:56.000000000 +0000 @@ -8,7 +8,6 @@ Link status = P Removal event = Y Rx interrupt = Y -Queue start/stop = Y RSS hash = Y L3 checksum offload = Y L4 checksum offload = Y diff -Nru dpdk-22.11.7/doc/guides/nics/features/netvsc.ini dpdk-22.11.8/doc/guides/nics/features/netvsc.ini --- dpdk-22.11.7/doc/guides/nics/features/netvsc.ini 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features/netvsc.ini 2025-04-08 19:02:56.000000000 +0000 @@ -7,7 +7,6 @@ Speed capabilities = P Link status = Y Free Tx mbuf on demand = Y -Queue start/stop = Y Scattered Rx = Y Promiscuous mode = Y Allmulticast mode = Y diff -Nru dpdk-22.11.7/doc/guides/nics/features/virtio.ini dpdk-22.11.8/doc/guides/nics/features/virtio.ini --- dpdk-22.11.7/doc/guides/nics/features/virtio.ini 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features/virtio.ini 2025-04-08 19:02:56.000000000 +0000 @@ -8,7 +8,6 @@ Link status = Y Link status event = Y Rx interrupt = Y -Queue start/stop = Y Scattered Rx = P Promiscuous mode = Y Allmulticast mode = Y diff -Nru dpdk-22.11.7/doc/guides/nics/features/vmxnet3.ini dpdk-22.11.8/doc/guides/nics/features/vmxnet3.ini --- dpdk-22.11.7/doc/guides/nics/features/vmxnet3.ini 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features/vmxnet3.ini 2025-04-08 19:02:56.000000000 +0000 @@ -7,7 +7,6 @@ Speed capabilities = P Link status = Y Link status event = Y -Queue start/stop = Y MTU update = Y LRO = Y TSO = Y diff -Nru dpdk-22.11.7/doc/guides/nics/features.rst dpdk-22.11.8/doc/guides/nics/features.rst --- dpdk-22.11.7/doc/guides/nics/features.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/features.rst 2025-04-08 19:02:56.000000000 +0000 @@ -149,6 +149,7 @@ ---------------- Supports starting/stopping a specific Rx/Tx queue of a port. +This is required for use deferred start configuration option. * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``, ``tx_queue_stop``. diff -Nru dpdk-22.11.7/doc/guides/nics/igb.rst dpdk-22.11.8/doc/guides/nics/igb.rst --- dpdk-22.11.7/doc/guides/nics/igb.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/igb.rst 2025-04-08 19:02:56.000000000 +0000 @@ -23,6 +23,18 @@ * TCP segmentation offload * Jumbo frames supported +Secondary Process Support +------------------------- + +IGB Physical Function Driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Control plane operations are currently not supported in secondary processes. + +IGB Virtual Function Driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Control plane operations are currently not supported in secondary processes. Limitations or Known issues --------------------------- diff -Nru dpdk-22.11.7/doc/guides/nics/igc.rst dpdk-22.11.8/doc/guides/nics/igc.rst --- dpdk-22.11.7/doc/guides/nics/igc.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/igc.rst 2025-04-08 19:02:56.000000000 +0000 @@ -104,3 +104,8 @@ .. code-block:: console testpmd> flow create 0 ingress pattern end actions rss types ipv4-udp end / end + +Secondary Process Support +------------------------- + +Control plane operations are currently not supported in secondary processes. diff -Nru dpdk-22.11.7/doc/guides/nics/ionic.rst dpdk-22.11.8/doc/guides/nics/ionic.rst --- dpdk-22.11.7/doc/guides/nics/ionic.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/ionic.rst 2025-04-08 19:02:56.000000000 +0000 @@ -7,11 +7,19 @@ The ionic driver provides support for AMD Pensando server adapters. It currently supports the below models: -- DSC-25 dual-port 25G Distributed Services Card `(pdf) `__ -- DSC-100 dual-port 100G Distributed Services Card `(pdf) `__ -- DSC-200 dual-port 200G Distributed Services Card `(pdf) `__ +- DSC-25 dual-port 25G Distributed Services Card + `(pdf) `__ +- DSC-100 dual-port 100G Distributed Services Card + `(pdf) `__ +- DSC2-200 dual-port 200G Distributed Services Card + `(pdf) `__ +- DSC3-400 dual-port 400G Distributed Services Card + `(pdf) `__ -Please visit the AMD Pensando web site at https://www.amd.com/en/accelerators/pensando for more information. +Please visit the +`AMD Pensando Networking +`_ +web site for more information. Identifying the Adapter ----------------------- diff -Nru dpdk-22.11.7/doc/guides/nics/ixgbe.rst dpdk-22.11.8/doc/guides/nics/ixgbe.rst --- dpdk-22.11.7/doc/guides/nics/ixgbe.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/nics/ixgbe.rst 2025-04-08 19:02:56.000000000 +0000 @@ -37,13 +37,11 @@ * (rxq->nb_rx_desc % rxq->rx_free_thresh) == 0 -* rxq->nb_rx_desc < (IXGBE_MAX_RING_DESC - RTE_PMD_IXGBE_RX_MAX_BURST) +* rxq->nb_rx_desc >= IXGBE_MIN_RING_DESC -These conditions are checked in the code. +* rxq->nb_rx_desc <= IXGBE_MAX_RING_DESC -Scattered packets are not supported in this mode. -If an incoming packet is greater than the maximum acceptable length of one "mbuf" data size (by default, the size is 2 KB), -vPMD for RX would be disabled. +These conditions are checked in the code. By default, IXGBE_MAX_RING_DESC is set to 4096 and RTE_PMD_IXGBE_RX_MAX_BURST is set to 32. @@ -459,3 +457,17 @@ Show the bypass configuration for a bypass enabled NIC using the lowest port on the NIC:: testpmd> show bypass config (port_id) + + +Secondary Process Support +------------------------- + +IXGBE Physical Function Driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Control plane operations are currently not supported in secondary processes. + +IXGBE Virtual Function Driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Control plane operations are currently not supported in secondary processes. diff -Nru dpdk-22.11.7/doc/guides/prog_guide/rte_flow.rst dpdk-22.11.8/doc/guides/prog_guide/rte_flow.rst --- dpdk-22.11.7/doc/guides/prog_guide/rte_flow.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/prog_guide/rte_flow.rst 2025-04-08 19:02:56.000000000 +0000 @@ -3499,7 +3499,7 @@ const struct rte_flow_pattern_template_attr attr = {.ingress = 1}; struct rte_flow_item_eth eth_m = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff"; + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; }; struct rte_flow_item pattern[] = { [0] = {.type = RTE_FLOW_ITEM_TYPE_ETH, diff -Nru dpdk-22.11.7/doc/guides/rel_notes/release_22_11.rst dpdk-22.11.8/doc/guides/rel_notes/release_22_11.rst --- dpdk-22.11.7/doc/guides/rel_notes/release_22_11.rst 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/doc/guides/rel_notes/release_22_11.rst 2025-04-08 19:02:56.000000000 +0000 @@ -2816,3 +2816,229 @@ * Cryptodev: * Function test: test scenarios including Cryptodev API testing/CompressDev ISA-L/QAT/ZLIB PMD Testing/FIPS, etc. * Performance test: test scenarios including Thoughput Performance/Cryptodev Latency, etc. + +22.11.8 Release Notes +--------------------- + + +22.11.8 Fixes +~~~~~~~~~~~~~ + +* app/test: fix a merge problem in oop patch +* app/testpmd: avoid crash in DCB config +* app/testpmd: fix out-of-bound reference in offload config +* app/testpmd: show all DCB priority TC map +* build: force GCC 15 to initialize padding bits +* bus/pci: fix registered device name +* ci: point at GitHub mirror +* common/cnxk: fix atomic load in batch ops +* common/cnxk: fix DPI mailbox structure +* common/cnxk: fix inbound IPsec SA setup +* common/cnxk: fix null check +* common/idpf: fix void function returning a value +* crypto/cnxk: fix build with GCC 15 +* crypto/dpaa2_sec: fix bitmask truncation +* crypto/dpaa_sec: fix bitmask truncation +* crypto/openssl: fix CMAC auth context update +* crypto/openssl: validate incorrect RSA signature +* crypto/virtio: fix data queues iteration +* crypto/virtio: fix redundant queue free +* doc: fix feature flags for queue start/stop +* doc: update ionic driver guide +* eal: fix devargs layers parsing out of bounds +* eal: fix undetected NUMA nodes +* eal/linux: fix memseg length in legacy mem init +* eal/linux: remove useless assignments +* eal/x86: fix some intrinsics header include for Windows +* ethdev: convert string initialization +* ethdev: fix functions available in new device event +* event/dpaa: fix bitmask truncation +* examples/ipsec-secgw: fix cryptodev and eventdev IDs +* examples/ipsec-secgw: fix IV length in CTR 192/256 +* examples/l3fwd: fix socket ID check +* examples/ptpclient: fix message parsing +* examples/vhost_crypto: fix user callbacks +* mempool: fix errno in empty create +* net/af_packet: fix socket close on device stop +* net/bnxt: fix crash when representor is re-attached +* net/bnxt: fix indication of allocation +* net/bonding: fix dedicated queue setup +* net/cnxk: fix NIX send header L3 type +* net/dpaa2: fix bitmask truncation +* net/dpaa: fix bitmask truncation +* net/e1000/base: correct mPHY access logic +* net/e1000/base: fix bitwise operation type +* net/e1000/base: fix data type in MAC hash +* net/e1000/base: fix iterator type +* net/e1000/base: fix MAC address hash bit shift +* net/e1000/base: fix NVM data type in bit shift +* net/e1000/base: fix reset for 82580 +* net/e1000/base: fix semaphore timeout value +* net/e1000/base: fix unchecked return +* net/e1000/base: fix uninitialized variable +* net/e1000/base: skip management check for 82575 +* net/e1000: fix crashes in secondary processes +* net/enetfec: remove useless assignment +* net/hinic: fix flow type bitmask overflow +* net/hns3: fix copper port initialization +* net/hns3: fix mbuf freeing in simple Tx path +* net/hns3: fix reset timeout +* net/hns3: remove PVID info dump for VF +* net/hns3: rename RAS module +* net/i40e: remove duplicate code +* net/iavf: check interrupt registration failure +* net/iavf: fix crash on app exit on FreeBSD +* net/iavf: fix mbuf release in Arm multi-process +* net/iavf: remove reset of Tx prepare function pointer +* net/ice: fix dropped packets when using VRRP +* net/ice: fix memory leak in scalar Rx +* net/igc/base: fix bitwise operation type +* net/igc/base: fix data type in MAC hash +* net/igc/base: fix deadlock when writing i225 register +* net/igc/base: fix infinite loop +* net/igc/base: fix iterator type +* net/igc/base: fix LTR for i225 +* net/igc/base: fix MAC address hash bit shift +* net/igc/base: fix NVM data type in bit shift +* net/igc/base: fix semaphore timeout value +* net/igc/base: fix typo in LTR calculation +* net/igc/base: fix unused value +* net/igc/base: increase PHY power up delay +* net/igc/base: reset loop variable +* net/intel: fix build with icx +* net/intel: fix void functions returning a value +* net/ixgbe: fix crashes in secondary processes +* net/ixgbe: fix minimum Rx/Tx descriptors +* net/mana: fix multi-process tracking +* net/mlx5: adjust actions per rule limitation +* net/mlx5: fix actions translation error overwrite +* net/mlx5: fix flush of non-template flow rules +* net/mlx5: fix GRE flow match with SWS +* net/mlx5: fix GRE matching on root table +* net/mlx5: fix hardware packet type translation +* net/mlx5: fix IPIP tunnel verification +* net/mlx5: fix LACP packet handling in isolated mode +* net/mlx5: fix leak in HWS flow counter action +* net/mlx5: fix Netlink socket leak +* net/mlx5: fix polling CQEs +* net/mlx5/hws: fix crash using represented port without ID +* net/mlx5/hws: fix GTP flags matching +* net/netvsc: remove device if its net devices removed +* net/netvsc: scan all net devices under the PCI device +* net/qede: fix debug messages array +* net/qede: fix nested loops +* net/sfc: remove unnecessary assignment +* net/thunderx/base: fix build with GCC 15 +* net/txgbe: remove useless condition for SW-FW sync +* pdump: clear statistics when enabled +* raw/cnxk_gpio: fix file descriptor leak +* Revert "examples/vhost_crypto: fix user callbacks" +* stack: fix pop in C11 implementation +* test/bbdev: update FFT test vectors +* test/bonding: fix active backup receive test +* test/crypto: fix AES-ECB test lengths +* test/crypto: fix check for OOP header data +* test/crypto: remove unused variable +* test/dma: fix pointers in IOVA as PA mode +* test/event: fix number of queues in eventdev conf +* test/ring: fix init with custom number of lcores +* use Python raw string notation +* version: 22.11.8-rc1 +* vhost: add null callback checks +* vhost: check descriptor chains length +* vhost: check GSO size validity +* vhost: clear ring addresses when getting vring base + +22.11.8 Validation +~~~~~~~~~~~~~~~~~~ + +* Red Hat(R) Testing + + * Platform + + * RHEL 9.2 + * Kernel 5.14 + * Qemu 7.2.0 + * libvirt 9.0 + * openvswitch 3.1 + * X540-AT2 NIC(ixgbe, 10G) + + * Functionality + + * Guest with device assignment(PF) throughput testing(1G hugepage size) + * Guest with device assignment(PF) throughput testing(2M hugepage size) + * Guest with device assignment(VF) throughput testing + * PVP (host dpdk testpmd as vswitch) 1Q: throughput testing + * PVP vhost-user 2Q throughput testing + * PVP vhost-user 1Q cross numa node throughput testing + * Guest with vhost-user 2 queues throughput testing + * vhost-user reconnect with dpdk-client, qemu-server: qemu reconnect + * vhost-user reconnect with dpdk-client, qemu-server: ovs reconnect + * PVP reconnect with dpdk-client, qemu-server: PASS + * PVP 1Q live migration testing + * PVP 1Q cross numa node live migration testing + * Guest with ovs+dpdk+vhost-user 1Q live migration testing + * Guest with ovs+dpdk+vhost-user 1Q live migration testing (2M) + * Guest with ovs+dpdk+vhost-user 2Q live migration testing + * Guest with ovs+dpdk+vhost-user 4Q live migration testing + * Host PF + DPDK testing + * Host VF + DPDK testing + + +* Intel(R) Testing + + * Basic Intel(R) NIC testing + * Build & CFLAG compile: cover the build test combination with latest GCC/Clang version and the popular OS revision such as Ubuntu24.04, Ubuntu24.10, Fedora41, RHEL10, RHEL9.4, FreeBSD14.2, SUSE15, Centos7.9, AzureLinux3.0, OpenAnolis8.9 etc. + * PF(i40e, ixgbe): test scenarios including RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc. + * VF(i40e, ixgbe): test scenarios including VF-RTE_FLOW/TSO/Jumboframe/checksum offload/VLAN/VXLAN, etc. + * PPF/VF(ice): test scenarios including Switch features/Package Management/Flow Director/Advanced Tx/Advanced RSS/ACL/DCF/Flexible Descriptor, etc. + * Intel NIC single core/NIC performance: test scenarios including PF/VF single core performance test, etc. + * IPsec: test scenarios including ipsec/ipsec-gw/ipsec library basic test - QAT&SW/FIB library, etc. + + * Basic cryptodev and virtio testing + * Virtio: both function and performance test are covered. Such as PVP/Virtio_loopback/virtio-user loopback/virtio-net VM2VM perf testing/VMAWARE ESXI 8.0, etc. + * Cryptodev: + * Function test: test scenarios including Cryptodev API testing/CompressDev ISA-L/QAT/ZLIB PMD Testing/FIPS, etc. + * Performance test: test scenarios including Thoughput Performance/Cryptodev Latency, etc. + + +* Nvidia(R) Testing + + * Basic functionality via testpmd/example applications + + * Tx/Rx + * xstats + * Timestamps + * Link status + * RTE flow and flow_director + * RSS + * VLAN filtering, stripping and insertion + * Checksum/TSO + * ptype + * link_status_interrupt example application + * l3fwd-power example application + * Multi-process example applications + * Hardware LRO tests + * Buffer Split tests + * Tx scheduling tests + + * Build tests + + * Ubuntu 22.04 with MLNX_OFED_LINUX-24.10-2.1.8.0. + * Ubuntu 24.04 with MLNX_OFED_LINUX-24.10-2.1.8.0. + * Ubuntu 22.04 with rdma-core master (9e9a957). + * Ubuntu 24.04 with rdma-core v50.0. + * Fedora 41 with rdma-core v51.0. + * Fedora 43 (Rawhide) with rdma-core v56.0. + * OpenSUSE Leap 15.6 with rdma-core v49.1. + + * BlueField-2 + + * DOCA 2.10.0 + * fw 24.44.1036 + + * ConnectX-6 Dx + + * Ubuntu 22.04 + * Driver MLNX_OFED_LINUX-24.10-2.1.8.0 + * fw 22.43.2566 diff -Nru dpdk-22.11.7/drivers/bus/pci/pci_common.c dpdk-22.11.8/drivers/bus/pci/pci_common.c --- dpdk-22.11.7/drivers/bus/pci/pci_common.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/bus/pci/pci_common.c 2025-04-08 19:02:56.000000000 +0000 @@ -99,21 +99,11 @@ /* Each device has its internal, canonical name set. */ rte_pci_device_name(&dev->addr, dev->name, sizeof(dev->name)); + dev->device.name = dev->name; + devargs = pci_devargs_lookup(&dev->addr); dev->device.devargs = devargs; - /* When using a blocklist, only blocked devices will have - * an rte_devargs. Allowed devices won't have one. - */ - if (devargs != NULL) - /* If an rte_devargs exists, the generic rte_device uses the - * given name as its name. - */ - dev->device.name = dev->device.devargs->name; - else - /* Otherwise, it uses the internal, canonical form. */ - dev->device.name = dev->name; - if (dev->bus_info != NULL || asprintf(&dev->bus_info, "vendor_id=%"PRIx16", device_id=%"PRIx16, dev->id.vendor_id, dev->id.device_id) != -1) diff -Nru dpdk-22.11.7/drivers/common/cnxk/cnxk_security.c dpdk-22.11.8/drivers/common/cnxk/cnxk_security.c --- dpdk-22.11.7/drivers/common/cnxk/cnxk_security.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/common/cnxk/cnxk_security.c 2025-04-08 19:02:56.000000000 +0000 @@ -356,7 +356,7 @@ /* Initialize the SA */ roc_ot_ipsec_inb_sa_init(sa, is_inline); - w2.u64 = 0; + w2.u64 = sa->w2.u64; rc = ot_ipsec_sa_common_param_fill(&w2, sa->cipher_key, sa->w8.s.salt, sa->hmac_opad_ipad, ipsec_xfrm, crypto_xfrm); diff -Nru dpdk-22.11.7/drivers/common/cnxk/roc_bphy_cgx.c dpdk-22.11.8/drivers/common/cnxk/roc_bphy_cgx.c --- dpdk-22.11.7/drivers/common/cnxk/roc_bphy_cgx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/common/cnxk/roc_bphy_cgx.c 2025-04-08 19:02:56.000000000 +0000 @@ -364,20 +364,20 @@ { uint64_t scr1, scr0; + if (!mode) + return -EINVAL; + + if (!roc_cgx) + return -EINVAL; + if (roc_model_is_cn9k() && (mode->use_portm_idx || mode->portm_idx || mode->mode_group_idx)) { return -ENOTSUP; } - if (!roc_cgx) - return -EINVAL; - if (!roc_bphy_cgx_lmac_exists(roc_cgx, lmac)) return -ENODEV; - if (!mode) - return -EINVAL; - scr1 = FIELD_PREP(SCR1_ETH_CMD_ID, ETH_CMD_MODE_CHANGE) | FIELD_PREP(SCR1_ETH_MODE_CHANGE_ARGS_SPEED, mode->speed) | FIELD_PREP(SCR1_ETH_MODE_CHANGE_ARGS_DUPLEX, mode->full_duplex) | diff -Nru dpdk-22.11.7/drivers/common/cnxk/roc_dpi_priv.h dpdk-22.11.8/drivers/common/cnxk/roc_dpi_priv.h --- dpdk-22.11.7/drivers/common/cnxk/roc_dpi_priv.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/common/cnxk/roc_dpi_priv.h 2025-04-08 19:02:56.000000000 +0000 @@ -27,7 +27,7 @@ /* Command code */ uint64_t cmd : 4; /* Command buffer size in 8-byte words */ - uint64_t csize : 14; + uint64_t csize : 16; /* aura of the command buffer */ uint64_t aura : 20; /* SSO PF function */ diff -Nru dpdk-22.11.7/drivers/common/cnxk/roc_npa.h dpdk-22.11.8/drivers/common/cnxk/roc_npa.h --- dpdk-22.11.7/drivers/common/cnxk/roc_npa.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/common/cnxk/roc_npa.h 2025-04-08 19:02:56.000000000 +0000 @@ -261,7 +261,7 @@ /* Batch alloc status code is updated in bits [5:6] of the first word * of the 128 byte cache line. */ - while (((__atomic_load_n(cache_line, __ATOMIC_RELAXED) >> 5) & 0x3) == + while (((__atomic_load_n(cache_line, __ATOMIC_ACQUIRE) >> 5) & 0x3) == ALLOC_CCODE_INVAL) if (wait_us && (plt_tsc_cycles() - start) >= ticks) break; diff -Nru dpdk-22.11.7/drivers/crypto/cnxk/cnxk_se.h dpdk-22.11.8/drivers/crypto/cnxk/cnxk_se.h --- dpdk-22.11.7/drivers/crypto/cnxk/cnxk_se.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/cnxk/cnxk_se.h 2025-04-08 19:02:56.000000000 +0000 @@ -2752,7 +2752,7 @@ { uint32_t ci_data_length, ci_data_offset, a_data_length, a_data_offset; struct rte_crypto_sym_op *sym_op = cop->sym; - struct roc_se_fc_params fc_params; + struct roc_se_fc_params fc_params = { }; struct rte_mbuf *m_src, *m_dst; uint8_t cpt_op = sess->cpt_op; uint64_t d_offs, d_lens; diff -Nru dpdk-22.11.7/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c dpdk-22.11.8/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c --- dpdk-22.11.7/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c 2025-04-08 19:02:56.000000000 +0000 @@ -1502,8 +1502,8 @@ if (*dpaa2_seqn((*ops)->sym->m_src)) { if (*dpaa2_seqn((*ops)->sym->m_src) & QBMAN_ENQUEUE_FLAG_DCA) { DPAA2_PER_LCORE_DQRR_SIZE--; - DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << - *dpaa2_seqn((*ops)->sym->m_src) & + DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << + *dpaa2_seqn((*ops)->sym->m_src) & QBMAN_EQCR_DCA_IDXMASK); } flags[loop] = *dpaa2_seqn((*ops)->sym->m_src); @@ -1796,7 +1796,7 @@ dq_idx = *dpaa2_seqn(m) - 1; qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0); DPAA2_PER_LCORE_DQRR_SIZE--; - DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx); + DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx); } *dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN; } @@ -4020,7 +4020,7 @@ dqrr_index = qbman_get_dqrr_idx(dq); *dpaa2_seqn(crypto_op->sym->m_src) = QBMAN_ENQUEUE_FLAG_DCA | dqrr_index; DPAA2_PER_LCORE_DQRR_SIZE++; - DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index; + DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index; DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = crypto_op->sym->m_src; ev->event_ptr = crypto_op; } diff -Nru dpdk-22.11.7/drivers/crypto/dpaa_sec/dpaa_sec.c dpdk-22.11.8/drivers/crypto/dpaa_sec/dpaa_sec.c --- dpdk-22.11.7/drivers/crypto/dpaa_sec/dpaa_sec.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/dpaa_sec/dpaa_sec.c 2025-04-08 19:02:56.000000000 +0000 @@ -1910,13 +1910,12 @@ op = *(ops++); if (*dpaa_seqn(op->sym->m_src) != 0) { index = *dpaa_seqn(op->sym->m_src) - 1; - if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) { + if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) { /* QM_EQCR_DCA_IDXMASK = 0x0f */ flags[loop] = ((index & 0x0f) << 8); flags[loop] |= QMAN_ENQUEUE_FLAG_DCA; DPAA_PER_LCORE_DQRR_SIZE--; - DPAA_PER_LCORE_DQRR_HELD &= - ~(1 << index); + DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index); } } @@ -3451,7 +3450,7 @@ /* Save active dqrr entries */ index = ((uintptr_t)dqrr >> 6) & (16/*QM_DQRR_SIZE*/ - 1); DPAA_PER_LCORE_DQRR_SIZE++; - DPAA_PER_LCORE_DQRR_HELD |= 1 << index; + DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index; DPAA_PER_LCORE_DQRR_MBUF(index) = ctx->op->sym->m_src; ev->impl_opaque = index + 1; *dpaa_seqn(ctx->op->sym->m_src) = (uint32_t)index + 1; diff -Nru dpdk-22.11.7/drivers/crypto/openssl/rte_openssl_pmd.c dpdk-22.11.8/drivers/crypto/openssl/rte_openssl_pmd.c --- dpdk-22.11.7/drivers/crypto/openssl/rte_openssl_pmd.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/openssl/rte_openssl_pmd.c 2025-04-08 19:02:56.000000000 +0000 @@ -1594,9 +1594,6 @@ process_auth_final: if (CMAC_Final(ctx, dst, (size_t *)&dstlen) != 1) goto process_auth_err; - - CMAC_CTX_cleanup(ctx); - return 0; process_auth_err: @@ -2808,9 +2805,15 @@ goto err_rsa; } - if (EVP_PKEY_verify_recover(rsa_ctx, tmp, &outlen, + ret = EVP_PKEY_verify_recover(rsa_ctx, tmp, &outlen, op->rsa.sign.data, - op->rsa.sign.length) <= 0) { + op->rsa.sign.length); + if (ret <= 0) { + /* OpenSSL RSA verification returns one on + * successful verification, otherwise 0. Hence, + * this enqueue operation should succeed even if + * invalid signature has been requested in verify. + */ OPENSSL_free(tmp); goto err_rsa; } diff -Nru dpdk-22.11.7/drivers/crypto/virtio/virtio_cryptodev.c dpdk-22.11.8/drivers/crypto/virtio/virtio_cryptodev.c --- dpdk-22.11.7/drivers/crypto/virtio/virtio_cryptodev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/virtio/virtio_cryptodev.c 2025-04-08 19:02:56.000000000 +0000 @@ -479,10 +479,13 @@ /* control queue release */ virtio_crypto_queue_release(hw->cvq); + hw->cvq = NULL; /* data queue release */ - for (i = 0; i < hw->max_dataqueues; i++) + for (i = 0; i < hw->max_dataqueues; i++) { virtio_crypto_queue_release(dev->data->queue_pairs[i]); + dev->data->queue_pairs[i] = NULL; + } } static int @@ -614,6 +617,7 @@ } virtio_crypto_queue_release(vq); + dev->data->queue_pairs[queue_pair_id] = NULL; return 0; } @@ -761,8 +765,6 @@ static int virtio_crypto_dev_uninit(struct rte_cryptodev *cryptodev) { - struct virtio_crypto_hw *hw = cryptodev->data->dev_private; - PMD_INIT_FUNC_TRACE(); if (rte_eal_process_type() == RTE_PROC_SECONDARY) @@ -777,9 +779,6 @@ cryptodev->enqueue_burst = NULL; cryptodev->dequeue_burst = NULL; - /* release control queue */ - virtio_crypto_queue_release(hw->cvq); - rte_free(cryptodev->data); cryptodev->data = NULL; @@ -850,9 +849,8 @@ virtio_crypto_dev_free_mbufs(struct rte_cryptodev *dev) { uint32_t i; - struct virtio_crypto_hw *hw = dev->data->dev_private; - for (i = 0; i < hw->max_dataqueues; i++) { + for (i = 0; i < dev->data->nb_queue_pairs; i++) { VIRTIO_CRYPTO_INIT_LOG_DBG("Before freeing dataq[%d] used " "and unused buf", i); VIRTQUEUE_DUMP((struct virtqueue *) diff -Nru dpdk-22.11.7/drivers/crypto/virtio/virtio_rxtx.c dpdk-22.11.8/drivers/crypto/virtio/virtio_rxtx.c --- dpdk-22.11.7/drivers/crypto/virtio/virtio_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/crypto/virtio/virtio_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -419,12 +419,11 @@ * - Setup vring structure for data queues */ uint16_t i; - struct virtio_crypto_hw *hw = dev->data->dev_private; PMD_INIT_FUNC_TRACE(); /* Start data vring. */ - for (i = 0; i < hw->max_dataqueues; i++) { + for (i = 0; i < dev->data->nb_queue_pairs; i++) { virtio_crypto_vring_start(dev->data->queue_pairs[i]); VIRTQUEUE_DUMP((struct virtqueue *)dev->data->queue_pairs[i]); } diff -Nru dpdk-22.11.7/drivers/event/dpaa/dpaa_eventdev.c dpdk-22.11.8/drivers/event/dpaa/dpaa_eventdev.c --- dpdk-22.11.7/drivers/event/dpaa/dpaa_eventdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/event/dpaa/dpaa_eventdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -101,7 +101,7 @@ qman_dca_index(ev[i].impl_opaque, 0); mbuf = DPAA_PER_LCORE_DQRR_MBUF(i); *dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN; - DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i); + DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i); DPAA_PER_LCORE_DQRR_SIZE--; break; default: @@ -204,11 +204,11 @@ /* Check if there are atomic contexts to be released */ i = 0; while (DPAA_PER_LCORE_DQRR_SIZE) { - if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) { + if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) { qman_dca_index(i, 0); mbuf = DPAA_PER_LCORE_DQRR_MBUF(i); *dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN; - DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i); + DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i); DPAA_PER_LCORE_DQRR_SIZE--; } i++; @@ -274,11 +274,11 @@ /* Check if there are atomic contexts to be released */ i = 0; while (DPAA_PER_LCORE_DQRR_SIZE) { - if (DPAA_PER_LCORE_DQRR_HELD & (1 << i)) { + if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << i)) { qman_dca_index(i, 0); mbuf = DPAA_PER_LCORE_DQRR_MBUF(i); *dpaa_seqn(mbuf) = DPAA_INVALID_MBUF_SEQN; - DPAA_PER_LCORE_DQRR_HELD &= ~(1 << i); + DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << i); DPAA_PER_LCORE_DQRR_SIZE--; } i++; diff -Nru dpdk-22.11.7/drivers/net/af_packet/rte_eth_af_packet.c dpdk-22.11.8/drivers/net/af_packet/rte_eth_af_packet.c --- dpdk-22.11.7/drivers/net/af_packet/rte_eth_af_packet.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/af_packet/rte_eth_af_packet.c 2025-04-08 19:02:56.000000000 +0000 @@ -332,27 +332,12 @@ eth_dev_stop(struct rte_eth_dev *dev) { unsigned i; - int sockfd; struct pmd_internals *internals = dev->data->dev_private; for (i = 0; i < internals->nb_queues; i++) { - sockfd = internals->rx_queue[i].sockfd; - if (sockfd != -1) - close(sockfd); - - /* Prevent use after free in case tx fd == rx fd */ - if (sockfd != internals->tx_queue[i].sockfd) { - sockfd = internals->tx_queue[i].sockfd; - if (sockfd != -1) - close(sockfd); - } - - internals->rx_queue[i].sockfd = -1; - internals->tx_queue[i].sockfd = -1; dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; dev->data->tx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; } - dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN; return 0; } @@ -447,6 +432,7 @@ struct pmd_internals *internals; struct tpacket_req *req; unsigned int q; + int sockfd; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -457,6 +443,20 @@ internals = dev->data->dev_private; req = &internals->req; for (q = 0; q < internals->nb_queues; q++) { + sockfd = internals->rx_queue[q].sockfd; + if (sockfd != -1) + close(sockfd); + + /* Prevent use after free in case tx fd == rx fd */ + if (sockfd != internals->tx_queue[q].sockfd) { + sockfd = internals->tx_queue[q].sockfd; + if (sockfd != -1) + close(sockfd); + } + + internals->rx_queue[q].sockfd = -1; + internals->tx_queue[q].sockfd = -1; + munmap(internals->rx_queue[q].map, 2 * req->tp_block_size * req->tp_block_nr); rte_free(internals->rx_queue[q].rd); diff -Nru dpdk-22.11.7/drivers/net/bnxt/bnxt_ethdev.c dpdk-22.11.8/drivers/net/bnxt/bnxt_ethdev.c --- dpdk-22.11.7/drivers/net/bnxt/bnxt_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/bnxt/bnxt_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -6340,6 +6340,8 @@ static int bnxt_pci_remove(struct rte_pci_device *pci_dev) { struct rte_eth_dev *eth_dev; + uint16_t port_id; + int rc = 0; eth_dev = rte_eth_dev_allocated(pci_dev->device.name); if (!eth_dev) @@ -6349,14 +6351,20 @@ * +ve value will at least help in proper cleanup */ - PMD_DRV_LOG(DEBUG, "BNXT Port:%d pci remove\n", eth_dev->data->port_id); if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - if (eth_dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) - return rte_eth_dev_destroy(eth_dev, - bnxt_representor_uninit); - else - return rte_eth_dev_destroy(eth_dev, - bnxt_dev_uninit); + RTE_ETH_FOREACH_DEV_OF(port_id, &pci_dev->device) { + PMD_DRV_LOG(DEBUG, "BNXT Port:%d pci remove\n", port_id); + eth_dev = &rte_eth_devices[port_id]; + if (eth_dev->data->dev_flags & RTE_ETH_DEV_REPRESENTOR) + rc = rte_eth_dev_destroy(eth_dev, + bnxt_representor_uninit); + else + rc = rte_eth_dev_destroy(eth_dev, + bnxt_dev_uninit); + if (rc != 0) + return rc; + } + return rc; } else { return rte_eth_dev_pci_generic_remove(pci_dev, NULL); } diff -Nru dpdk-22.11.7/drivers/net/bnxt/tf_core/tf_sram_mgr.c dpdk-22.11.8/drivers/net/bnxt/tf_core/tf_sram_mgr.c --- dpdk-22.11.7/drivers/net/bnxt/tf_core/tf_sram_mgr.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/bnxt/tf_core/tf_sram_mgr.c 2025-04-08 19:02:56.000000000 +0000 @@ -898,7 +898,7 @@ tf_sram_slice_2_str(parms->slice_size), tf_sram_bank_2_str(parms->bank_id)); - parms->is_allocated = false; + *parms->is_allocated = false; goto done; } @@ -913,7 +913,7 @@ if (block == NULL) { TFP_DRV_LOG(ERR, "block not found in list 0x%x\n", parms->sram_offset); - parms->is_allocated = false; + *parms->is_allocated = false; goto done; } diff -Nru dpdk-22.11.7/drivers/net/bonding/rte_eth_bond_8023ad.h dpdk-22.11.8/drivers/net/bonding/rte_eth_bond_8023ad.h --- dpdk-22.11.7/drivers/net/bonding/rte_eth_bond_8023ad.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/bonding/rte_eth_bond_8023ad.h 2025-04-08 19:02:56.000000000 +0000 @@ -35,6 +35,9 @@ #define MARKER_TLV_TYPE_INFO 0x01 #define MARKER_TLV_TYPE_RESP 0x02 +#define SLOW_TX_QUEUE_HW_DEFAULT_SIZE 512 +#define SLOW_RX_QUEUE_HW_DEFAULT_SIZE 512 + typedef void (*rte_eth_bond_8023ad_ext_slowrx_fn)(uint16_t slave_id, struct rte_mbuf *lacp_pkt); diff -Nru dpdk-22.11.7/drivers/net/bonding/rte_eth_bond_pmd.c dpdk-22.11.8/drivers/net/bonding/rte_eth_bond_pmd.c --- dpdk-22.11.7/drivers/net/bonding/rte_eth_bond_pmd.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/bonding/rte_eth_bond_pmd.c 2025-04-08 19:02:56.000000000 +0000 @@ -1681,10 +1681,27 @@ } if (internals->mode4.dedicated_queues.enabled == 1) { + struct rte_eth_dev_info member_info = {}; + uint16_t nb_rx_desc = SLOW_RX_QUEUE_HW_DEFAULT_SIZE; + uint16_t nb_tx_desc = SLOW_TX_QUEUE_HW_DEFAULT_SIZE; + + errval = rte_eth_dev_info_get(slave_eth_dev->data->port_id, + &member_info); + if (errval != 0) { + RTE_BOND_LOG(ERR, + "rte_eth_dev_info_get: port=%d, err (%d)", + slave_eth_dev->data->port_id, + errval); + return errval; + } + + if (member_info.rx_desc_lim.nb_min != 0) + nb_rx_desc = member_info.rx_desc_lim.nb_min; + /* Configure slow Rx queue */ errval = rte_eth_rx_queue_setup(slave_eth_dev->data->port_id, - internals->mode4.dedicated_queues.rx_qid, 128, + internals->mode4.dedicated_queues.rx_qid, nb_rx_desc, rte_eth_dev_socket_id(slave_eth_dev->data->port_id), NULL, port->slow_pool); if (errval != 0) { @@ -1696,8 +1713,11 @@ return errval; } + if (member_info.tx_desc_lim.nb_min != 0) + nb_tx_desc = member_info.tx_desc_lim.nb_min; + errval = rte_eth_tx_queue_setup(slave_eth_dev->data->port_id, - internals->mode4.dedicated_queues.tx_qid, 512, + internals->mode4.dedicated_queues.tx_qid, nb_tx_desc, rte_eth_dev_socket_id(slave_eth_dev->data->port_id), NULL); if (errval != 0) { diff -Nru dpdk-22.11.7/drivers/net/cnxk/cn10k_tx.h dpdk-22.11.8/drivers/net/cnxk/cn10k_tx.h --- dpdk-22.11.7/drivers/net/cnxk/cn10k_tx.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/cnxk/cn10k_tx.h 2025-04-08 19:02:56.000000000 +0000 @@ -1340,6 +1340,9 @@ w0->lso_mps = m->tso_segsz; w0->lso_format = NIX_LSO_FORMAT_IDX_TSOV4 + !!(ol_flags & RTE_MBUF_F_TX_IPV6); w1->ol4type = NIX_SENDL4TYPE_TCP_CKSUM; + w1->ol3type = ((!!(ol_flags & RTE_MBUF_F_TX_IPV4)) << 1) + + ((!!(ol_flags & RTE_MBUF_F_TX_IPV6)) << 2) + + !!(ol_flags & RTE_MBUF_F_TX_IP_CKSUM); /* Handle tunnel tso */ if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) && @@ -2031,7 +2034,7 @@ */ const uint8x16_t tbl = { /* [0-15] = il4type:il3type */ - 0x04, /* none (IPv6 assumed) */ + 0x00, /* none */ 0x14, /* RTE_MBUF_F_TX_TCP_CKSUM (IPv6 assumed) */ 0x24, /* RTE_MBUF_F_TX_SCTP_CKSUM (IPv6 assumed) */ 0x34, /* RTE_MBUF_F_TX_UDP_CKSUM (IPv6 assumed) */ @@ -2235,7 +2238,7 @@ const uint8x16x2_t tbl = {{ { /* [0-15] = il4type:il3type */ - 0x04, /* none (IPv6) */ + 0x00, /* none */ 0x14, /* RTE_MBUF_F_TX_TCP_CKSUM (IPv6) */ 0x24, /* RTE_MBUF_F_TX_SCTP_CKSUM (IPv6) */ 0x34, /* RTE_MBUF_F_TX_UDP_CKSUM (IPv6) */ diff -Nru dpdk-22.11.7/drivers/net/cnxk/cn9k_tx.h dpdk-22.11.8/drivers/net/cnxk/cn9k_tx.h --- dpdk-22.11.7/drivers/net/cnxk/cn9k_tx.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/cnxk/cn9k_tx.h 2025-04-08 19:02:56.000000000 +0000 @@ -659,6 +659,9 @@ w0->lso_mps = m->tso_segsz; w0->lso_format = NIX_LSO_FORMAT_IDX_TSOV4 + !!(ol_flags & RTE_MBUF_F_TX_IPV6); w1->ol4type = NIX_SENDL4TYPE_TCP_CKSUM; + w1->ol3type = ((!!(ol_flags & RTE_MBUF_F_TX_IPV4)) << 1) + + ((!!(ol_flags & RTE_MBUF_F_TX_IPV6)) << 2) + + !!(ol_flags & RTE_MBUF_F_TX_IP_CKSUM); /* Handle tunnel tso */ if ((flags & NIX_TX_OFFLOAD_OL3_OL4_CSUM_F) && @@ -1147,7 +1150,7 @@ */ const uint8x16_t tbl = { /* [0-15] = il4type:il3type */ - 0x04, /* none (IPv6 assumed) */ + 0x00, /* none */ 0x14, /* RTE_MBUF_F_TX_TCP_CKSUM (IPv6 assumed) */ 0x24, /* RTE_MBUF_F_TX_SCTP_CKSUM (IPv6 assumed) */ 0x34, /* RTE_MBUF_F_TX_UDP_CKSUM (IPv6 assumed) */ @@ -1351,7 +1354,7 @@ const uint8x16x2_t tbl = {{ { /* [0-15] = il4type:il3type */ - 0x04, /* none (IPv6) */ + 0x00, /* none */ 0x14, /* RTE_MBUF_F_TX_TCP_CKSUM (IPv6) */ 0x24, /* RTE_MBUF_F_TX_SCTP_CKSUM (IPv6) */ 0x34, /* RTE_MBUF_F_TX_UDP_CKSUM (IPv6) */ diff -Nru dpdk-22.11.7/drivers/net/cxgbe/cxgbe_flow.c dpdk-22.11.8/drivers/net/cxgbe/cxgbe_flow.c --- dpdk-22.11.7/drivers/net/cxgbe/cxgbe_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/cxgbe/cxgbe_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -889,8 +889,8 @@ [RTE_FLOW_ITEM_TYPE_ETH] = { .fptr = ch_rte_parsetype_eth, .dmask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0xffff, } }, @@ -918,12 +918,10 @@ .fptr = ch_rte_parsetype_ipv6, .dmask = &(const struct rte_flow_item_ipv6) { .hdr = { - .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .vtc_flow = RTE_BE32(0xff000000), }, }, diff -Nru dpdk-22.11.7/drivers/net/dpaa/dpaa_rxtx.c dpdk-22.11.8/drivers/net/dpaa/dpaa_rxtx.c --- dpdk-22.11.7/drivers/net/dpaa/dpaa_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/dpaa/dpaa_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -683,7 +683,7 @@ /* Save active dqrr entries */ index = DQRR_PTR2IDX(dqrr); DPAA_PER_LCORE_DQRR_SIZE++; - DPAA_PER_LCORE_DQRR_HELD |= 1 << index; + DPAA_PER_LCORE_DQRR_HELD |= UINT64_C(1) << index; DPAA_PER_LCORE_DQRR_MBUF(index) = mbuf; ev->impl_opaque = index + 1; *dpaa_seqn(mbuf) = (uint32_t)index + 1; @@ -1108,13 +1108,12 @@ seqn = *dpaa_seqn(mbuf); if (seqn != DPAA_INVALID_MBUF_SEQN) { index = seqn - 1; - if (DPAA_PER_LCORE_DQRR_HELD & (1 << index)) { + if (DPAA_PER_LCORE_DQRR_HELD & (UINT64_C(1) << index)) { flags[loop] = ((index & QM_EQCR_DCA_IDXMASK) << 8); flags[loop] |= QMAN_ENQUEUE_FLAG_DCA; DPAA_PER_LCORE_DQRR_SIZE--; - DPAA_PER_LCORE_DQRR_HELD &= - ~(1 << index); + DPAA_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << index); } } diff -Nru dpdk-22.11.7/drivers/net/dpaa2/dpaa2_flow.c dpdk-22.11.8/drivers/net/dpaa2/dpaa2_flow.c --- dpdk-22.11.7/drivers/net/dpaa2/dpaa2_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/dpaa2/dpaa2_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -100,8 +100,8 @@ #ifndef __cplusplus static const struct rte_flow_item_eth dpaa2_flow_item_eth_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .type = RTE_BE16(0xffff), }; @@ -117,12 +117,10 @@ static const struct rte_flow_item_ipv6 dpaa2_flow_item_ipv6_mask = { .hdr = { - .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .proto = 0xff }, }; diff -Nru dpdk-22.11.7/drivers/net/dpaa2/dpaa2_rxtx.c dpdk-22.11.8/drivers/net/dpaa2/dpaa2_rxtx.c --- dpdk-22.11.7/drivers/net/dpaa2/dpaa2_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/dpaa2/dpaa2_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -924,7 +924,7 @@ dqrr_index = qbman_get_dqrr_idx(dq); *dpaa2_seqn(ev->mbuf) = dqrr_index + 1; DPAA2_PER_LCORE_DQRR_SIZE++; - DPAA2_PER_LCORE_DQRR_HELD |= 1 << dqrr_index; + DPAA2_PER_LCORE_DQRR_HELD |= UINT64_C(1) << dqrr_index; DPAA2_PER_LCORE_DQRR_MBUF(dqrr_index) = ev->mbuf; } @@ -1305,7 +1305,7 @@ flags[loop] = QBMAN_ENQUEUE_FLAG_DCA | dqrr_index; DPAA2_PER_LCORE_DQRR_SIZE--; - DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dqrr_index); + DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dqrr_index); *dpaa2_seqn(*bufs) = DPAA2_INVALID_MBUF_SEQN; } @@ -1544,7 +1544,7 @@ dq_idx = *dpaa2_seqn(m) - 1; qbman_eq_desc_set_dca(eqdesc, 1, dq_idx, 0); DPAA2_PER_LCORE_DQRR_SIZE--; - DPAA2_PER_LCORE_DQRR_HELD &= ~(1 << dq_idx); + DPAA2_PER_LCORE_DQRR_HELD &= ~(UINT64_C(1) << dq_idx); } *dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN; } diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_80003es2lan.c dpdk-22.11.8/drivers/net/e1000/base/e1000_80003es2lan.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_80003es2lan.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_80003es2lan.c 2025-04-08 19:02:56.000000000 +0000 @@ -426,7 +426,7 @@ ; /* Empty */ swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC); - swfw_sync &= ~mask; + swfw_sync &= ~(u32)mask; E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync); e1000_put_hw_semaphore_generic(hw); diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_82575.c dpdk-22.11.8/drivers/net/e1000/base/e1000_82575.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_82575.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_82575.c 2025-04-08 19:02:56.000000000 +0000 @@ -2279,7 +2279,7 @@ s32 ret_val = E1000_SUCCESS; /* BH SW mailbox bit in SW_FW_SYNC */ u16 swmbsw_mask = E1000_SW_SYNCH_MB; - u32 ctrl; + u32 ctrl, status; bool global_device_reset = hw->dev_spec._82575.global_device_reset; DEBUGFUNC("e1000_reset_hw_82580"); @@ -2344,7 +2344,8 @@ } /* clear global device reset status bit */ - E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET); + status = E1000_READ_REG(hw, E1000_STATUS); + E1000_WRITE_REG(hw, E1000_STATUS, status | E1000_STAT_DEV_RST_SET); /* Clear any pending interrupt events. */ E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_base.c dpdk-22.11.8/drivers/net/e1000/base/e1000_base.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_base.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_base.c 2025-04-08 19:02:56.000000000 +0000 @@ -132,7 +132,8 @@ rfctl |= E1000_RFCTL_IPV6_EX_DIS; E1000_WRITE_REG(hw, E1000_RFCTL, rfctl); - if (!(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN)) + if (hw->mac.type != e1000_82575 || + !(E1000_READ_REG(hw, E1000_MANC) & E1000_MANC_RCV_TCO_EN)) return; /* Disable all Rx queues */ diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_defines.h dpdk-22.11.8/drivers/net/e1000/base/e1000_defines.h --- dpdk-22.11.7/drivers/net/e1000/base/e1000_defines.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_defines.h 2025-04-08 19:02:56.000000000 +0000 @@ -504,6 +504,7 @@ /* SW Semaphore Register */ #define E1000_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ #define E1000_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ +#define E1000_SWSM_TIMEOUT 2000 /* Driver Semaphore max timeout counter */ #define E1000_SWSM_DRV_LOAD 0x00000008 /* Driver Loaded Bit */ #define E1000_SWSM2_LOCK 0x00000002 /* Secondary driver semaphore bit */ diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_ich8lan.c dpdk-22.11.8/drivers/net/e1000/base/e1000_ich8lan.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_ich8lan.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_ich8lan.c 2025-04-08 19:02:56.000000000 +0000 @@ -962,6 +962,8 @@ data &= ~I82579_LPI_100_PLL_SHUT; ret_val = e1000_write_emi_reg_locked(hw, I82579_LPI_PLL_SHUT, data); + if (ret_val) + goto release; } /* R/Clr IEEE MMD 3.1 bits 11:10 - Tx/Rx LPI Received */ diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_mac.c dpdk-22.11.8/drivers/net/e1000/base/e1000_mac.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_mac.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_mac.c 2025-04-08 19:02:56.000000000 +0000 @@ -488,7 +488,7 @@ u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr) { u32 hash_value, hash_mask; - u8 bit_shift = 0; + u8 bit_shift = 1; DEBUGFUNC("e1000_hash_mc_addr_generic"); @@ -498,7 +498,7 @@ /* For a mc_filter_type of 0, bit_shift is the number of left-shifts * where 0xFF would still fall within the hash mask. */ - while (hash_mask >> bit_shift != 0xFF) + while (hash_mask >> bit_shift != 0xFF && bit_shift < 4) bit_shift++; /* The portion of the address that is used for the hash table @@ -541,8 +541,10 @@ break; } - hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | - (((u16) mc_addr[5]) << bit_shift))); + hash_value = (u32)mc_addr[4]; + hash_value = hash_value >> (8 - bit_shift); + hash_value |= (((u32)mc_addr[5]) << bit_shift); + hash_value &= hash_mask; return hash_value; } @@ -1688,7 +1690,7 @@ s32 e1000_get_hw_semaphore_generic(struct e1000_hw *hw) { u32 swsm; - s32 timeout = hw->nvm.word_size + 1; + s32 timeout = E1000_SWSM_TIMEOUT; s32 i = 0; DEBUGFUNC("e1000_get_hw_semaphore_generic"); diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_nvm.c dpdk-22.11.8/drivers/net/e1000/base/e1000_nvm.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_nvm.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_nvm.c 2025-04-08 19:02:56.000000000 +0000 @@ -935,14 +935,14 @@ DEBUGOUT("NVM Not Supported\n"); return -E1000_NOT_IMPLEMENTED; } - *pba_num = (u32)(nvm_data << 16); + *pba_num = ((u32)nvm_data << 16); ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_1, 1, &nvm_data); if (ret_val) { DEBUGOUT("NVM Read Error\n"); return ret_val; } - *pba_num |= nvm_data; + *pba_num |= (u32)nvm_data; return E1000_SUCCESS; } diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_phy.c dpdk-22.11.8/drivers/net/e1000/base/e1000_phy.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_phy.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_phy.c 2025-04-08 19:02:56.000000000 +0000 @@ -2333,7 +2333,8 @@ u32 usec_interval, bool *success) { s32 ret_val = E1000_SUCCESS; - u16 i, phy_status; + u16 phy_status; + u32 i; DEBUGFUNC("e1000_phy_has_link_generic"); @@ -4134,13 +4135,12 @@ *data = E1000_READ_REG(hw, E1000_MPHY_DATA); /* Disable access to mPHY if it was originally disabled */ - if (locked) { + if (locked) ready = e1000_is_mphy_ready(hw); - if (!ready) - return -E1000_ERR_PHY; - E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, - E1000_MPHY_DIS_ACCESS); - } + if (!ready) + return -E1000_ERR_PHY; + E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, + E1000_MPHY_DIS_ACCESS); return E1000_SUCCESS; } @@ -4200,13 +4200,12 @@ E1000_WRITE_REG(hw, E1000_MPHY_DATA, data); /* Disable access to mPHY if it was originally disabled */ - if (locked) { + if (locked) ready = e1000_is_mphy_ready(hw); - if (!ready) - return -E1000_ERR_PHY; - E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, - E1000_MPHY_DIS_ACCESS); - } + if (!ready) + return -E1000_ERR_PHY; + E1000_WRITE_REG(hw, E1000_MPHY_ADDR_CTRL, + E1000_MPHY_DIS_ACCESS); return E1000_SUCCESS; } diff -Nru dpdk-22.11.7/drivers/net/e1000/base/e1000_vf.c dpdk-22.11.8/drivers/net/e1000/base/e1000_vf.c --- dpdk-22.11.7/drivers/net/e1000/base/e1000_vf.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/base/e1000_vf.c 2025-04-08 19:02:56.000000000 +0000 @@ -331,7 +331,7 @@ STATIC u32 e1000_hash_mc_addr_vf(struct e1000_hw *hw, u8 *mc_addr) { u32 hash_value, hash_mask; - u8 bit_shift = 0; + u8 bit_shift = 1; DEBUGFUNC("e1000_hash_mc_addr_generic"); @@ -342,11 +342,13 @@ * The bit_shift is the number of left-shifts * where 0xFF would still fall within the hash mask. */ - while (hash_mask >> bit_shift != 0xFF) + while (hash_mask >> bit_shift != 0xFF && bit_shift < 4) bit_shift++; - hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | - (((u16) mc_addr[5]) << bit_shift))); + hash_value = (u32)mc_addr[4]; + hash_value = hash_value >> (8 - bit_shift); + hash_value |= (((u32)mc_addr[5]) << bit_shift); + hash_value &= hash_mask; return hash_value; } @@ -374,7 +376,7 @@ void e1000_update_mc_addr_list_vf(struct e1000_hw *hw, u8 *mc_addr_list, u32 mc_addr_count) { - u32 msgbuf[E1000_VFMAILBOX_SIZE]; + u32 msgbuf[E1000_VFMAILBOX_SIZE] = {0}; u16 *hash_list = (u16 *)&msgbuf[1]; u32 hash_value; u32 i; diff -Nru dpdk-22.11.7/drivers/net/e1000/em_ethdev.c dpdk-22.11.8/drivers/net/e1000/em_ethdev.c --- dpdk-22.11.7/drivers/net/e1000/em_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/em_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -532,6 +532,14 @@ PMD_INIT_FUNC_TRACE(); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + ret = eth_em_stop(dev); if (ret != 0) return ret; @@ -716,6 +724,14 @@ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = pci_dev->intr_handle; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + dev->data->dev_started = 0; eth_em_rxtx_control(dev, false); @@ -1003,6 +1019,10 @@ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = pci_dev->intr_handle; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + em_rxq_intr_enable(hw); rte_intr_ack(intr_handle); @@ -1014,6 +1034,10 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + em_rxq_intr_disable(hw); return 0; @@ -1639,6 +1663,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); return e1000_led_on(hw) == E1000_SUCCESS ? 0 : -ENOTSUP; } @@ -1648,6 +1680,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); return e1000_led_off(hw) == E1000_SUCCESS ? 0 : -ENOTSUP; } @@ -1709,6 +1749,14 @@ uint32_t max_high_water; uint32_t rctl; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); if (fc_conf->autoneg != hw->mac.autoneg) return -ENOTSUP; @@ -1760,6 +1808,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + return e1000_rar_set(hw, mac_addr->addr_bytes, index); } @@ -1769,6 +1825,14 @@ uint8_t addr[RTE_ETHER_ADDR_LEN]; struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return; + memset(addr, 0, sizeof(addr)); e1000_rar_set(hw, addr, index); @@ -1778,6 +1842,14 @@ eth_em_default_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) { + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + eth_em_rar_clear(dev, 0); return eth_em_rar_set(dev, (void *)addr, 0, 0); @@ -1822,6 +1894,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); e1000_update_mc_addr_list(hw, (u8 *)mc_addr_set, nb_mc_addr); return 0; diff -Nru dpdk-22.11.7/drivers/net/e1000/igb_ethdev.c dpdk-22.11.8/drivers/net/e1000/igb_ethdev.c --- dpdk-22.11.7/drivers/net/e1000/igb_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/e1000/igb_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -1206,6 +1206,14 @@ PMD_INIT_FUNC_TRACE(); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* disable uio/vfio intr/eventfd mapping */ rte_intr_disable(intr_handle); @@ -1421,6 +1429,14 @@ struct e1000_adapter *adapter = E1000_DEV_PRIVATE(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (adapter->stopped) return 0; @@ -1474,6 +1490,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->phy.media_type == e1000_media_type_copper) e1000_power_up_phy(hw); else @@ -1487,6 +1511,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->phy.media_type == e1000_media_type_copper) e1000_power_down_phy(hw); else @@ -2108,6 +2140,14 @@ struct e1000_fw_version fw; int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + e1000_get_fw_version(hw, &fw); switch (hw->mac.type) { @@ -2355,6 +2395,14 @@ struct rte_eth_link link; int link_check, count; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + link_check = 0; hw->mac.get_link_status = 1; @@ -2977,6 +3025,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); return e1000_led_on(hw) == E1000_SUCCESS ? 0 : -ENOTSUP; } @@ -2986,6 +3042,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); return e1000_led_off(hw) == E1000_SUCCESS ? 0 : -ENOTSUP; } @@ -3048,6 +3112,14 @@ uint32_t rctl; uint32_t ctrl; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); if (fc_conf->autoneg != hw->mac.autoneg) return -ENOTSUP; @@ -3134,6 +3206,14 @@ struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t rah; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + e1000_rar_set(hw, mac_addr->addr_bytes, index); rah = E1000_READ_REG(hw, E1000_RAH(index)); rah |= (0x1 << (E1000_RAH_POOLSEL_SHIFT + pool)); @@ -3147,6 +3227,14 @@ uint8_t addr[RTE_ETHER_ADDR_LEN]; struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return; + memset(addr, 0, sizeof(addr)); e1000_rar_set(hw, addr, index); @@ -3156,6 +3244,14 @@ eth_igb_default_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) { + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + eth_igb_rar_clear(dev, 0); eth_igb_rar_set(dev, (void *)addr, 0, 0); @@ -3289,6 +3385,14 @@ int ret; uint32_t intr_vector = 0; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); hw->mac.ops.reset_hw(hw); @@ -3345,6 +3449,14 @@ struct e1000_adapter *adapter = E1000_DEV_PRIVATE(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (adapter->stopped) return 0; @@ -3417,6 +3529,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* Set both unicast and multicast promisc */ e1000_promisc_set_vf(hw, e1000_promisc_enabled); @@ -3428,6 +3548,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* If in allmulticast mode leave multicast promisc */ if (dev->data->all_multicast == 1) e1000_promisc_set_vf(hw, e1000_promisc_multicast); @@ -3442,6 +3570,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* In promiscuous mode multicast promisc already set */ if (dev->data->promiscuous == 0) e1000_promisc_set_vf(hw, e1000_promisc_multicast); @@ -3454,6 +3590,14 @@ { struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* In promiscuous mode leave multicast promisc enabled */ if (dev->data->promiscuous == 0) e1000_promisc_set_vf(hw, e1000_promisc_disabled); @@ -4557,6 +4701,14 @@ { struct e1000_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); e1000_update_mc_addr_list(hw, (u8 *)mc_addr_set, nb_mc_addr); return 0; @@ -4986,6 +5138,14 @@ uint16_t *data = in_eeprom->data; int first, length; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + first = in_eeprom->offset >> 1; length = in_eeprom->length >> 1; if ((first >= hw->nvm.word_size) || @@ -5010,6 +5170,14 @@ uint16_t *data = in_eeprom->data; int first, length; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + first = in_eeprom->offset >> 1; length = in_eeprom->length >> 1; if ((first >= hw->nvm.word_size) || @@ -5110,6 +5278,10 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t vec = E1000_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = E1000_RX_VEC_START; @@ -5130,6 +5302,10 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t vec = E1000_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = E1000_RX_VEC_START; diff -Nru dpdk-22.11.7/drivers/net/enetfec/enet_ethdev.c dpdk-22.11.8/drivers/net/enetfec/enet_ethdev.c --- dpdk-22.11.7/drivers/net/enetfec/enet_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/enetfec/enet_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -414,7 +414,6 @@ offset_des_active_txq[queue_idx]; bd_base = (struct bufdesc *)(((uintptr_t)bd_base) + size); txq->bd.last = (struct bufdesc *)(((uintptr_t)bd_base) - dsize); - bdp = txq->bd.base; bdp = txq->bd.cur; for (i = 0; i < txq->bd.ring_size; i++) { diff -Nru dpdk-22.11.7/drivers/net/hinic/hinic_pmd_flow.c dpdk-22.11.8/drivers/net/hinic/hinic_pmd_flow.c --- dpdk-22.11.7/drivers/net/hinic/hinic_pmd_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hinic/hinic_pmd_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -1979,8 +1979,8 @@ return -EINVAL; } - if (!(filter_info->type_mask & (1 << type_id))) { - filter_info->type_mask |= 1 << type_id; + if (!(filter_info->type_mask & (UINT64_C(1) << type_id))) { + filter_info->type_mask |= UINT64_C(1) << type_id; filter->index = type_id; filter_info->pkt_filters[type_id].enable = true; filter_info->pkt_filters[type_id].pkt_proto = @@ -2138,7 +2138,7 @@ filter_info->pkt_type = 0; filter_info->qid = 0; filter_info->pkt_filters[filter->index].qid = 0; - filter_info->type_mask &= ~(1 << (filter->index)); + filter_info->type_mask &= ~(UINT64_C(1) << filter->index); TAILQ_REMOVE(&filter_info->fivetuple_list, filter, entries); rte_free(filter); @@ -2268,8 +2268,8 @@ if (id < 0) return -EINVAL; - if (!(filter_info->type_mask & (1 << id))) { - filter_info->type_mask |= 1 << id; + if (!(filter_info->type_mask & (UINT64_C(1) << id))) { + filter_info->type_mask |= UINT64_C(1) << id; filter_info->pkt_filters[id].pkt_proto = ethertype_filter->pkt_proto; filter_info->pkt_filters[id].enable = ethertype_filter->enable; @@ -2289,7 +2289,7 @@ return; filter_info->pkt_type = 0; - filter_info->type_mask &= ~(1 << idx); + filter_info->type_mask &= ~(UINT64_C(1) << idx); filter_info->pkt_filters[idx].pkt_proto = (uint16_t)0; filter_info->pkt_filters[idx].enable = FALSE; filter_info->pkt_filters[idx].qid = 0; @@ -2355,7 +2355,7 @@ if (i < 0) return -EINVAL; - if ((filter_info->type_mask & (1 << i))) { + if ((filter_info->type_mask & (UINT64_C(1) << i))) { filter_info->pkt_filters[i].enable = FALSE; (void)hinic_set_fdir_filter(nic_dev->hwdev, filter_info->pkt_type, diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_cmd.c dpdk-22.11.8/drivers/net/hns3/hns3_cmd.c --- dpdk-22.11.7/drivers/net/hns3/hns3_cmd.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_cmd.c 2025-04-08 19:02:56.000000000 +0000 @@ -304,8 +304,17 @@ return hns3_cmd_convert_err_code(desc_ret); } -static int hns3_cmd_poll_reply(struct hns3_hw *hw) +static uint32_t hns3_get_cmd_tx_timeout(uint16_t opcode) { + if (opcode == HNS3_OPC_CFG_RST_TRIGGER) + return HNS3_COMQ_CFG_RST_TIMEOUT; + + return HNS3_CMDQ_TX_TIMEOUT_DEFAULT; +} + +static int hns3_cmd_poll_reply(struct hns3_hw *hw, uint16_t opcode) +{ + uint32_t cmdq_tx_timeout = hns3_get_cmd_tx_timeout(opcode); struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); uint32_t timeout = 0; @@ -326,7 +335,7 @@ rte_delay_us(1); timeout++; - } while (timeout < hw->cmq.tx_timeout); + } while (timeout < cmdq_tx_timeout); hns3_err(hw, "Wait for reply timeout"); return -ETIME; } @@ -400,7 +409,7 @@ * if multi descriptors to be sent, use the first one to check. */ if (HNS3_CMD_SEND_SYNC(rte_le_to_cpu_16(desc->flag))) { - retval = hns3_cmd_poll_reply(hw); + retval = hns3_cmd_poll_reply(hw, desc->opcode); if (!retval) retval = hns3_cmd_get_hardware_reply(hw, desc, num, ntc); @@ -605,9 +614,6 @@ hw->cmq.csq.desc_num = HNS3_NIC_CMQ_DESC_NUM; hw->cmq.crq.desc_num = HNS3_NIC_CMQ_DESC_NUM; - /* Setup Tx write back timeout */ - hw->cmq.tx_timeout = HNS3_CMDQ_TX_TIMEOUT; - /* Setup queue rings */ ret = hns3_alloc_cmd_queue(hw, HNS3_TYPE_CSQ); if (ret) { diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_cmd.h dpdk-22.11.8/drivers/net/hns3/hns3_cmd.h --- dpdk-22.11.7/drivers/net/hns3/hns3_cmd.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_cmd.h 2025-04-08 19:02:56.000000000 +0000 @@ -10,7 +10,8 @@ #include #include -#define HNS3_CMDQ_TX_TIMEOUT 30000 +#define HNS3_CMDQ_TX_TIMEOUT_DEFAULT 30000 +#define HNS3_COMQ_CFG_RST_TIMEOUT 100000 #define HNS3_CMDQ_CLEAR_WAIT_TIME 200 #define HNS3_CMDQ_RX_INVLD_B 0 #define HNS3_CMDQ_RX_OUTVLD_B 1 @@ -62,7 +63,6 @@ struct hns3_cmq { struct hns3_cmq_ring csq; struct hns3_cmq_ring crq; - uint16_t tx_timeout; enum hns3_cmd_return_status last_status; }; diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_dump.c dpdk-22.11.8/drivers/net/hns3/hns3_dump.c --- dpdk-22.11.7/drivers/net/hns3/hns3_dump.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_dump.c 2025-04-08 19:02:56.000000000 +0000 @@ -628,6 +628,10 @@ static void hns3_get_port_pvid_info(FILE *file, struct hns3_hw *hw) { + struct hns3_adapter *hns = HNS3_DEV_HW_TO_ADAPTER(hw); + if (hns->is_vf) + return; + fprintf(file, " - pvid status: %s\n", hw->port_base_vlan_cfg.state ? "On" : "Off"); } diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_ethdev.c dpdk-22.11.8/drivers/net/hns3/hns3_ethdev.c --- dpdk-22.11.7/drivers/net/hns3/hns3_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -4864,7 +4864,7 @@ } static int -hns3_set_copper_port_link_speed(struct hns3_hw *hw, +hns3_copper_port_link_speed_cfg(struct hns3_hw *hw, struct hns3_set_link_speed_cfg *cfg) { struct hns3_cmd_desc desc[HNS3_PHY_PARAM_CFG_BD_NUM]; @@ -4899,6 +4899,33 @@ } static int +hns3_set_copper_port_link_speed(struct hns3_hw *hw, + struct hns3_set_link_speed_cfg *cfg) +{ +#define HNS3_PHY_PARAM_CFG_RETRY_TIMES 10 +#define HNS3_PHY_PARAM_CFG_RETRY_DELAY_MS 100 + uint32_t retry_cnt = 0; + int ret; + + /* + * The initialization of copper port contains the following two steps. + * 1. Configure firmware takeover the PHY. The firmware will start an + * asynchronous task to initialize the PHY chip. + * 2. Configure work speed and duplex. + * In earlier versions of the firmware, when the asynchronous task is not + * finished, the firmware will return -ENOTBLK in the second step. And this + * will lead to driver failed to initialize. Here add retry for this case. + */ + ret = hns3_copper_port_link_speed_cfg(hw, cfg); + while (ret == -ENOTBLK && retry_cnt++ < HNS3_PHY_PARAM_CFG_RETRY_TIMES) { + rte_delay_ms(HNS3_PHY_PARAM_CFG_RETRY_DELAY_MS); + ret = hns3_copper_port_link_speed_cfg(hw, cfg); + } + + return ret; +} + +static int hns3_set_autoneg(struct hns3_hw *hw, bool enable) { struct hns3_config_auto_neg_cmd *req; diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_intr.c dpdk-22.11.8/drivers/net/hns3/hns3_intr.c --- dpdk-22.11.7/drivers/net/hns3/hns3_intr.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_intr.c 2025-04-08 19:02:56.000000000 +0000 @@ -1432,8 +1432,8 @@ .module_name = MODULE_MASTER, .msg = "MODULE_MASTER" }, { - .module_name = MODULE_ROH_MAC, - .msg = "MODULE_ROH_MAC" + .module_name = MODULE_HIMAC, + .msg = "MODULE_HIMAC" } }; diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_intr.h dpdk-22.11.8/drivers/net/hns3/hns3_intr.h --- dpdk-22.11.7/drivers/net/hns3/hns3_intr.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_intr.h 2025-04-08 19:02:56.000000000 +0000 @@ -104,7 +104,7 @@ MODULE_RCB_TX, MODULE_TXDMA, MODULE_MASTER, - MODULE_ROH_MAC, + MODULE_HIMAC, }; enum hns3_err_type_list { diff -Nru dpdk-22.11.7/drivers/net/hns3/hns3_rxtx.c dpdk-22.11.8/drivers/net/hns3/hns3_rxtx.c --- dpdk-22.11.7/drivers/net/hns3/hns3_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/hns3/hns3_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -4000,7 +4000,7 @@ for (i = 0; i < txq->tx_rs_thresh; i++) rte_prefetch0((tx_entry + i)->mbuf); for (i = 0; i < txq->tx_rs_thresh; i++, tx_entry++) { - rte_mempool_put(tx_entry->mbuf->pool, tx_entry->mbuf); + rte_pktmbuf_free_seg(tx_entry->mbuf); tx_entry->mbuf = NULL; } diff -Nru dpdk-22.11.7/drivers/net/i40e/i40e_fdir.c dpdk-22.11.8/drivers/net/i40e/i40e_fdir.c --- dpdk-22.11.7/drivers/net/i40e/i40e_fdir.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/i40e/i40e_fdir.c 2025-04-08 19:02:56.000000000 +0000 @@ -599,18 +599,16 @@ } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, len, ether_type); - } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV4_UDP) { - len = fill_ip4_head(fdir_input, raw_pkt, IPPROTO_UDP, - len, ether_type); - } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) + } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6) { len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_ESP, len, ether_type); - else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) + } else if (cus_pctype->index == I40E_CUSTOMIZED_ESP_IPV6_UDP) { len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_UDP, len, ether_type); - else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) + } else if (cus_pctype->index == I40E_CUSTOMIZED_IPV6_L2TPV3) { len = fill_ip6_head(fdir_input, raw_pkt, IPPROTO_L2TP, len, ether_type); + } } else { PMD_DRV_LOG(ERR, "unknown pctype %u.", fdir_input->pctype); return -1; diff -Nru dpdk-22.11.7/drivers/net/i40e/i40e_rxtx_vec_avx2.c dpdk-22.11.8/drivers/net/i40e/i40e_rxtx_vec_avx2.c --- dpdk-22.11.7/drivers/net/i40e/i40e_rxtx_vec_avx2.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/i40e/i40e_rxtx_vec_avx2.c 2025-04-08 19:02:56.000000000 +0000 @@ -22,7 +22,7 @@ static __rte_always_inline void i40e_rxq_rearm(struct i40e_rx_queue *rxq) { - return i40e_rxq_rearm_common(rxq, false); + i40e_rxq_rearm_common(rxq, false); } #ifndef RTE_LIBRTE_I40E_16BYTE_RX_DESC diff -Nru dpdk-22.11.7/drivers/net/i40e/i40e_rxtx_vec_avx512.c dpdk-22.11.8/drivers/net/i40e/i40e_rxtx_vec_avx512.c --- dpdk-22.11.7/drivers/net/i40e/i40e_rxtx_vec_avx512.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/i40e/i40e_rxtx_vec_avx512.c 2025-04-08 19:02:56.000000000 +0000 @@ -33,8 +33,10 @@ rxdp = rxq->rx_ring + rxq->rxrearm_start; - if (unlikely(!cache)) - return i40e_rxq_rearm_common(rxq, true); + if (unlikely(!cache)) { + i40e_rxq_rearm_common(rxq, true); + return; + } /* We need to pull 'n' more MBUFs into the software ring from mempool * We inline the mempool function here, so we can vectorize the copy diff -Nru dpdk-22.11.7/drivers/net/i40e/meson.build dpdk-22.11.8/drivers/net/i40e/meson.build --- dpdk-22.11.7/drivers/net/i40e/meson.build 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/i40e/meson.build 2025-04-08 19:02:56.000000000 +0000 @@ -76,6 +76,9 @@ avx512_args = [cflags, '-mavx512f', '-mavx512bw'] if cc.has_argument('-march=skylake-avx512') avx512_args += '-march=skylake-avx512' + if cc.has_argument('-Wno-overriding-option') + avx512_args += '-Wno-overriding-option' + endif endif i40e_avx512_lib = static_library('i40e_avx512_lib', 'i40e_rxtx_vec_avx512.c', diff -Nru dpdk-22.11.7/drivers/net/iavf/iavf_ethdev.c dpdk-22.11.8/drivers/net/iavf/iavf_ethdev.c --- dpdk-22.11.7/drivers/net/iavf/iavf_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/iavf/iavf_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -2529,6 +2529,9 @@ iavf_dev_alarm_handler(void *param) { struct rte_eth_dev *dev = (struct rte_eth_dev *)param; + if (dev == NULL || dev->data == NULL || dev->data->dev_private == NULL) + return; + struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t icr0; @@ -2656,18 +2659,16 @@ ð_dev->data->mac_addrs[0]); - if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR) { - /* register callback func to eal lib */ - rte_intr_callback_register(pci_dev->intr_handle, - iavf_dev_interrupt_handler, - (void *)eth_dev); + if (vf->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR && + /* register callback func to eal lib */ + rte_intr_callback_register(pci_dev->intr_handle, + iavf_dev_interrupt_handler, (void *)eth_dev) == 0) /* enable uio intr after callback register */ rte_intr_enable(pci_dev->intr_handle); - } else { + else rte_eal_alarm_set(IAVF_ALARM_INTERVAL, iavf_dev_alarm_handler, eth_dev); - } /* configure and enable device interrupt */ iavf_enable_irq0(hw); diff -Nru dpdk-22.11.7/drivers/net/iavf/iavf_rxtx.c dpdk-22.11.8/drivers/net/iavf/iavf_rxtx.c --- dpdk-22.11.7/drivers/net/iavf/iavf_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/iavf/iavf_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -368,6 +368,9 @@ #ifdef RTE_ARCH_X86 [IAVF_REL_MBUFS_SSE_VEC].release_mbufs = iavf_rx_queue_release_mbufs_sse, #endif +#ifdef RTE_ARCH_ARM64 + [IAVF_REL_MBUFS_NEON_VEC].release_mbufs = iavf_rx_queue_release_mbufs_neon, +#endif }; static const @@ -3261,7 +3264,6 @@ iavf_xmit_pkts_vec_avx2 : iavf_xmit_pkts_vec; } - dev->tx_pkt_prepare = NULL; #ifdef CC_AVX512_SUPPORT if (use_avx512) { if (check_ret == IAVF_VECTOR_PATH) { @@ -3270,7 +3272,6 @@ dev->data->port_id); } else { dev->tx_pkt_burst = iavf_xmit_pkts_vec_avx512_offload; - dev->tx_pkt_prepare = iavf_prep_pkts; PMD_DRV_LOG(DEBUG, "Using AVX512 OFFLOAD Vector Tx (port %d).", dev->data->port_id); } @@ -3299,7 +3300,6 @@ PMD_DRV_LOG(DEBUG, "Using Basic Tx callback (port=%d).", dev->data->port_id); dev->tx_pkt_burst = iavf_xmit_pkts; - dev->tx_pkt_prepare = iavf_prep_pkts; } static int diff -Nru dpdk-22.11.7/drivers/net/iavf/iavf_rxtx.h dpdk-22.11.8/drivers/net/iavf/iavf_rxtx.h --- dpdk-22.11.7/drivers/net/iavf/iavf_rxtx.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/iavf/iavf_rxtx.h 2025-04-08 19:02:56.000000000 +0000 @@ -416,6 +416,7 @@ IAVF_REL_MBUFS_DEFAULT = 0, IAVF_REL_MBUFS_SSE_VEC = 1, IAVF_REL_MBUFS_AVX512_VEC = 2, + IAVF_REL_MBUFS_NEON_VEC = 3, }; /* Receive Flex Descriptor profile IDs: There are a total @@ -724,6 +725,7 @@ void iavf_tx_queue_release_mbufs_avx512(struct iavf_tx_queue *txq); void iavf_rx_queue_release_mbufs_sse(struct iavf_rx_queue *rxq); void iavf_tx_queue_release_mbufs_sse(struct iavf_tx_queue *txq); +void iavf_rx_queue_release_mbufs_neon(struct iavf_rx_queue *rxq); static inline void iavf_dump_rx_descriptor(struct iavf_rx_queue *rxq, diff -Nru dpdk-22.11.7/drivers/net/iavf/iavf_rxtx_vec_avx2.c dpdk-22.11.8/drivers/net/iavf/iavf_rxtx_vec_avx2.c --- dpdk-22.11.7/drivers/net/iavf/iavf_rxtx_vec_avx2.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/iavf/iavf_rxtx_vec_avx2.c 2025-04-08 19:02:56.000000000 +0000 @@ -13,7 +13,7 @@ static __rte_always_inline void iavf_rxq_rearm(struct iavf_rx_queue *rxq) { - return iavf_rxq_rearm_common(rxq, false); + iavf_rxq_rearm_common(rxq, false); } #define PKTLEN_SHIFT 10 diff -Nru dpdk-22.11.7/drivers/net/iavf/iavf_rxtx_vec_neon.c dpdk-22.11.8/drivers/net/iavf/iavf_rxtx_vec_neon.c --- dpdk-22.11.7/drivers/net/iavf/iavf_rxtx_vec_neon.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/iavf/iavf_rxtx_vec_neon.c 2025-04-08 19:02:56.000000000 +0000 @@ -391,20 +391,16 @@ return _recv_raw_pkts_vec(rx_queue, rx_pkts, nb_pkts, NULL); } -static void __rte_cold +void __rte_cold iavf_rx_queue_release_mbufs_neon(struct iavf_rx_queue *rxq) { _iavf_rx_queue_release_mbufs_vec(rxq); } -static const struct iavf_rxq_ops neon_vec_rxq_ops = { - .release_mbufs = iavf_rx_queue_release_mbufs_neon, -}; - int __rte_cold iavf_rxq_vec_setup(struct iavf_rx_queue *rxq) { - rxq->ops = &neon_vec_rxq_ops; + rxq->rel_mbufs_type = IAVF_REL_MBUFS_NEON_VEC; return iavf_rxq_vec_setup_default(rxq); } diff -Nru dpdk-22.11.7/drivers/net/ice/ice_ethdev.c dpdk-22.11.8/drivers/net/ice/ice_ethdev.c --- dpdk-22.11.7/drivers/net/ice/ice_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/ice/ice_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -1591,6 +1591,10 @@ * by ice_init_hw */ vsi_ctx.info.sw_id = hw->port_info->sw_id; + vsi_ctx.info.sw_flags = ICE_AQ_VSI_SW_FLAG_LOCAL_LB; + vsi_ctx.info.sw_flags |= ICE_AQ_VSI_SW_FLAG_SRC_PRUNE; + cfg = ICE_AQ_VSI_PROP_SW_VALID; + vsi_ctx.info.valid_sections |= rte_cpu_to_le_16(cfg); vsi_ctx.info.sw_flags2 = ICE_AQ_VSI_SW_FLAG_LAN_ENA; /* Allow all untagged or tagged packets */ vsi_ctx.info.inner_vlan_flags = ICE_AQ_VSI_INNER_VLAN_TX_MODE_ALL; diff -Nru dpdk-22.11.7/drivers/net/ice/ice_rxtx.c dpdk-22.11.8/drivers/net/ice/ice_rxtx.c --- dpdk-22.11.7/drivers/net/ice/ice_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/ice/ice_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -483,6 +483,7 @@ struct rte_mbuf *mbuf_pay; mbuf_pay = rte_mbuf_raw_alloc(rxq->rxseg[1].mp); if (unlikely(!mbuf_pay)) { + rte_pktmbuf_free(mbuf); PMD_DRV_LOG(ERR, "Failed to allocate payload mbuf for RX"); return -ENOMEM; } @@ -1873,6 +1874,8 @@ diag_pay = rte_mempool_get_bulk(rxq->rxseg[1].mp, (void *)mbufs_pay, rxq->rx_free_thresh); if (unlikely(diag_pay != 0)) { + rte_mempool_put_bulk(rxq->mp, (void *)rxep, + rxq->rx_free_thresh); PMD_RX_LOG(ERR, "Failed to get payload mbufs in bulk"); return -ENOMEM; } @@ -2579,6 +2582,13 @@ nmb_pay = rte_mbuf_raw_alloc(rxq->rxseg[1].mp); if (unlikely(!nmb_pay)) { rxq->vsi->adapter->pf.dev_data->rx_mbuf_alloc_failed++; + rxe->mbuf = NULL; + nb_hold--; + if (unlikely(rx_id == 0)) + rx_id = rxq->nb_rx_desc; + + rx_id--; + rte_pktmbuf_free(nmb); break; } diff -Nru dpdk-22.11.7/drivers/net/ice/ice_rxtx_vec_avx2.c dpdk-22.11.8/drivers/net/ice/ice_rxtx_vec_avx2.c --- dpdk-22.11.7/drivers/net/ice/ice_rxtx_vec_avx2.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/ice/ice_rxtx_vec_avx2.c 2025-04-08 19:02:56.000000000 +0000 @@ -14,7 +14,7 @@ static __rte_always_inline void ice_rxq_rearm(struct ice_rx_queue *rxq) { - return ice_rxq_rearm_common(rxq, false); + ice_rxq_rearm_common(rxq, false); } static __rte_always_inline __m256i diff -Nru dpdk-22.11.7/drivers/net/idpf/idpf_rxtx_vec_avx512.c dpdk-22.11.8/drivers/net/idpf/idpf_rxtx_vec_avx512.c --- dpdk-22.11.7/drivers/net/idpf/idpf_rxtx_vec_avx512.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/idpf/idpf_rxtx_vec_avx512.c 2025-04-08 19:02:56.000000000 +0000 @@ -137,8 +137,10 @@ rxdp += rxq->rxrearm_start; - if (unlikely(cache == NULL)) - return idpf_singleq_rearm_common(rxq); + if (unlikely(cache == NULL)) { + idpf_singleq_rearm_common(rxq); + return; + } /* We need to pull 'n' more MBUFs into the software ring from mempool * We inline the mempool function here, so we can vectorize the copy diff -Nru dpdk-22.11.7/drivers/net/igc/base/igc_defines.h dpdk-22.11.8/drivers/net/igc/base/igc_defines.h --- dpdk-22.11.7/drivers/net/igc/base/igc_defines.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/base/igc_defines.h 2025-04-08 19:02:56.000000000 +0000 @@ -516,6 +516,7 @@ /* SW Semaphore Register */ #define IGC_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */ #define IGC_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */ +#define IGC_SWSM_TIMEOUT 2000 /* Driver Semaphore max timeout counter */ #define IGC_SWSM_DRV_LOAD 0x00000008 /* Driver Loaded Bit */ #define IGC_SWSM2_LOCK 0x00000002 /* Secondary driver semaphore bit */ diff -Nru dpdk-22.11.7/drivers/net/igc/base/igc_i225.c dpdk-22.11.8/drivers/net/igc/base/igc_i225.c --- dpdk-22.11.7/drivers/net/igc/base/igc_i225.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/base/igc_i225.c 2025-04-08 19:02:56.000000000 +0000 @@ -330,11 +330,18 @@ DEBUGFUNC("igc_release_swfw_sync_i225"); - while (igc_get_hw_semaphore_i225(hw) != IGC_SUCCESS) - ; /* Empty */ + /* Releasing the resource requires first getting the HW semaphore. + * If we fail to get the semaphore, there is nothing we can do, + * except log an error and quit. We are not allowed to hang here + * indefinitely, as it may cause denial of service or system crash. + */ + if (igc_get_hw_semaphore_i225(hw) != IGC_SUCCESS) { + DEBUGOUT("Failed to release SW_FW_SYNC.\n"); + return; + } swfw_sync = IGC_READ_REG(hw, IGC_SW_FW_SYNC); - swfw_sync &= ~mask; + swfw_sync &= ~(u32)mask; IGC_WRITE_REG(hw, IGC_SW_FW_SYNC, swfw_sync); igc_put_hw_semaphore_generic(hw); @@ -378,7 +385,7 @@ static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw) { u32 swsm; - s32 timeout = hw->nvm.word_size + 1; + s32 timeout = IGC_SWSM_TIMEOUT; s32 i = 0; DEBUGFUNC("igc_get_hw_semaphore_i225"); @@ -555,6 +562,7 @@ } for (i = 0; i < words; i++) { + ret_val = -IGC_ERR_NVM; eewr = ((offset + i) << IGC_NVM_RW_ADDR_SHIFT) | (data[i] << IGC_NVM_RW_REG_DATA) | IGC_NVM_RW_REG_START; @@ -1060,7 +1068,9 @@ scale_max = (ltr_max / 1024) < 1024 ? IGC_LTRMAXV_SCALE_1024 : IGC_LTRMAXV_SCALE_32768; ltr_min /= scale_min == IGC_LTRMINV_SCALE_1024 ? 1024 : 32768; + ltr_min -= 1; ltr_max /= scale_max == IGC_LTRMAXV_SCALE_1024 ? 1024 : 32768; + ltr_max -= 1; /* Only write the LTR thresholds if they differ from before. */ ltrv = IGC_READ_REG(hw, IGC_LTRMINV); @@ -1073,7 +1083,7 @@ ltrv = IGC_READ_REG(hw, IGC_LTRMAXV); if (ltr_max != (ltrv & IGC_LTRMAXV_LTRV_MASK)) { ltrv = IGC_LTRMAXV_LSNP_REQ | ltr_max | - (scale_min << IGC_LTRMAXV_SCALE_SHIFT); + (scale_max << IGC_LTRMAXV_SCALE_SHIFT); IGC_WRITE_REG(hw, IGC_LTRMAXV, ltrv); } } @@ -1101,10 +1111,8 @@ * changed. The get_link_status flag is set upon receiving * a Link Status Change or Rx Sequence Error interrupt. */ - if (!mac->get_link_status) { - ret_val = IGC_SUCCESS; + if (!mac->get_link_status) goto out; - } /* First we want to see if the MII Status Register reports * link. If so, then we want to get the current speed/duplex diff -Nru dpdk-22.11.7/drivers/net/igc/base/igc_mac.c dpdk-22.11.8/drivers/net/igc/base/igc_mac.c --- dpdk-22.11.7/drivers/net/igc/base/igc_mac.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/base/igc_mac.c 2025-04-08 19:02:56.000000000 +0000 @@ -486,7 +486,7 @@ u32 igc_hash_mc_addr_generic(struct igc_hw *hw, u8 *mc_addr) { u32 hash_value, hash_mask; - u8 bit_shift = 0; + u8 bit_shift = 1; DEBUGFUNC("igc_hash_mc_addr_generic"); @@ -496,7 +496,7 @@ /* For a mc_filter_type of 0, bit_shift is the number of left-shifts * where 0xFF would still fall within the hash mask. */ - while (hash_mask >> bit_shift != 0xFF) + while (hash_mask >> bit_shift != 0xFF && bit_shift < 4) bit_shift++; /* The portion of the address that is used for the hash table @@ -539,8 +539,10 @@ break; } - hash_value = hash_mask & (((mc_addr[4] >> (8 - bit_shift)) | - (((u16)mc_addr[5]) << bit_shift))); + hash_value = (u32)mc_addr[4]; + hash_value = hash_value >> (8 - bit_shift); + hash_value |= (((u32)mc_addr[5]) << bit_shift); + hash_value &= hash_mask; return hash_value; } diff -Nru dpdk-22.11.7/drivers/net/igc/base/igc_nvm.c dpdk-22.11.8/drivers/net/igc/base/igc_nvm.c --- dpdk-22.11.7/drivers/net/igc/base/igc_nvm.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/base/igc_nvm.c 2025-04-08 19:02:56.000000000 +0000 @@ -926,14 +926,14 @@ DEBUGOUT("NVM Not Supported\n"); return -IGC_NOT_IMPLEMENTED; } - *pba_num = (u32)(nvm_data << 16); + *pba_num = ((u32)nvm_data << 16); ret_val = hw->nvm.ops.read(hw, NVM_PBA_OFFSET_1, 1, &nvm_data); if (ret_val) { DEBUGOUT("NVM Read Error\n"); return ret_val; } - *pba_num |= nvm_data; + *pba_num |= (u32)nvm_data; return IGC_SUCCESS; } diff -Nru dpdk-22.11.7/drivers/net/igc/base/igc_phy.c dpdk-22.11.8/drivers/net/igc/base/igc_phy.c --- dpdk-22.11.7/drivers/net/igc/base/igc_phy.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/base/igc_phy.c 2025-04-08 19:02:56.000000000 +0000 @@ -2366,7 +2366,8 @@ u32 usec_interval, bool *success) { s32 ret_val = IGC_SUCCESS; - u16 i, phy_status; + u16 phy_status; + u32 i; DEBUGFUNC("igc_phy_has_link_generic"); @@ -3523,6 +3524,7 @@ hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg); mii_reg &= ~MII_CR_POWER_DOWN; hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg); + usec_delay(300); } /** @@ -4148,8 +4150,6 @@ if (ret_val) return ret_val; ret_val = igc_write_phy_reg_mdic(hw, offset, data); - if (ret_val) - return ret_val; hw->phy.ops.release(hw); } else { ret_val = igc_write_xmdio_reg(hw, (u16)offset, dev_addr, @@ -4182,8 +4182,6 @@ if (ret_val) return ret_val; ret_val = igc_read_phy_reg_mdic(hw, offset, data); - if (ret_val) - return ret_val; hw->phy.ops.release(hw); } else { ret_val = igc_read_xmdio_reg(hw, (u16)offset, dev_addr, diff -Nru dpdk-22.11.7/drivers/net/igc/igc_ethdev.c dpdk-22.11.8/drivers/net/igc/igc_ethdev.c --- dpdk-22.11.7/drivers/net/igc/igc_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/igc/igc_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -12,6 +12,7 @@ #include #include #include +#include #include "igc_logs.h" #include "igc_txrx.h" @@ -357,6 +358,14 @@ { struct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->phy.media_type == igc_media_type_copper) igc_power_up_phy(hw); else @@ -369,6 +378,14 @@ { struct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->phy.media_type == igc_media_type_copper) igc_power_down_phy(hw); else @@ -442,6 +459,14 @@ struct rte_eth_link link; int link_check, count; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + link_check = 0; hw->mac.get_link_status = 1; @@ -619,6 +644,14 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; struct rte_eth_link link; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + dev->data->dev_started = 0; adapter->stopped = 1; @@ -925,6 +958,14 @@ PMD_INIT_FUNC_TRACE(); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* disable all MSI-X interrupts */ IGC_WRITE_REG(hw, IGC_EIMC, 0x1f); IGC_WRITE_FLUSH(hw); @@ -1459,6 +1500,14 @@ struct igc_fw_version fw; int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + igc_get_fw_version(hw, &fw); /* if option rom is valid, display its version too */ @@ -1549,6 +1598,14 @@ { struct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + return igc_led_on(hw) == IGC_SUCCESS ? 0 : -ENOTSUP; } @@ -1557,6 +1614,14 @@ { struct igc_hw *hw = IGC_DEV_PRIVATE_HW(dev); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + return igc_led_off(hw) == IGC_SUCCESS ? 0 : -ENOTSUP; } @@ -2099,6 +2164,10 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t vec = IGC_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = IGC_RX_VEC_START; @@ -2118,6 +2187,10 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t vec = IGC_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = IGC_RX_VEC_START; @@ -2181,6 +2254,14 @@ uint32_t rctl; int err; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (fc_conf->autoneg != hw->mac.autoneg) return -ENOTSUP; diff -Nru dpdk-22.11.7/drivers/net/ixgbe/ixgbe_ethdev.c dpdk-22.11.8/drivers/net/ixgbe/ixgbe_ethdev.c --- dpdk-22.11.7/drivers/net/ixgbe/ixgbe_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/ixgbe/ixgbe_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -2621,6 +2621,14 @@ struct ixgbe_macsec_setting *macsec_setting = IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); /* Stop the link setup handler before resetting the HW. */ @@ -2909,6 +2917,14 @@ PMD_INIT_FUNC_TRACE(); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + ixgbe_dev_wait_setup_link_complete(dev, 0); /* disable interrupts */ @@ -2971,6 +2987,15 @@ { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->mac.type == ixgbe_mac_82599EB) { #ifdef RTE_LIBRTE_IXGBE_BYPASS if (hw->device_id == IXGBE_DEV_ID_82599_BYPASS) { @@ -3002,6 +3027,15 @@ { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->mac.type == ixgbe_mac_82599EB) { #ifdef RTE_LIBRTE_IXGBE_BYPASS if (hw->device_id == IXGBE_DEV_ID_82599_BYPASS) { @@ -3864,6 +3898,14 @@ struct ixgbe_nvm_version nvm_ver; int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + ixgbe_get_oem_prod_version(hw, &nvm_ver); if (nvm_ver.oem_valid) { snprintf(fw_version, fw_size, "%x.%x.%x", @@ -4762,6 +4804,14 @@ { struct ixgbe_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); return ixgbe_led_on(hw, 0) == IXGBE_SUCCESS ? 0 : -ENOTSUP; } @@ -4771,6 +4821,14 @@ { struct ixgbe_hw *hw; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); return ixgbe_led_off(hw, 0) == IXGBE_SUCCESS ? 0 : -ENOTSUP; } @@ -4844,6 +4902,14 @@ ixgbe_fc_full }; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); @@ -5049,6 +5115,14 @@ ixgbe_fc_full }; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); ixgbe_dcb_unpack_map_cee(dcb_config, IXGBE_DCB_RX_CONFIG, map); @@ -5197,6 +5271,14 @@ struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t enable_addr = 1; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + return ixgbe_set_rar(hw, index, mac_addr->addr_bytes, pool, enable_addr); } @@ -5206,6 +5288,14 @@ { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return; + ixgbe_clear_rar(hw, index); } @@ -5214,6 +5304,14 @@ { struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + ixgbe_remove_rar(dev, 0); ixgbe_add_rar(dev, addr, 0, pci_dev->max_vfs); @@ -5373,6 +5471,14 @@ int err, mask = 0; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); /* Stop the link setup handler before resetting the HW. */ @@ -5476,6 +5582,14 @@ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = pci_dev->intr_handle; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (hw->adapter_stopped) return 0; @@ -5591,6 +5705,14 @@ uint32_t vid_bit = 0; int ret = 0; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + PMD_INIT_FUNC_TRACE(); /* vind is not used in VF driver, set to 0, check ixgbe_set_vfta_vf */ @@ -5819,6 +5941,10 @@ IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t vec = IXGBE_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = IXGBE_RX_VEC_START; intr->mask |= (1 << vec); @@ -5841,6 +5967,10 @@ struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t vec = IXGBE_MISC_VEC_ID; + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (rte_intr_allow_others(intr_handle)) vec = IXGBE_RX_VEC_START; intr->mask &= ~(1 << vec); @@ -5861,6 +5991,10 @@ struct ixgbe_interrupt *intr = IXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private); + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (queue_id < 16) { ixgbe_disable_intr(hw); intr->mask |= (1 << queue_id); @@ -5888,6 +6022,10 @@ struct ixgbe_interrupt *intr = IXGBE_DEV_PRIVATE_TO_INTR(dev->data->dev_private); + /* device interrupts are only subscribed to in primary processes */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (queue_id < 16) { ixgbe_disable_intr(hw); intr->mask &= ~(1 << queue_id); @@ -6165,6 +6303,14 @@ int diag; /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + + /* * On a 82599 VF, adding again the same MAC addr is not an idempotent * operation. Trap this case to avoid exhausting the [very limited] * set of PF resources used to store VF MAC addresses. @@ -6191,6 +6337,14 @@ int diag; /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return; + + /* * The IXGBE_VF_SET_MACVLAN command of the ixgbe-pf driver does * not support the deletion of a given MAC address. * Instead, it imposes to delete all MAC addresses, then to add again @@ -6230,6 +6384,14 @@ { struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw->mac.ops.set_rar(hw, 0, (void *)addr, 0, 0); return 0; @@ -6416,6 +6578,14 @@ uint32_t max_frame = mtu + IXGBE_ETH_OVERHEAD; struct rte_eth_dev_data *dev_data = dev->data; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); if (mtu < RTE_ETHER_MIN_MTU || max_frame > RTE_ETHER_MAX_JUMBO_FRAME_LEN) @@ -6707,6 +6877,14 @@ struct ixgbe_hw *hw; u8 *mc_addr_list; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); mc_addr_list = (u8 *)mc_addr_set; return ixgbe_update_mc_addr_list(hw, mc_addr_list, nb_mc_addr, @@ -7114,6 +7292,14 @@ uint16_t *data = in_eeprom->data; int first, length; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + first = in_eeprom->offset >> 1; length = in_eeprom->length >> 1; if ((first > hw->eeprom.word_size) || @@ -7134,6 +7320,14 @@ uint16_t *data = in_eeprom->data; int first, length; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + first = in_eeprom->offset >> 1; length = in_eeprom->length >> 1; if ((first > hw->eeprom.word_size) || @@ -7154,6 +7348,14 @@ uint8_t sff8472_rev, addr_mode; bool page_swap = false; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + /* Check whether we support SFF-8472 or not */ status = hw->phy.ops.read_i2c_eeprom(hw, IXGBE_SFF_SFF_8472_COMP, @@ -7199,6 +7401,14 @@ uint8_t *data = info->data; uint32_t i = 0; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + for (i = info->offset; i < info->offset + info->length; i++) { if (i < RTE_ETH_MODULE_SFF_8079_LEN) status = hw->phy.ops.read_i2c_eeprom(hw, i, &databyte); @@ -7790,6 +8000,14 @@ struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + switch (hw->mac.ops.update_xcast_mode(hw, IXGBEVF_XCAST_MODE_PROMISC)) { case IXGBE_SUCCESS: ret = 0; @@ -7812,6 +8030,14 @@ int mode = IXGBEVF_XCAST_MODE_NONE; int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (dev->data->all_multicast) mode = IXGBEVF_XCAST_MODE_ALLMULTI; @@ -7837,6 +8063,14 @@ int ret; int mode = IXGBEVF_XCAST_MODE_ALLMULTI; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (dev->data->promiscuous) return 0; @@ -7861,6 +8095,14 @@ struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); int ret; + /* + * This function calls into the base driver, which in turn will use + * function pointers, which are not guaranteed to be valid in secondary + * processes, so avoid using this function in secondary processes. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -E_RTE_SECONDARY; + if (dev->data->promiscuous) return 0; diff -Nru dpdk-22.11.7/drivers/net/ixgbe/ixgbe_rxtx.h dpdk-22.11.8/drivers/net/ixgbe/ixgbe_rxtx.h --- dpdk-22.11.7/drivers/net/ixgbe/ixgbe_rxtx.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/ixgbe/ixgbe_rxtx.h 2025-04-08 19:02:56.000000000 +0000 @@ -24,7 +24,7 @@ * descriptors should meet the following condition: * (num_ring_desc * sizeof(rx/tx descriptor)) % 128 == 0 */ -#define IXGBE_MIN_RING_DESC 32 +#define IXGBE_MIN_RING_DESC 64 #define IXGBE_MAX_RING_DESC 4096 #define RTE_PMD_IXGBE_TX_MAX_BURST 32 diff -Nru dpdk-22.11.7/drivers/net/mana/mana.c dpdk-22.11.8/drivers/net/mana/mana.c --- dpdk-22.11.7/drivers/net/mana/mana.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mana/mana.c 2025-04-08 19:02:56.000000000 +0000 @@ -20,9 +20,14 @@ #include "mana.h" /* Shared memory between primary/secondary processes, per driver */ -/* Data to track primary/secondary usage */ struct mana_shared_data *mana_shared_data; -static struct mana_shared_data mana_local_data; + +/* Local data to track device instance usage for primary/secondary processes */ +static struct mana_local_data { + int init_done; + unsigned int primary_cnt; + unsigned int secondary_cnt; +} mana_local_data; /* The memory region for the above data */ static const struct rte_memzone *mana_shared_mz; @@ -1068,8 +1073,12 @@ rte_spinlock_lock(&mana_shared_data_lock); /* Skip if shared data is already initialized */ - if (mana_shared_data) + if (mana_shared_data) { + DRV_LOG(INFO, "shared data is already initialized"); goto exit; + } + + memset(&mana_local_data, 0, sizeof(mana_local_data)); if (rte_eal_process_type() == RTE_PROC_PRIMARY) { mana_shared_mz = rte_memzone_reserve(MZ_MANA_SHARED_DATA, @@ -1082,8 +1091,7 @@ } mana_shared_data = mana_shared_mz->addr; - memset(mana_shared_data, 0, sizeof(*mana_shared_data)); - rte_spinlock_init(&mana_shared_data->lock); + rte_atomic32_set(&mana_shared_data->secondary_cnt, 0); } else { secondary_mz = rte_memzone_lookup(MZ_MANA_SHARED_DATA); if (!secondary_mz) { @@ -1093,7 +1101,6 @@ } mana_shared_data = secondary_mz->addr; - memset(&mana_local_data, 0, sizeof(mana_local_data)); } exit: @@ -1114,11 +1121,11 @@ if (ret) return ret; - rte_spinlock_lock(&mana_shared_data->lock); + rte_spinlock_lock(&mana_shared_data_lock); switch (rte_eal_process_type()) { case RTE_PROC_PRIMARY: - if (mana_shared_data->init_done) + if (mana_local_data.init_done) break; ret = mana_mp_init_primary(); @@ -1126,7 +1133,7 @@ break; DRV_LOG(ERR, "MP INIT PRIMARY"); - mana_shared_data->init_done = 1; + mana_local_data.init_done = 1; break; case RTE_PROC_SECONDARY: @@ -1149,7 +1156,7 @@ break; } - rte_spinlock_unlock(&mana_shared_data->lock); + rte_spinlock_unlock(&mana_shared_data_lock); return ret; } @@ -1220,11 +1227,6 @@ eth_dev->tx_pkt_burst = mana_tx_burst_removed; eth_dev->rx_pkt_burst = mana_rx_burst_removed; - rte_spinlock_lock(&mana_shared_data->lock); - mana_shared_data->secondary_cnt++; - mana_local_data.secondary_cnt++; - rte_spinlock_unlock(&mana_shared_data->lock); - rte_eth_copy_pci_info(eth_dev, pci_dev); rte_eth_dev_probing_finish(eth_dev); @@ -1307,10 +1309,6 @@ goto failed; } - rte_spinlock_lock(&mana_shared_data->lock); - mana_shared_data->primary_cnt++; - rte_spinlock_unlock(&mana_shared_data->lock); - eth_dev->device = &pci_dev->device; DRV_LOG(INFO, "device %s at port %u", name, eth_dev->data->port_id); @@ -1456,13 +1454,37 @@ count = mana_pci_probe_mac(pci_dev, NULL); } + /* If no device is found, clean up resources if this is the last one */ if (!count) { - rte_memzone_free(mana_shared_mz); - mana_shared_mz = NULL; - ret = -ENODEV; + rte_spinlock_lock(&mana_shared_data_lock); + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + if (!mana_local_data.primary_cnt) { + mana_mp_uninit_primary(); + rte_memzone_free(mana_shared_mz); + mana_shared_mz = NULL; + mana_shared_data = NULL; + } + } else { + if (!mana_local_data.secondary_cnt) { + mana_mp_uninit_secondary(); + mana_shared_data = NULL; + } + } + rte_spinlock_unlock(&mana_shared_data_lock); + return -ENODEV; } - return ret; + /* At least one eth_dev is probed, increase counter for shared data */ + rte_spinlock_lock(&mana_shared_data_lock); + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + mana_local_data.primary_cnt++; + } else { + rte_atomic32_add(&mana_shared_data->secondary_cnt, 1); + mana_local_data.secondary_cnt++; + } + rte_spinlock_unlock(&mana_shared_data_lock); + + return 0; } static int @@ -1477,45 +1499,35 @@ static int mana_pci_remove(struct rte_pci_device *pci_dev) { + rte_spinlock_lock(&mana_shared_data_lock); if (rte_eal_process_type() == RTE_PROC_PRIMARY) { - rte_spinlock_lock(&mana_shared_data_lock); - - rte_spinlock_lock(&mana_shared_data->lock); + RTE_VERIFY(mana_local_data.primary_cnt > 0); + mana_local_data.primary_cnt--; - RTE_VERIFY(mana_shared_data->primary_cnt > 0); - mana_shared_data->primary_cnt--; - if (!mana_shared_data->primary_cnt) { + if (!mana_local_data.primary_cnt) { DRV_LOG(DEBUG, "mp uninit primary"); mana_mp_uninit_primary(); - } - - rte_spinlock_unlock(&mana_shared_data->lock); - /* Also free the shared memory if this is the last */ - if (!mana_shared_data->primary_cnt) { + /* Also free the shared memory if this is the last */ DRV_LOG(DEBUG, "free shared memezone data"); rte_memzone_free(mana_shared_mz); mana_shared_mz = NULL; + mana_shared_data = NULL; } - - rte_spinlock_unlock(&mana_shared_data_lock); } else { - rte_spinlock_lock(&mana_shared_data_lock); - - rte_spinlock_lock(&mana_shared_data->lock); - RTE_VERIFY(mana_shared_data->secondary_cnt > 0); - mana_shared_data->secondary_cnt--; - rte_spinlock_unlock(&mana_shared_data->lock); + RTE_VERIFY(rte_atomic32_read(&mana_shared_data->secondary_cnt) + > 0); + rte_atomic32_sub(&mana_shared_data->secondary_cnt, 1); RTE_VERIFY(mana_local_data.secondary_cnt > 0); mana_local_data.secondary_cnt--; if (!mana_local_data.secondary_cnt) { DRV_LOG(DEBUG, "mp uninit secondary"); mana_mp_uninit_secondary(); + mana_shared_data = NULL; } - - rte_spinlock_unlock(&mana_shared_data_lock); } + rte_spinlock_unlock(&mana_shared_data_lock); return rte_eth_dev_pci_generic_remove(pci_dev, mana_dev_uninit); } diff -Nru dpdk-22.11.7/drivers/net/mana/mana.h dpdk-22.11.8/drivers/net/mana/mana.h --- dpdk-22.11.7/drivers/net/mana/mana.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mana/mana.h 2025-04-08 19:02:56.000000000 +0000 @@ -8,12 +8,8 @@ #define PCI_VENDOR_ID_MICROSOFT 0x1414 #define PCI_DEVICE_ID_MICROSOFT_MANA 0x00ba -/* Shared data between primary/secondary processes */ struct mana_shared_data { - rte_spinlock_t lock; - int init_done; - unsigned int primary_cnt; - unsigned int secondary_cnt; + rte_atomic32_t secondary_cnt; }; #define MIN_RX_BUF_SIZE 1024 diff -Nru dpdk-22.11.7/drivers/net/mana/mp.c dpdk-22.11.8/drivers/net/mana/mp.c --- dpdk-22.11.7/drivers/net/mana/mp.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mana/mp.c 2025-04-08 19:02:56.000000000 +0000 @@ -305,7 +305,7 @@ return; } - if (!mana_shared_data->secondary_cnt) + if (rte_atomic32_read(&mana_shared_data->secondary_cnt) == 0) return; mp_init_msg(&mp_req, type, dev->data->port_id); diff -Nru dpdk-22.11.7/drivers/net/mlx4/mlx4_flow.c dpdk-22.11.8/drivers/net/mlx4/mlx4_flow.c --- dpdk-22.11.7/drivers/net/mlx4/mlx4_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx4/mlx4_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -582,7 +582,7 @@ RTE_FLOW_ITEM_TYPE_IPV4), .mask_support = &(const struct rte_flow_item_eth){ /* Only destination MAC can be matched. */ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, .mask_default = &rte_flow_item_eth_mask, .mask_sz = sizeof(struct rte_flow_item_eth), @@ -1304,10 +1304,10 @@ }; struct rte_flow_item_eth eth_spec; const struct rte_flow_item_eth eth_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; const struct rte_flow_item_eth eth_allmulti = { - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; struct rte_flow_item_vlan vlan_spec; const struct rte_flow_item_vlan vlan_mask = { diff -Nru dpdk-22.11.7/drivers/net/mlx5/hws/mlx5dr_definer.c dpdk-22.11.8/drivers/net/mlx5/hws/mlx5dr_definer.c --- dpdk-22.11.7/drivers/net/mlx5/hws/mlx5dr_definer.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/hws/mlx5dr_definer.c 2025-04-08 19:02:56.000000000 +0000 @@ -152,7 +152,7 @@ X(SET, gtp_udp_port, RTE_GTPU_UDP_PORT, rte_flow_item_gtp) \ X(SET_BE32, gtp_teid, v->teid, rte_flow_item_gtp) \ X(SET, gtp_msg_type, v->msg_type, rte_flow_item_gtp) \ - X(SET, gtp_ext_flag, !!v->v_pt_rsv_flags, rte_flow_item_gtp) \ + X(SET, gtp_flags, v->v_pt_rsv_flags, rte_flow_item_gtp) \ X(SET, gtp_next_ext_hdr, GTP_PDU_SC, rte_flow_item_gtp_psc) \ X(SET, gtp_ext_hdr_pdu, v->hdr.type, rte_flow_item_gtp_psc) \ X(SET, gtp_ext_hdr_qfi, v->hdr.qfi, rte_flow_item_gtp_psc) \ @@ -392,10 +392,11 @@ uint8_t *tag) { const struct rte_flow_item_ethdev *v = item_spec; - const struct flow_hw_port_info *port_info; + const struct flow_hw_port_info *port_info = NULL; uint32_t regc_value; - port_info = flow_hw_conv_port_id(v->port_id); + if (v) + port_info = flow_hw_conv_port_id(v->port_id); if (unlikely(!port_info)) regc_value = BAD_PORT; else @@ -856,7 +857,7 @@ if (!m) return 0; - if (m->msg_len || m->v_pt_rsv_flags & ~MLX5DR_DEFINER_GTP_EXT_HDR_BIT) { + if (m->msg_len) { rte_errno = ENOTSUP; return rte_errno; } @@ -878,11 +879,11 @@ rte_errno = ENOTSUP; return rte_errno; } - fc = &cd->fc[MLX5DR_DEFINER_FNAME_GTP_EXT_FLAG]; + fc = &cd->fc[MLX5DR_DEFINER_FNAME_GTP_FLAGS]; fc->item_idx = item_idx; - fc->tag_set = &mlx5dr_definer_gtp_ext_flag_set; - fc->bit_mask = __mlx5_mask(header_gtp, ext_hdr_flag); - fc->bit_off = __mlx5_dw_bit_off(header_gtp, ext_hdr_flag); + fc->tag_set = &mlx5dr_definer_gtp_flags_set; + fc->bit_mask = __mlx5_mask(header_gtp, v_pt_rsv_flags); + fc->bit_off = __mlx5_dw_bit_off(header_gtp, v_pt_rsv_flags); fc->byte_off = cd->caps->format_select_gtpu_dw_0 * DW_SIZE; } @@ -977,11 +978,12 @@ struct rte_flow_item *item, int item_idx) { - const struct rte_flow_item_ethdev *m = item->mask; + uint16_t port_id = item->mask ? + ((const struct rte_flow_item_ethdev *)(item->mask))->port_id : 0; struct mlx5dr_definer_fc *fc; uint8_t bit_offset = 0; - if (m->port_id) { + if (port_id) { if (!cd->caps->wire_regc_mask) { DR_LOG(ERR, "Port ID item not supported, missing wire REGC mask"); rte_errno = ENOTSUP; @@ -998,10 +1000,6 @@ DR_CALC_SET_HDR(fc, registers, register_c_0); fc->bit_off = bit_offset; fc->bit_mask = cd->caps->wire_regc_mask >> bit_offset; - } else { - DR_LOG(ERR, "Pord ID item mask must specify ID mask"); - rte_errno = EINVAL; - return rte_errno; } return 0; diff -Nru dpdk-22.11.7/drivers/net/mlx5/hws/mlx5dr_definer.h dpdk-22.11.8/drivers/net/mlx5/hws/mlx5dr_definer.h --- dpdk-22.11.7/drivers/net/mlx5/hws/mlx5dr_definer.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/hws/mlx5dr_definer.h 2025-04-08 19:02:56.000000000 +0000 @@ -71,6 +71,7 @@ MLX5DR_DEFINER_FNAME_GTP_TEID, MLX5DR_DEFINER_FNAME_GTP_MSG_TYPE, MLX5DR_DEFINER_FNAME_GTP_EXT_FLAG, + MLX5DR_DEFINER_FNAME_GTP_FLAGS, MLX5DR_DEFINER_FNAME_GTP_NEXT_EXT_HDR, MLX5DR_DEFINER_FNAME_GTP_EXT_HDR_PDU, MLX5DR_DEFINER_FNAME_GTP_EXT_HDR_QFI, @@ -479,12 +480,17 @@ }; struct mlx5_ifc_header_gtp_bits { - u8 version[0x3]; - u8 proto_type[0x1]; - u8 reserved1[0x1]; - u8 ext_hdr_flag[0x1]; - u8 seq_num_flag[0x1]; - u8 pdu_flag[0x1]; + union { + u8 v_pt_rsv_flags[0x8]; + struct { + u8 version[0x3]; + u8 proto_type[0x1]; + u8 reserved1[0x1]; + u8 ext_hdr_flag[0x1]; + u8 seq_num_flag[0x1]; + u8 pdu_flag[0x1]; + }; + }; u8 msg_type[0x8]; u8 msg_len[0x8]; u8 teid[0x20]; diff -Nru dpdk-22.11.7/drivers/net/mlx5/linux/mlx5_os.c dpdk-22.11.8/drivers/net/mlx5/linux/mlx5_os.c --- dpdk-22.11.7/drivers/net/mlx5/linux/mlx5_os.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/linux/mlx5_os.c 2025-04-08 19:02:56.000000000 +0000 @@ -2657,10 +2657,15 @@ void mlx5_os_dev_shared_handler_uninstall(struct mlx5_dev_ctx_shared *sh) { + int fd; + mlx5_os_interrupt_handler_destroy(sh->intr_handle, mlx5_dev_interrupt_handler, sh); + fd = rte_intr_fd_get(sh->intr_handle_nl); mlx5_os_interrupt_handler_destroy(sh->intr_handle_nl, mlx5_dev_interrupt_handler_nl, sh); + if (fd >= 0) + close(fd); #ifdef HAVE_IBV_DEVX_ASYNC mlx5_os_interrupt_handler_destroy(sh->intr_handle_devx, mlx5_dev_interrupt_handler_devx, sh); diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_flow.c dpdk-22.11.8/drivers/net/mlx5/mlx5_flow.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -2444,8 +2444,8 @@ { const struct rte_flow_item_eth *mask = item->mask; const struct rte_flow_item_eth nic_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .type = RTE_BE16(0xffff), .has_vlan = ext_vlan_sup ? 1 : 0, }; @@ -2707,12 +2707,10 @@ const struct rte_flow_item_ipv6 *spec = item->spec; const struct rte_flow_item_ipv6 nic_mask = { .hdr = { - .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .vtc_flow = RTE_BE32(0xffffffff), .proto = 0xff, }, @@ -2932,7 +2930,7 @@ uint8_t vni[4]; } id = { .vlan_id = 0, }; const struct rte_flow_item_vxlan nic_mask = { - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, .rsvd1 = 0xff, }; const struct rte_flow_item_vxlan *valid_mask; @@ -3314,7 +3312,7 @@ MLX5_GENEVE_OPT_LEN_1 : MLX5_GENEVE_OPT_LEN_0; const struct rte_flow_item_geneve nic_mask = { .ver_opt_len_o_c_rsvd0 = RTE_BE16(0x3f80), - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, .protocol = RTE_BE16(UINT16_MAX), }; @@ -7477,7 +7475,6 @@ priv->hws_rule_flushing = true; flow_hw_q_flow_flush(dev, NULL); priv->hws_rule_flushing = false; - return; } #endif diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_flow.h dpdk-22.11.8/drivers/net/mlx5/mlx5_flow.h --- dpdk-22.11.7/drivers/net/mlx5/mlx5_flow.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_flow.h 2025-04-08 19:02:56.000000000 +0000 @@ -1282,7 +1282,7 @@ }; /* The maximum actions support in the flow. */ -#define MLX5_HW_MAX_ACTS 16 +#define MLX5_HW_MAX_ACTS 32 /* DR action set struct. */ struct mlx5_hw_actions { diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_flow_dv.c dpdk-22.11.8/drivers/net/mlx5/mlx5_flow_dv.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_flow_dv.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_flow_dv.c 2025-04-08 19:02:56.000000000 +0000 @@ -7082,11 +7082,11 @@ const struct rte_flow_item_ipv6 nic_ipv6_mask = { .hdr = { .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .vtc_flow = RTE_BE32(0xffffffff), .proto = 0xff, .hop_limits = 0xff, @@ -7249,7 +7249,10 @@ mlx5_flow_tunnel_ip_check(items, next_protocol, item_flags, &l3_tunnel_flag); - if (l3_tunnel_detection == l3_tunnel_inner) { + /* + * explicitly allow inner IPIP match + */ + if (l3_tunnel_detection == l3_tunnel_outer) { item_flags |= l3_tunnel_flag; tunnel = 1; } @@ -7270,7 +7273,10 @@ mlx5_flow_tunnel_ip_check(items, next_protocol, item_flags, &l3_tunnel_flag); - if (l3_tunnel_detection == l3_tunnel_inner) { + /* + * explicitly allow inner IPIP match + */ + if (l3_tunnel_detection == l3_tunnel_outer) { item_flags |= l3_tunnel_flag; tunnel = 1; } @@ -8563,8 +8569,8 @@ const struct rte_flow_item_eth *eth_m; const struct rte_flow_item_eth *eth_v; const struct rte_flow_item_eth nic_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .type = RTE_BE16(0xffff), .has_vlan = 0, }; @@ -8821,12 +8827,10 @@ const struct rte_flow_item_ipv6 *ipv6_v; const struct rte_flow_item_ipv6 nic_mask = { .hdr = { - .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .vtc_flow = RTE_BE32(0xffffffff), .proto = 0xff, .hop_limits = 0xff, @@ -9108,23 +9112,26 @@ } gre_crks_rsvd0_ver_m, gre_crks_rsvd0_ver_v; uint16_t protocol_m, protocol_v; - if (key_type & MLX5_SET_MATCHER_M) { + /* Common logic to SWS/HWS */ + if (key_type & MLX5_SET_MATCHER_M) MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, 0xff); - if (!gre_m) - gre_m = &rte_flow_item_gre_mask; - gre_v = gre_m; - } else { + else MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, - IPPROTO_GRE); - if (!gre_v) { - gre_v = &empty_gre; + IPPROTO_GRE); + /* HWS mask logic only */ + if (key_type & MLX5_SET_MATCHER_HS_M) { + if (!gre_m) gre_m = &empty_gre; - } else if (!gre_m) { - gre_m = &rte_flow_item_gre_mask; - } - if (key_type == MLX5_SET_MATCHER_HS_V) - gre_m = gre_v; + gre_v = gre_m; + } else if (!gre_v) { + gre_v = &empty_gre; + gre_m = &empty_gre; + } else if (!gre_m) { + gre_m = &rte_flow_item_gre_mask; } + /* SWS logic only */ + if (key_type & MLX5_SET_MATCHER_SW_M) + gre_v = gre_m; gre_crks_rsvd0_ver_m.value = rte_be_to_cpu_16(gre_m->c_rsvd0_ver); gre_crks_rsvd0_ver_v.value = rte_be_to_cpu_16(gre_v->c_rsvd0_ver); MLX5_SET(fte_match_set_misc, misc_v, gre_c_present, @@ -9337,7 +9344,7 @@ int i; struct mlx5_priv *priv = dev->data->dev_private; const struct rte_flow_item_vxlan nic_mask = { - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, .rsvd1 = 0xff, }; diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_flow_hw.c dpdk-22.11.8/drivers/net/mlx5/mlx5_flow_hw.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_flow_hw.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_flow_hw.c 2025-04-08 19:02:56.000000000 +0000 @@ -12,9 +12,6 @@ #if defined(HAVE_IBV_FLOW_DV_SUPPORT) || !defined(HAVE_INFINIBAND_VERBS_H) #include "mlx5_hws_cnt.h" -/* The maximum actions support in the flow. */ -#define MLX5_HW_MAX_ACTS 16 - /* * The default ipool threshold value indicates which per_core_cache * value to set. @@ -109,67 +106,67 @@ /* Ethernet item spec for promiscuous mode. */ static const struct rte_flow_item_eth ctrl_rx_eth_promisc_spec = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item mask for promiscuous mode. */ static const struct rte_flow_item_eth ctrl_rx_eth_promisc_mask = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item spec for all multicast mode. */ static const struct rte_flow_item_eth ctrl_rx_eth_mcast_spec = { - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item mask for all multicast mode. */ static const struct rte_flow_item_eth ctrl_rx_eth_mcast_mask = { - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item spec for IPv4 multicast traffic. */ static const struct rte_flow_item_eth ctrl_rx_eth_ipv4_mcast_spec = { - .dst.addr_bytes = "\x01\x00\x5e\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x5e, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item mask for IPv4 multicast traffic. */ static const struct rte_flow_item_eth ctrl_rx_eth_ipv4_mcast_mask = { - .dst.addr_bytes = "\xff\xff\xff\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item spec for IPv6 multicast traffic. */ static const struct rte_flow_item_eth ctrl_rx_eth_ipv6_mcast_spec = { - .dst.addr_bytes = "\x33\x33\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item mask for IPv6 multicast traffic. */ static const struct rte_flow_item_eth ctrl_rx_eth_ipv6_mcast_mask = { - .dst.addr_bytes = "\xff\xff\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item mask for unicast traffic. */ static const struct rte_flow_item_eth ctrl_rx_eth_dmac_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; /* Ethernet item spec for broadcast. */ static const struct rte_flow_item_eth ctrl_rx_eth_bcast_spec = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; @@ -1371,6 +1368,11 @@ uint8_t *encap_data = NULL, *encap_data_m = NULL; size_t data_size = 0; struct mlx5_hw_modify_header_action mhdr = { 0 }; + struct rte_flow_error sub_error = { + .type = RTE_FLOW_ERROR_TYPE_NONE, + .cause = NULL, + .message = NULL, + }; bool actions_end = false; uint32_t type; bool reformat_used = false; @@ -1462,7 +1464,7 @@ ((const struct rte_flow_action_jump *) actions->conf)->group; acts->jump = flow_hw_jump_action_register - (dev, cfg, jump_group, error); + (dev, cfg, jump_group, &sub_error); if (!acts->jump) goto err; acts->rule_acts[action_pos].action = (!!attr->group) ? @@ -1571,7 +1573,7 @@ case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD: err = flow_hw_modify_field_compile(dev, attr, action_start, actions, masks, acts, &mhdr, - error); + &sub_error); if (err) goto err; /* @@ -1589,7 +1591,7 @@ action_pos = at->actions_off[actions - at->actions]; if (flow_hw_represented_port_compile (dev, attr, action_start, actions, - masks, acts, action_pos, error)) + masks, acts, action_pos, &sub_error)) goto err; break; case RTE_FLOW_ACTION_TYPE_METER: @@ -1604,7 +1606,7 @@ ((const struct rte_flow_action_meter *) masks->conf)->mtr_id) { err = flow_hw_meter_compile(dev, cfg, - action_pos, jump_pos, actions, acts, error); + action_pos, jump_pos, actions, acts, &sub_error); if (err) goto err; } else if (__flow_hw_act_data_general_append(priv, acts, @@ -1615,13 +1617,14 @@ break; case RTE_FLOW_ACTION_TYPE_AGE: flow_hw_translate_group(dev, cfg, attr->group, - &target_grp, error); + &target_grp, &sub_error); if (target_grp == 0) { __flow_hw_action_template_destroy(dev, acts); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Age action on root table is not supported in HW steering mode"); + rte_flow_error_set(&sub_error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "Age action on root table is not supported in HW steering mode"); + goto err; } action_pos = at->actions_off[actions - at->actions]; if (__flow_hw_act_data_general_append(priv, acts, @@ -1632,13 +1635,14 @@ break; case RTE_FLOW_ACTION_TYPE_COUNT: flow_hw_translate_group(dev, cfg, attr->group, - &target_grp, error); + &target_grp, &sub_error); if (target_grp == 0) { __flow_hw_action_template_destroy(dev, acts); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Counter action on root table is not supported in HW steering mode"); + rte_flow_error_set(&sub_error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "Counter action on root table is not supported in HW steering mode"); + goto err; } if ((at->action_flags & MLX5_FLOW_ACTION_AGE) || (at->action_flags & MLX5_FLOW_ACTION_INDIRECT_AGE)) @@ -1742,7 +1746,7 @@ MLX5_ASSERT(at->reformat_off != UINT16_MAX); if (enc_item) { MLX5_ASSERT(!encap_data); - if (flow_dv_convert_encap_data(enc_item, buf, &data_size, error)) + if (flow_dv_convert_encap_data(enc_item, buf, &data_size, &sub_error)) goto err; encap_data = buf; if (!enc_item_m) @@ -1785,6 +1789,10 @@ rte_errno = EINVAL; err = rte_errno; __flow_hw_action_template_destroy(dev, acts); + if (error != NULL && sub_error.type != RTE_FLOW_ERROR_TYPE_NONE) { + rte_memcpy(error, &sub_error, sizeof(sub_error)); + return -EINVAL; + } return rte_flow_error_set(error, err, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "fail to create rte table"); @@ -5844,8 +5852,8 @@ .egress = 1, }; struct rte_flow_item_eth promisc = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; struct rte_flow_item eth_all[] = { @@ -5882,8 +5890,8 @@ .ingress = 1, }; struct rte_flow_item_eth lacp_mask = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0xFFFF, }; struct rte_flow_item eth_all[] = { @@ -9323,8 +9331,8 @@ { struct mlx5_priv *priv = dev->data->dev_private; struct rte_flow_item_eth promisc = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; struct rte_flow_item eth_all[] = { @@ -9662,7 +9670,7 @@ .type = MLX5_HW_CTRL_FLOW_TYPE_DEFAULT_RX_RSS, }; const struct rte_ether_addr cmp = { - .addr_bytes = "\x00\x00\x00\x00\x00\x00", + .addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; unsigned int i; @@ -9708,7 +9716,7 @@ .type = MLX5_HW_CTRL_FLOW_TYPE_DEFAULT_RX_RSS, }; const struct rte_ether_addr cmp = { - .addr_bytes = "\x00\x00\x00\x00\x00\x00", + .addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; unsigned int i; unsigned int j; diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_hws_cnt.c dpdk-22.11.8/drivers/net/mlx5/mlx5_hws_cnt.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_hws_cnt.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_hws_cnt.c 2025-04-08 19:02:56.000000000 +0000 @@ -658,7 +658,7 @@ struct mlx5_priv *priv = dev->data->dev_private; struct mlx5_hws_cache_param cparam = {0}; struct mlx5_hws_cnt_pool_cfg pcfg = {0}; - char *mp_name; + char *mp_name = NULL; int ret = 0; size_t sz; @@ -666,7 +666,7 @@ if (priv->sh->cnt_svc == NULL) { ret = mlx5_hws_cnt_svc_init(priv->sh); if (ret != 0) - return NULL; + goto error; } cparam.fetch_sz = HWS_CNT_CACHE_FETCH_DEFAULT; cparam.preload_sz = HWS_CNT_CACHE_PRELOAD_DEFAULT; @@ -711,6 +711,7 @@ return cpool; error: mlx5_hws_cnt_pool_destroy(priv->sh, cpool); + mlx5_free(mp_name); return NULL; } diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_rxtx.c dpdk-22.11.8/drivers/net/mlx5/mlx5_rxtx.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_rxtx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_rxtx.c 2025-04-08 19:02:56.000000000 +0000 @@ -118,8 +118,24 @@ /* Fragmented */ (*p)[0x21] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_L4_FRAG; + (*p)[0x25] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x29] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x2d] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x31] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; (*p)[0x22] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_FRAG; + (*p)[0x26] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x2a] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x2e] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0x32] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; /* TCP */ (*p)[0x05] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_L4_TCP; @@ -145,8 +161,24 @@ RTE_PTYPE_L4_NONFRAG; (*p)[0xa1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_L4_FRAG; + (*p)[0xa5] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xa9] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xad] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xb1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; (*p)[0xa2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L4_FRAG; + (*p)[0xa6] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xaa] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xae] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; + (*p)[0xb2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_L4_FRAG; (*p)[0x85] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_L4_TCP; (*p)[0x86] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | @@ -182,15 +214,63 @@ (*p)[0x61] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x65] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x69] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x6d] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x71] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; (*p)[0x62] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x66] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x6a] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x6e] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0x72] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; (*p)[0xe1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xe5] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xe9] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xed] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xf1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; (*p)[0xe2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xe6] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xea] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xee] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; + (*p)[0xf2] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | + RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN | + RTE_PTYPE_INNER_L4_FRAG; /* Tunneled - TCP */ (*p)[0x45] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN | diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_rxtx_vec.c dpdk-22.11.8/drivers/net/mlx5/mlx5_rxtx_vec.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_rxtx_vec.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_rxtx_vec.c 2025-04-08 19:02:56.000000000 +0000 @@ -324,6 +324,9 @@ /* Not to cross queue end. */ pkts_n = RTE_MIN(pkts_n, q_n - elts_idx); pkts_n = RTE_MIN(pkts_n, q_n - cq_idx); + /* Not to move past the allocated mbufs. */ + pkts_n = RTE_MIN(pkts_n, RTE_ALIGN_FLOOR(rxq->rq_ci - rxq->rq_pi, + MLX5_VPMD_DESCS_PER_LOOP)); if (!pkts_n) { *no_cq = !rcvd_pkt; return rcvd_pkt; diff -Nru dpdk-22.11.7/drivers/net/mlx5/mlx5_trigger.c dpdk-22.11.8/drivers/net/mlx5/mlx5_trigger.c --- dpdk-22.11.7/drivers/net/mlx5/mlx5_trigger.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/mlx5/mlx5_trigger.c 2025-04-08 19:02:56.000000000 +0000 @@ -1524,11 +1524,11 @@ } else { DRV_LOG(INFO, "port %u FDB default rule is disabled", dev->data->port_id); } - if (priv->isolated) - return 0; if (!priv->sh->config.lacp_by_user && priv->pf_bond >= 0 && priv->master) if (mlx5_flow_hw_lacp_rx_flow(dev)) goto error; + if (priv->isolated) + return 0; if (dev->data->promiscuous) flags |= MLX5_CTRL_PROMISCUOUS; if (dev->data->all_multicast) @@ -1562,23 +1562,23 @@ { struct mlx5_priv *priv = dev->data->dev_private; struct rte_flow_item_eth bcast = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; struct rte_flow_item_eth ipv6_multi_spec = { - .dst.addr_bytes = "\x33\x33\x00\x00\x00\x00", + .dst.addr_bytes = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }, }; struct rte_flow_item_eth ipv6_multi_mask = { - .dst.addr_bytes = "\xff\xff\x00\x00\x00\x00", + .dst.addr_bytes = { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, }; struct rte_flow_item_eth unicast = { - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; struct rte_flow_item_eth unicast_mask = { - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; const unsigned int vlan_filter_n = priv->vlan_filter_n; const struct rte_ether_addr cmp = { - .addr_bytes = "\x00\x00\x00\x00\x00\x00", + .addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, }; unsigned int i; unsigned int j; @@ -1647,8 +1647,8 @@ return 0; if (dev->data->promiscuous) { struct rte_flow_item_eth promisc = { - .dst.addr_bytes = "\x00\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; @@ -1658,8 +1658,8 @@ } if (dev->data->all_multicast) { struct rte_flow_item_eth multicast = { - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", - .src.addr_bytes = "\x00\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, + .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, .type = 0, }; diff -Nru dpdk-22.11.7/drivers/net/netvsc/hn_ethdev.c dpdk-22.11.8/drivers/net/netvsc/hn_ethdev.c --- dpdk-22.11.7/drivers/net/netvsc/hn_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/netvsc/hn_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -570,7 +570,7 @@ struct rte_devargs *d = &hot_ctx->da; char buf[256]; - DIR *di; + DIR *di = NULL; struct dirent *dir; struct ifreq req; struct rte_ether_addr eth_addr; @@ -590,7 +590,9 @@ if (!di) { PMD_DRV_LOG(DEBUG, "%s: can't open directory %s, " "retrying in 1 second", __func__, buf); - goto retry; + /* The device is still being initialized, retry after 1 second */ + rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hot_ctx); + return; } while ((dir = readdir(di))) { @@ -614,10 +616,9 @@ dir->d_name); break; } - if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) { - closedir(di); - goto free_hotadd_ctx; - } + if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) + continue; + memcpy(eth_addr.addr_bytes, req.ifr_hwaddr.sa_data, RTE_DIM(eth_addr.addr_bytes)); @@ -636,22 +637,16 @@ PMD_DRV_LOG(ERR, "Failed to add PCI device %s", d->name); - break; } + + break; } - /* When the code reaches here, we either have already added - * the device, or its MAC address did not match. - */ - closedir(di); - goto free_hotadd_ctx; } - closedir(di); -retry: - /* The device is still being initialized, retry after 1 second */ - rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hot_ctx); - return; free_hotadd_ctx: + if (di) + closedir(di); + rte_spinlock_lock(&hv->hotadd_lock); LIST_REMOVE(hot_ctx, list); rte_spinlock_unlock(&hv->hotadd_lock); diff -Nru dpdk-22.11.7/drivers/net/netvsc/hn_vf.c dpdk-22.11.8/drivers/net/netvsc/hn_vf.c --- dpdk-22.11.7/drivers/net/netvsc/hn_vf.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/netvsc/hn_vf.c 2025-04-08 19:02:56.000000000 +0000 @@ -102,6 +102,7 @@ uint16_t port_id = hv->vf_ctx.vf_port; struct rte_device *dev = rte_eth_devices[port_id].device; int ret; + bool all_eth_removed; /* Tell VSP to switch data path to synthetic */ hn_vf_remove(hv); @@ -138,7 +139,17 @@ PMD_DRV_LOG(ERR, "rte_eth_dev_close failed port_id=%u ret=%d", port_id, ret); - ret = rte_dev_remove(dev); + /* Remove the rte device when all its eth devices are removed */ + all_eth_removed = true; + RTE_ETH_FOREACH_DEV_OF(port_id, dev) { + if (rte_eth_devices[port_id].state != RTE_ETH_DEV_UNUSED) { + all_eth_removed = false; + break; + } + } + if (all_eth_removed) + ret = rte_dev_remove(dev); + hv->vf_ctx.vf_state = vf_removed; rte_rwlock_write_unlock(&hv->vf_lock); diff -Nru dpdk-22.11.7/drivers/net/nfp/nfp_flow.c dpdk-22.11.8/drivers/net/nfp/nfp_flow.c --- dpdk-22.11.7/drivers/net/nfp/nfp_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/nfp/nfp_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -1679,8 +1679,8 @@ RTE_FLOW_ITEM_TYPE_IPV6), .mask_support = &(const struct rte_flow_item_eth){ .hdr = { - .dst_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .ether_type = RTE_BE16(0xffff), }, .has_vlan = 1, @@ -1732,10 +1732,10 @@ .vtc_flow = RTE_BE32(0x0ff00000), .proto = 0xff, .hop_limits = 0xff, - .src_addr = "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, .has_frag_ext = 1, }, @@ -1793,7 +1793,7 @@ [RTE_FLOW_ITEM_TYPE_GENEVE] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), .mask_support = &(const struct rte_flow_item_geneve){ - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, }, .mask_default = &rte_flow_item_geneve_mask, .mask_sz = sizeof(struct rte_flow_item_geneve), diff -Nru dpdk-22.11.7/drivers/net/qede/base/ecore_dcbx.c dpdk-22.11.8/drivers/net/qede/base/ecore_dcbx.c --- dpdk-22.11.7/drivers/net/qede/base/ecore_dcbx.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/qede/base/ecore_dcbx.c 2025-04-08 19:02:56.000000000 +0000 @@ -1363,7 +1363,7 @@ struct ecore_dcbx_mib_meta_data data; enum _ecore_status_t rc = ECORE_SUCCESS; struct lldp_received_tlvs_s tlvs; - int i; + int i, j; for (i = 0; i < LLDP_MAX_LLDP_AGENTS; i++) { OSAL_MEM_ZERO(&data, sizeof(data)); @@ -1381,9 +1381,9 @@ if (!tlvs.length) continue; - for (i = 0; i < MAX_TLV_BUFFER; i++) - tlvs.tlvs_buffer[i] = - OSAL_CPU_TO_BE32(tlvs.tlvs_buffer[i]); + for (j = 0; j < MAX_TLV_BUFFER; j++) + tlvs.tlvs_buffer[j] = + OSAL_CPU_TO_BE32(tlvs.tlvs_buffer[j]); OSAL_LLDP_RX_TLVS(p_hwfn, tlvs.tlvs_buffer, tlvs.length); } diff -Nru dpdk-22.11.7/drivers/net/qede/qede_debug.c dpdk-22.11.8/drivers/net/qede/qede_debug.c --- dpdk-22.11.7/drivers/net/qede/qede_debug.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/qede/qede_debug.c 2025-04-08 19:02:56.000000000 +0000 @@ -4,6 +4,7 @@ * www.marvell.com */ +#include #include #include "base/bcm_osal.h" #include "base/ecore.h" @@ -82,6 +83,7 @@ "TM_MEM", "TASK_CFC_MEM", }; +static_assert(RTE_DIM(s_mem_group_names) == MEM_GROUPS_NUM, "memory group string mismatch"); /* Idle check conditions */ @@ -5614,6 +5616,8 @@ /* DBG_STATUS_INVALID_FILTER_TRIGGER_DWORDS */ "The filter/trigger constraint dword offsets are not enabled for recording", + /* DBG_STATUS_NO_MATCHING_FRAMING_MODE */ + "No matching frame mode", /* DBG_STATUS_VFC_READ_ERROR */ "Error reading from VFC", @@ -5759,6 +5763,7 @@ /* DBG_STATUS_MISSING_TRIGGER_STATE_STORM */ "When triggering on Storm data, the Storm to trigger on must be specified" }; +static_assert(RTE_DIM(s_status_str) == MAX_DBG_STATUS, "status string table mismatch"); /* Idle check severity names array */ static const char * const s_idle_chk_severity_str[] = { diff -Nru dpdk-22.11.7/drivers/net/sfc/sfc_repr.c dpdk-22.11.8/drivers/net/sfc/sfc_repr.c --- dpdk-22.11.7/drivers/net/sfc/sfc_repr.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/sfc/sfc_repr.c 2025-04-08 19:02:56.000000000 +0000 @@ -797,11 +797,7 @@ sfc_repr_close(struct sfc_repr *sr) { SFC_ASSERT(sfc_repr_lock_is_locked(sr)); - SFC_ASSERT(sr->state == SFC_ETHDEV_CONFIGURED); - sr->state = SFC_ETHDEV_CLOSING; - - /* Put representor close actions here */ sr->state = SFC_ETHDEV_INITIALIZED; } diff -Nru dpdk-22.11.7/drivers/net/tap/tap_flow.c dpdk-22.11.8/drivers/net/tap/tap_flow.c --- dpdk-22.11.7/drivers/net/tap/tap_flow.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/tap/tap_flow.c 2025-04-08 19:02:56.000000000 +0000 @@ -259,8 +259,8 @@ RTE_FLOW_ITEM_TYPE_IPV4, RTE_FLOW_ITEM_TYPE_IPV6), .mask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .src.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .src.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .type = -1, }, .mask_sz = sizeof(struct rte_flow_item_eth), @@ -302,14 +302,10 @@ RTE_FLOW_ITEM_TYPE_TCP), .mask = &(const struct rte_flow_item_ipv6){ .hdr = { - .src_addr = { - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - }, - .dst_addr = { - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - }, + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .proto = -1, }, }, @@ -392,7 +388,7 @@ .items[0] = { .type = RTE_FLOW_ITEM_TYPE_ETH, .mask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, }, .items[1] = { @@ -409,10 +405,10 @@ .items[0] = { .type = RTE_FLOW_ITEM_TYPE_ETH, .mask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, .spec = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .dst.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, }, .items[1] = { @@ -429,10 +425,10 @@ .items[0] = { .type = RTE_FLOW_ITEM_TYPE_ETH, .mask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\x33\x33\x00\x00\x00\x00", + .dst.addr_bytes = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }, }, .spec = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\x33\x33\x00\x00\x00\x00", + .dst.addr_bytes = { 0x33, 0x33, 0x00, 0x00, 0x00, 0x00 }, }, }, .items[1] = { @@ -463,10 +459,10 @@ .items[0] = { .type = RTE_FLOW_ITEM_TYPE_ETH, .mask = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, .spec = &(const struct rte_flow_item_eth){ - .dst.addr_bytes = "\x01\x00\x00\x00\x00\x00", + .dst.addr_bytes = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 }, }, }, .items[1] = { diff -Nru dpdk-22.11.7/drivers/net/thunderx/base/nicvf_mbox.c dpdk-22.11.8/drivers/net/thunderx/base/nicvf_mbox.c --- dpdk-22.11.7/drivers/net/thunderx/base/nicvf_mbox.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/thunderx/base/nicvf_mbox.c 2025-04-08 19:02:56.000000000 +0000 @@ -212,7 +212,7 @@ nicvf_mbox_set_mac_addr(struct nicvf *nic, const uint8_t mac[NICVF_MAC_ADDR_SIZE]) { - struct nic_mbx mbx = { .msg = {0} }; + struct nic_mbx mbx = { }; int i; mbx.msg.msg = NIC_MBOX_MSG_SET_MAC; @@ -226,7 +226,7 @@ int nicvf_mbox_config_cpi(struct nicvf *nic, uint32_t qcnt) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_CPI_CFG; mbx.cpi_cfg.vf_id = nic->vf_id; @@ -239,7 +239,7 @@ int nicvf_mbox_get_rss_size(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_RSS_SIZE; mbx.rss_size.vf_id = nic->vf_id; @@ -251,7 +251,7 @@ int nicvf_mbox_config_rss(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; struct nicvf_rss_reta_info *rss = &nic->rss_info; size_t tot_len = rss->rss_size; size_t cur_len; @@ -284,7 +284,7 @@ nicvf_mbox_rq_config(struct nicvf *nic, uint16_t qidx, struct pf_rq_cfg *pf_rq_cfg) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_RQ_CFG; mbx.rq.qs_num = nic->vf_id; @@ -296,7 +296,7 @@ int nicvf_mbox_sq_config(struct nicvf *nic, uint16_t qidx) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_SQ_CFG; mbx.sq.qs_num = nic->vf_id; @@ -309,7 +309,7 @@ int nicvf_mbox_qset_config(struct nicvf *nic, struct pf_qs_cfg *qs_cfg) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; #if NICVF_BYTE_ORDER == NICVF_BIG_ENDIAN qs_cfg->be = 1; @@ -325,7 +325,7 @@ int nicvf_mbox_request_sqs(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; size_t i; assert_primary(nic); @@ -346,7 +346,7 @@ int nicvf_mbox_rq_drop_config(struct nicvf *nic, uint16_t qidx, bool enable) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; struct pf_rq_drop_cfg *drop_cfg; /* Enable CQ drop to reserve sufficient CQEs for all tx packets */ @@ -365,7 +365,7 @@ int nicvf_mbox_update_hw_max_frs(struct nicvf *nic, uint16_t mtu) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_SET_MAX_FRS; mbx.frs.max_frs = mtu; @@ -376,7 +376,7 @@ int nicvf_mbox_rq_sync(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; /* Make sure all packets in the pipeline are written back into mem */ mbx.msg.msg = NIC_MBOX_MSG_RQ_SW_SYNC; @@ -387,7 +387,7 @@ int nicvf_mbox_rq_bp_config(struct nicvf *nic, uint16_t qidx, bool enable) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_RQ_BP_CFG; mbx.rq.qs_num = nic->vf_id; @@ -401,7 +401,7 @@ int nicvf_mbox_loopback_config(struct nicvf *nic, bool enable) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.lbk.msg = NIC_MBOX_MSG_LOOPBACK; mbx.lbk.vf_id = nic->vf_id; @@ -414,7 +414,7 @@ uint8_t tx_stat_mask, uint16_t rq_stat_mask, uint16_t sq_stat_mask) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.reset_stat.msg = NIC_MBOX_MSG_RESET_STAT_COUNTER; mbx.reset_stat.rx_stat_mask = rx_stat_mask; @@ -427,7 +427,7 @@ int nicvf_mbox_set_link_up_down(struct nicvf *nic, bool enable) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.lbk.msg = NIC_MBOX_MSG_SET_LINK; mbx.lbk.vf_id = nic->vf_id; @@ -439,7 +439,7 @@ int nicvf_mbox_change_mode(struct nicvf *nic, struct change_link_mode *cfg) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.mode.msg = NIC_MBOX_MSG_CHANGE_MODE; mbx.mode.vf_id = nic->vf_id; @@ -453,7 +453,7 @@ void nicvf_mbox_shutdown(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_SHUTDOWN; nicvf_mbox_send_msg_to_pf(nic, &mbx); @@ -462,7 +462,7 @@ void nicvf_mbox_cfg_done(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_CFG_DONE; nicvf_mbox_send_async_msg_to_pf(nic, &mbx); @@ -471,7 +471,7 @@ void nicvf_mbox_link_change(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_BGX_LINK_CHANGE; nicvf_mbox_send_async_msg_to_pf(nic, &mbx); @@ -480,7 +480,7 @@ void nicvf_mbox_reset_xcast(struct nicvf *nic) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.msg.msg = NIC_MBOX_MSG_RESET_XCAST; nicvf_mbox_send_msg_to_pf(nic, &mbx); @@ -489,7 +489,7 @@ int nicvf_mbox_set_xcast(struct nicvf *nic, uint8_t mode, uint64_t mac) { - struct nic_mbx mbx = { .msg = { 0 } }; + struct nic_mbx mbx = { }; mbx.xcast.msg = NIC_MBOX_MSG_SET_XCAST; mbx.xcast.mode = mode; diff -Nru dpdk-22.11.7/drivers/net/txgbe/base/txgbe_phy.c dpdk-22.11.8/drivers/net/txgbe/base/txgbe_phy.c --- dpdk-22.11.7/drivers/net/txgbe/base/txgbe_phy.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/net/txgbe/base/txgbe_phy.c 2025-04-08 19:02:56.000000000 +0000 @@ -80,12 +80,8 @@ if (hw->phy.nw_mng_if_sel & TXGBE_ETHPHYIF_MDIO_ACT) hw->phy.addr = TXGBE_ETHPHYIF_MDIO_BASE(hw->phy.nw_mng_if_sel); - if (!hw->phy.phy_semaphore_mask) { - if (hw->bus.lan_id) - hw->phy.phy_semaphore_mask = TXGBE_MNGSEM_SWPHY; - else - hw->phy.phy_semaphore_mask = TXGBE_MNGSEM_SWPHY; - } + if (!hw->phy.phy_semaphore_mask) + hw->phy.phy_semaphore_mask = TXGBE_MNGSEM_SWPHY; return 0; } diff -Nru dpdk-22.11.7/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c dpdk-22.11.8/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c --- dpdk-22.11.7/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/drivers/raw/cnxk_gpio/cnxk_gpio_selftest.c 2025-04-08 19:02:56.000000000 +0000 @@ -34,24 +34,30 @@ static int cnxk_gpio_read_attr(char *attr, char *val) { + int ret, ret2; FILE *fp; - int ret; fp = fopen(attr, "r"); if (!fp) return -errno; ret = fscanf(fp, "%s", val); - if (ret < 0) - return -errno; - if (ret != 1) - return -EIO; + if (ret < 0) { + ret = -errno; + goto out; + } + if (ret != 1) { + ret = -EIO; + goto out; + } - ret = fclose(fp); - if (ret) - return -errno; + ret = 0; +out: + ret2 = fclose(fp); + if (!ret) + ret = ret2; - return 0; + return ret; } #define CNXK_GPIO_ERR_STR(err, str, ...) do { \ diff -Nru dpdk-22.11.7/examples/ipsec-secgw/event_helper.c dpdk-22.11.8/examples/ipsec-secgw/event_helper.c --- dpdk-22.11.7/examples/ipsec-secgw/event_helper.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/examples/ipsec-secgw/event_helper.c 2025-04-08 19:02:56.000000000 +0000 @@ -881,7 +881,7 @@ } /* Add crypto queue pairs to event crypto adapter */ - ret = rte_event_crypto_adapter_queue_pair_add(cdev_id, eventdev_id, + ret = rte_event_crypto_adapter_queue_pair_add(eventdev_id, cdev_id, -1, /* adds all the pre configured queue pairs to the instance */ &queue_conf); if (ret < 0) { diff -Nru dpdk-22.11.7/examples/ipsec-secgw/sa.c dpdk-22.11.8/examples/ipsec-secgw/sa.c --- dpdk-22.11.7/examples/ipsec-secgw/sa.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/examples/ipsec-secgw/sa.c 2025-04-08 19:02:56.000000000 +0000 @@ -103,14 +103,14 @@ { .keyword = "aes-192-ctr", .algo = RTE_CRYPTO_CIPHER_AES_CTR, - .iv_len = 16, + .iv_len = 8, .block_size = 16, .key_len = 28 }, { .keyword = "aes-256-ctr", .algo = RTE_CRYPTO_CIPHER_AES_CTR, - .iv_len = 16, + .iv_len = 8, .block_size = 16, .key_len = 36 }, diff -Nru dpdk-22.11.7/examples/l3fwd/main.c dpdk-22.11.8/examples/l3fwd/main.c --- dpdk-22.11.7/examples/l3fwd/main.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/examples/l3fwd/main.c 2025-04-08 19:02:56.000000000 +0000 @@ -303,8 +303,9 @@ printf("error: lcore %u is not enabled in lcore mask\n", lcore); return -1; } - if ((socketid = rte_lcore_to_socket_id(lcore) != 0) && - (numa_on == 0)) { + + socketid = rte_lcore_to_socket_id(lcore); + if (socketid != 0 && numa_on == 0) { printf("warning: lcore %u is on socket %d with numa off\n", lcore, socketid); } diff -Nru dpdk-22.11.7/examples/l3fwd-power/main.c dpdk-22.11.8/examples/l3fwd-power/main.c --- dpdk-22.11.7/examples/l3fwd-power/main.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/examples/l3fwd-power/main.c 2025-04-08 19:02:56.000000000 +0000 @@ -1537,8 +1537,8 @@ "mask\n", lcore); return -1; } - if ((socketid = rte_lcore_to_socket_id(lcore) != 0) && - (numa_on == 0)) { + socketid = rte_lcore_to_socket_id(lcore); + if (socketid != 0 && numa_on == 0) { printf("warning: lcore %u is on socket %d with numa " "off\n", lcore, socketid); } diff -Nru dpdk-22.11.7/examples/ptpclient/ptpclient.c dpdk-22.11.8/examples/ptpclient/ptpclient.c --- dpdk-22.11.7/examples/ptpclient/ptpclient.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/examples/ptpclient/ptpclient.c 2025-04-08 19:02:56.000000000 +0000 @@ -365,7 +365,7 @@ ptp_data->ptpset = 1; } - if (memcmp(&ptp_hdr->source_port_id.clock_id, + if (memcmp(&ptp_data->master_clock_id, &ptp_hdr->source_port_id.clock_id, sizeof(struct clock_id)) == 0) { diff -Nru dpdk-22.11.7/lib/eal/common/eal_common_devargs.c dpdk-22.11.8/lib/eal/common/eal_common_devargs.c --- dpdk-22.11.7/lib/eal/common/eal_common_devargs.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/eal/common/eal_common_devargs.c 2025-04-08 19:02:56.000000000 +0000 @@ -88,7 +88,7 @@ s = devargs->data; while (s != NULL) { - if (nblayer > RTE_DIM(layers)) { + if (nblayer >= RTE_DIM(layers)) { ret = -E2BIG; goto get_out; } diff -Nru dpdk-22.11.7/lib/eal/common/eal_common_lcore.c dpdk-22.11.8/lib/eal/common/eal_common_lcore.c --- dpdk-22.11.7/lib/eal/common/eal_common_lcore.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/eal/common/eal_common_lcore.c 2025-04-08 19:02:56.000000000 +0000 @@ -140,7 +140,11 @@ unsigned lcore_id; unsigned count = 0; unsigned int socket_id, prev_socket_id; - int lcore_to_socket_id[RTE_MAX_LCORE]; +#if CPU_SETSIZE > RTE_MAX_LCORE + int lcore_to_socket_id[CPU_SETSIZE] = {0}; +#else + int lcore_to_socket_id[RTE_MAX_LCORE] = {0}; +#endif /* * Parse the maximum set of logical cores, detect the subset of running @@ -179,9 +183,11 @@ for (; lcore_id < CPU_SETSIZE; lcore_id++) { if (eal_cpu_detected(lcore_id) == 0) continue; + socket_id = eal_cpu_socket_id(lcore_id); + lcore_to_socket_id[lcore_id] = socket_id; RTE_LOG(DEBUG, EAL, "Skipped lcore %u as core %u on socket %u\n", lcore_id, eal_cpu_core_id(lcore_id), - eal_cpu_socket_id(lcore_id)); + socket_id); } /* Set the count of enabled logical cores of the EAL configuration */ @@ -197,12 +203,13 @@ prev_socket_id = -1; config->numa_node_count = 0; - for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { + for (lcore_id = 0; lcore_id < RTE_DIM(lcore_to_socket_id); lcore_id++) { socket_id = lcore_to_socket_id[lcore_id]; if (socket_id != prev_socket_id) - config->numa_nodes[config->numa_node_count++] = - socket_id; + config->numa_nodes[config->numa_node_count++] = socket_id; prev_socket_id = socket_id; + if (config->numa_node_count >= RTE_MAX_NUMA_NODES) + break; } RTE_LOG(INFO, EAL, "Detected NUMA nodes: %u\n", config->numa_node_count); diff -Nru dpdk-22.11.7/lib/eal/linux/eal_dev.c dpdk-22.11.8/lib/eal/linux/eal_dev.c --- dpdk-22.11.7/lib/eal/linux/eal_dev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/eal/linux/eal_dev.c 2025-04-08 19:02:56.000000000 +0000 @@ -129,7 +129,6 @@ return 0; err: close(fd); - fd = -1; return ret; } @@ -165,8 +164,6 @@ * uevent from udev. */ if (!strncmp(buf, "libudev", 7)) { - buf += 7; - i += 7; return -1; } if (!strncmp(buf, "ACTION=", 7)) { diff -Nru dpdk-22.11.7/lib/eal/linux/eal_memory.c dpdk-22.11.8/lib/eal/linux/eal_memory.c --- dpdk-22.11.7/lib/eal/linux/eal_memory.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/eal/linux/eal_memory.c 2025-04-08 19:02:56.000000000 +0000 @@ -1472,6 +1472,7 @@ mem_sz = msl->len; munmap(msl->base_va, mem_sz); msl->base_va = NULL; + msl->len = 0; msl->heap = 0; /* destroy backing fbarray */ diff -Nru dpdk-22.11.7/lib/eal/x86/include/rte_vect.h dpdk-22.11.8/lib/eal/x86/include/rte_vect.h --- dpdk-22.11.7/lib/eal/x86/include/rte_vect.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/eal/x86/include/rte_vect.h 2025-04-08 19:02:56.000000000 +0000 @@ -21,11 +21,7 @@ (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) #include /* SSE4 */ - -#if defined(__AVX__) #include -#endif - #else #include diff -Nru dpdk-22.11.7/lib/ethdev/rte_ethdev.c dpdk-22.11.8/lib/ethdev/rte_ethdev.c --- dpdk-22.11.7/lib/ethdev/rte_ethdev.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/ethdev/rte_ethdev.c 2025-04-08 19:02:56.000000000 +0000 @@ -534,9 +534,10 @@ { struct rte_eth_dev *ethdev; - RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); - ethdev = &rte_eth_devices[port_id]; + if (port_id >= RTE_MAX_ETHPORTS) + return -ENODEV; + ethdev = &rte_eth_devices[port_id]; if (!eth_dev_is_allocated(ethdev)) { RTE_ETHDEV_LOG(ERR, "Port ID %"PRIu16" is not allocated\n", port_id); @@ -562,8 +563,15 @@ rte_eth_dev_socket_id(uint16_t port_id) { int socket_id = SOCKET_ID_ANY; + struct rte_eth_dev *ethdev; - if (!rte_eth_dev_is_valid_port(port_id)) { + if (port_id >= RTE_MAX_ETHPORTS) { + rte_errno = EINVAL; + return socket_id; + } + + ethdev = &rte_eth_devices[port_id]; + if (!eth_dev_is_allocated(ethdev)) { rte_errno = EINVAL; } else { socket_id = rte_eth_devices[port_id].data->numa_node; diff -Nru dpdk-22.11.7/lib/ethdev/rte_ethdev.h dpdk-22.11.8/lib/ethdev/rte_ethdev.h --- dpdk-22.11.7/lib/ethdev/rte_ethdev.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/ethdev/rte_ethdev.h 2025-04-08 19:02:56.000000000 +0000 @@ -3885,7 +3885,13 @@ RTE_ETH_EVENT_VF_MBOX, /**< message from the VF received by PF */ RTE_ETH_EVENT_MACSEC, /**< MACsec offload related event */ RTE_ETH_EVENT_INTR_RMV, /**< device removal event */ - RTE_ETH_EVENT_NEW, /**< port is probed */ + /** + * The port is being probed, i.e. allocated and not yet available. + * It is too early to check validity, query infos, and configure + * the port. But some functions, like rte_eth_dev_socket_id() and + * rte_eth_dev_owner_*() are available to the application. + */ + RTE_ETH_EVENT_NEW, RTE_ETH_EVENT_DESTROY, /**< port is released */ RTE_ETH_EVENT_IPSEC, /**< IPsec offload related event */ RTE_ETH_EVENT_FLOW_AGED,/**< New aged-out flows is detected */ diff -Nru dpdk-22.11.7/lib/ethdev/rte_flow.h dpdk-22.11.8/lib/ethdev/rte_flow.h --- dpdk-22.11.7/lib/ethdev/rte_flow.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/ethdev/rte_flow.h 2025-04-08 19:02:56.000000000 +0000 @@ -774,8 +774,8 @@ /** Default mask for RTE_FLOW_ITEM_TYPE_ETH. */ #ifndef __cplusplus static const struct rte_flow_item_eth rte_flow_item_eth_mask = { - .hdr.dst_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .hdr.src_addr.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .hdr.dst_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .hdr.src_addr.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, .hdr.ether_type = RTE_BE16(0x0000), }; #endif @@ -877,12 +877,10 @@ #ifndef __cplusplus static const struct rte_flow_item_ipv6 rte_flow_item_ipv6_mask = { .hdr = { - .src_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", - .dst_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .src_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .dst_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }, }; #endif @@ -1041,7 +1039,7 @@ /** Default mask for RTE_FLOW_ITEM_TYPE_NVGRE. */ #ifndef __cplusplus static const struct rte_flow_item_nvgre rte_flow_item_nvgre_mask = { - .tni = "\xff\xff\xff", + .tni = { 0xff, 0xff, 0xff }, }; #endif @@ -1061,7 +1059,7 @@ /** Default mask for RTE_FLOW_ITEM_TYPE_MPLS. */ #ifndef __cplusplus static const struct rte_flow_item_mpls rte_flow_item_mpls_mask = { - .label_tc_s = "\xff\xff\xf0", + .label_tc_s = { 0xff, 0xff, 0xf0 }, }; #endif @@ -1196,7 +1194,7 @@ /** Default mask for RTE_FLOW_ITEM_TYPE_GENEVE. */ #ifndef __cplusplus static const struct rte_flow_item_geneve rte_flow_item_geneve_mask = { - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, }; #endif @@ -1216,7 +1214,7 @@ /** Default mask for RTE_FLOW_ITEM_TYPE_VXLAN_GPE. */ #ifndef __cplusplus static const struct rte_flow_item_vxlan_gpe rte_flow_item_vxlan_gpe_mask = { - .vni = "\xff\xff\xff", + .vni = { 0xff, 0xff, 0xff }, }; #endif @@ -1241,10 +1239,10 @@ #ifndef __cplusplus static const struct rte_flow_item_arp_eth_ipv4 rte_flow_item_arp_eth_ipv4_mask = { - .sha.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .spa = RTE_BE32(0xffffffff), - .tha.addr_bytes = "\xff\xff\xff\xff\xff\xff", - .tpa = RTE_BE32(0xffffffff), + .sha.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .spa = RTE_BE32(UINT32_MAX), + .tha.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, + .tpa = RTE_BE32(UINT32_MAX), }; #endif @@ -1320,9 +1318,8 @@ #ifndef __cplusplus static const struct rte_flow_item_icmp6_nd_ns rte_flow_item_icmp6_nd_ns_mask = { - .target_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .target_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; #endif @@ -1347,9 +1344,8 @@ #ifndef __cplusplus static const struct rte_flow_item_icmp6_nd_na rte_flow_item_icmp6_nd_na_mask = { - .target_addr = - "\xff\xff\xff\xff\xff\xff\xff\xff" - "\xff\xff\xff\xff\xff\xff\xff\xff", + .target_addr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; #endif @@ -1398,7 +1394,7 @@ #ifndef __cplusplus static const struct rte_flow_item_icmp6_nd_opt_sla_eth rte_flow_item_icmp6_nd_opt_sla_eth_mask = { - .sla.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .sla.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; #endif @@ -1423,7 +1419,7 @@ #ifndef __cplusplus static const struct rte_flow_item_icmp6_nd_opt_tla_eth rte_flow_item_icmp6_nd_opt_tla_eth_mask = { - .tla.addr_bytes = "\xff\xff\xff\xff\xff\xff", + .tla.addr_bytes = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, }; #endif diff -Nru dpdk-22.11.7/lib/mempool/rte_mempool.c dpdk-22.11.8/lib/mempool/rte_mempool.c --- dpdk-22.11.7/lib/mempool/rte_mempool.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/mempool/rte_mempool.c 2025-04-08 19:02:56.000000000 +0000 @@ -928,8 +928,10 @@ else ret = rte_mempool_set_ops_byname(mp, "ring_mp_mc", NULL); - if (ret) + if (ret) { + rte_errno = -ret; goto exit_unlock; + } /* * local_cache pointer is set even if cache_size is zero. diff -Nru dpdk-22.11.7/lib/pdump/rte_pdump.c dpdk-22.11.8/lib/pdump/rte_pdump.c --- dpdk-22.11.7/lib/pdump/rte_pdump.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/pdump/rte_pdump.c 2025-04-08 19:02:56.000000000 +0000 @@ -202,6 +202,8 @@ rte_errno); return rte_errno; } + + memset(&pdump_stats->rx[port][qid], 0, sizeof(struct rte_pdump_stats)); } else if (operation == DISABLE) { int ret; @@ -260,6 +262,7 @@ rte_errno); return rte_errno; } + memset(&pdump_stats->tx[port][qid], 0, sizeof(struct rte_pdump_stats)); } else if (operation == DISABLE) { int ret; diff -Nru dpdk-22.11.7/lib/stack/rte_stack_lf_c11.h dpdk-22.11.8/lib/stack/rte_stack_lf_c11.h --- dpdk-22.11.7/lib/stack/rte_stack_lf_c11.h 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/stack/rte_stack_lf_c11.h 2025-04-08 19:02:56.000000000 +0000 @@ -77,7 +77,7 @@ { struct rte_stack_lf_head old_head; uint64_t len; - int success; + int success = 0; /* Reserve num elements, if available */ len = __atomic_load_n(&list->len, __ATOMIC_RELAXED); diff -Nru dpdk-22.11.7/lib/vhost/vhost.c dpdk-22.11.8/lib/vhost/vhost.c --- dpdk-22.11.7/lib/vhost/vhost.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/vhost/vhost.c 2025-04-08 19:02:56.000000000 +0000 @@ -716,10 +716,11 @@ if (dev->flags & VIRTIO_DEV_RUNNING) { vdpa_dev = dev->vdpa_dev; - if (vdpa_dev) + if (vdpa_dev && vdpa_dev->ops->dev_close) vdpa_dev->ops->dev_close(dev->vid); dev->flags &= ~VIRTIO_DEV_RUNNING; - dev->notify_ops->destroy_device(dev->vid); + if (dev->notify_ops->destroy_device) + dev->notify_ops->destroy_device(dev->vid); } } diff -Nru dpdk-22.11.7/lib/vhost/vhost_user.c dpdk-22.11.8/lib/vhost/vhost_user.c --- dpdk-22.11.7/lib/vhost/vhost_user.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/vhost/vhost_user.c 2025-04-08 19:02:56.000000000 +0000 @@ -2147,6 +2147,7 @@ rte_spinlock_lock(&vq->access_lock); vring_invalidate(dev, vq); + memset(&vq->ring_addrs, 0, sizeof(struct vhost_vring_addr)); rte_spinlock_unlock(&vq->access_lock); return RTE_VHOST_MSG_RESULT_REPLY; @@ -3189,7 +3190,8 @@ */ if (!(dev->flags & VIRTIO_DEV_RUNNING)) { - if (dev->notify_ops->new_device(dev->vid) == 0) + if (!dev->notify_ops->new_device || + dev->notify_ops->new_device(dev->vid) == 0) dev->flags |= VIRTIO_DEV_RUNNING; } diff -Nru dpdk-22.11.7/lib/vhost/virtio_net.c dpdk-22.11.8/lib/vhost/virtio_net.c --- dpdk-22.11.7/lib/vhost/virtio_net.c 2024-12-13 14:35:22.000000000 +0000 +++ dpdk-22.11.8/lib/vhost/virtio_net.c 2025-04-08 19:02:56.000000000 +0000 @@ -2503,6 +2503,9 @@ } if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { + if (hdr->gso_size == 0) + goto error; + switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { case VIRTIO_NET_HDR_GSO_TCPV4: case VIRTIO_NET_HDR_GSO_TCPV6: @@ -3583,6 +3586,16 @@ VHOST_ACCESS_RO) < 0)) return -1; + if (unlikely(buf_len <= dev->vhost_hlen)) { + if (!allocerr_warned) { + VHOST_LOG_DATA(dev->ifname, ERR, "Invalid buffer length.\n"); + allocerr_warned = true; + } + return -1; + } + + buf_len -= dev->vhost_hlen; + if (unlikely(virtio_dev_pktmbuf_prep(dev, pkts, buf_len))) { if (!allocerr_warned) { VHOST_LOG_DATA(dev->ifname, ERR, "Failed mbuf alloc of size %d from %s.\n",