diff --git a/0420-app-testpmd-fix-RSS-algorithm-choice.patch b/0420-app-testpmd-fix-RSS-algorithm-choice.patch new file mode 100644 index 0000000000000000000000000000000000000000..fab082d64436424d1dce945a8569c648d7b2be54 --- /dev/null +++ b/0420-app-testpmd-fix-RSS-algorithm-choice.patch @@ -0,0 +1,36 @@ +From 280a37ad83ef1af5f4f0cf7c486dbb5f87562ca2 Mon Sep 17 00:00:00 2001 +From: Jie Hai +Date: Fri, 15 Mar 2024 11:00:53 +0800 +Subject: [PATCH 419/431] app/testpmd: fix RSS algorithm choice + +[ upstream commit 74345424a92f14acc608b36b09cb27b84e3a35aa ] + +The RSS algorithm from user is parsed but not passed to the +rte_eth_dev_rss_hash_update() API as we wanted, this patch +fixes it. + +Fixes: 3da59f30a23f ("app/testpmd: set RSS hash algorithm") +Cc: stable@dpdk.org + +Signed-off-by: Jie Hai +Reviewed-by: Ferruh Yigit +Signed-off-by: chenyi +--- + app/test-pmd/cmdline.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c +index ae0b47de72..5e77cb2e79 100644 +--- a/app/test-pmd/cmdline.c ++++ b/app/test-pmd/cmdline.c +@@ -2449,6 +2449,7 @@ cmd_config_rss_hash_algo_parsed(void *parsed_result, + return; + } + ++ rss_conf.algorithm = algorithm; + ret = rte_eth_dev_rss_hash_update(res->port_id, &rss_conf); + if (ret != 0) { + fprintf(stderr, "failed to set port %u RSS hash algorithm\n", +-- +2.33.0 + diff --git a/0421-net-hns3-disable-SCTP-verification-tag-for-RSS-hash-.patch b/0421-net-hns3-disable-SCTP-verification-tag-for-RSS-hash-.patch new file mode 100644 index 0000000000000000000000000000000000000000..786115d4fb249ec95ad8180923a9e3099ce4fa33 --- /dev/null +++ b/0421-net-hns3-disable-SCTP-verification-tag-for-RSS-hash-.patch @@ -0,0 +1,94 @@ +From 50d329b06bc5bb936b25970dae87549f0a90c21f Mon Sep 17 00:00:00 2001 +From: Jie Hai +Date: Wed, 3 Apr 2024 18:16:23 +0800 +Subject: [PATCH 420/431] net/hns3: disable SCTP verification tag for RSS hash + input + +[ upstream commit 47d5fa9a91989c4671ecb8c3a7e767572846570c ] + +When the symmetric RSS algorithm is used, the same packet is +expected to be hashed to the same queue in the upstream and +downstream directions. + +The problem is that it could map the packets in the same SCTP +connection to different NIC RX queues depending on the direction +of packets. This is because the verification Tag is used as the +RSS hash input for the SCTP packets, and the value depends on the +peer end of the SCTP connection and could not be symmetrically +used in the hardware-implemented RSS algorithm. + +In addition, the ethdev framework doesn't support setting SCTP +V-tag as the RSS hash input. So disable it for all RSS hash +algorithms. + +Cc: stable@dpdk.org + +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_rss.c | 6 ++---- + drivers/net/hns3/hns3_rss.h | 6 ++---- + 2 files changed, 4 insertions(+), 8 deletions(-) + +diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c +index 15feb26043..3eae4caf52 100644 +--- a/drivers/net/hns3/hns3_rss.c ++++ b/drivers/net/hns3/hns3_rss.c +@@ -153,8 +153,7 @@ static const struct { + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S) | +- BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D) | +- BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_VER), ++ BIT_ULL(HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_D), + HNS3_RSS_TUPLE_IPV4_SCTP_M }, + + /* IPV6-FRAG */ +@@ -274,8 +273,7 @@ static const struct { + BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D) | + BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_D) | +- BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S) | +- BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_VER), ++ BIT_ULL(HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S), + HNS3_RSS_TUPLE_IPV6_SCTP_M }, + }; + +diff --git a/drivers/net/hns3/hns3_rss.h b/drivers/net/hns3/hns3_rss.h +index 9d182a8025..0755760b45 100644 +--- a/drivers/net/hns3/hns3_rss.h ++++ b/drivers/net/hns3/hns3_rss.h +@@ -49,7 +49,6 @@ enum hns3_tuple_field { + HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_S, + HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_D, + HNS3_RSS_FIELD_IPV4_SCTP_EN_IP_S, +- HNS3_RSS_FIELD_IPV4_SCTP_EN_SCTP_VER, + + /* IPV4 ENABLE FIELD */ + HNS3_RSS_FIELD_IPV4_EN_NONFRAG_IP_D = 24, +@@ -74,7 +73,6 @@ enum hns3_tuple_field { + HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_S, + HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_D, + HNS3_RSS_FIELD_IPV6_SCTP_EN_IP_S, +- HNS3_RSS_FIELD_IPV6_SCTP_EN_SCTP_VER, + + /* IPV6 ENABLE FIELD */ + HNS3_RSS_FIELD_IPV6_NONFRAG_IP_D = 56, +@@ -96,12 +94,12 @@ enum hns3_tuple_field { + + #define HNS3_RSS_TUPLE_IPV4_TCP_M GENMASK(3, 0) + #define HNS3_RSS_TUPLE_IPV4_UDP_M GENMASK(11, 8) +-#define HNS3_RSS_TUPLE_IPV4_SCTP_M GENMASK(20, 16) ++#define HNS3_RSS_TUPLE_IPV4_SCTP_M GENMASK(19, 16) + #define HNS3_RSS_TUPLE_IPV4_NONF_M GENMASK(25, 24) + #define HNS3_RSS_TUPLE_IPV4_FLAG_M GENMASK(27, 26) + #define HNS3_RSS_TUPLE_IPV6_TCP_M GENMASK(35, 32) + #define HNS3_RSS_TUPLE_IPV6_UDP_M GENMASK(43, 40) +-#define HNS3_RSS_TUPLE_IPV6_SCTP_M GENMASK(52, 48) ++#define HNS3_RSS_TUPLE_IPV6_SCTP_M GENMASK(51, 48) + #define HNS3_RSS_TUPLE_IPV6_NONF_M GENMASK(57, 56) + #define HNS3_RSS_TUPLE_IPV6_FLAG_M GENMASK(59, 58) + +-- +2.33.0 + diff --git a/0422-net-hns3-support-power-monitor.patch b/0422-net-hns3-support-power-monitor.patch new file mode 100644 index 0000000000000000000000000000000000000000..194433e918d0e0e592fdc373dbd2792789ea7d78 --- /dev/null +++ b/0422-net-hns3-support-power-monitor.patch @@ -0,0 +1,91 @@ +From 97dd5755f1c76addc90c3c6ba7bb7a9c329cfd25 Mon Sep 17 00:00:00 2001 +From: Chengwen Feng +Date: Mon, 5 Feb 2024 16:35:21 +0800 +Subject: [PATCH 421/431] net/hns3: support power monitor + +[ upstream commit 9e1e7dded323ce424aebf992f6ddfa9656655631 ] + +This commit supports power monitor on the Rx queue descriptor of the +next poll. + +Note: Although rte_power_monitor() on the ARM platform does not support +callback, this commit still implements the callback so that it does not +need to be adjusted after the ARM platform supports callback. + +Signed-off-by: Chengwen Feng +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_ethdev.c | 1 + + drivers/net/hns3/hns3_ethdev_vf.c | 1 + + drivers/net/hns3/hns3_rxtx.c | 21 +++++++++++++++++++++ + drivers/net/hns3/hns3_rxtx.h | 1 + + 4 files changed, 24 insertions(+) + +diff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c +index c7a2147f39..0e1ca1b314 100644 +--- a/drivers/net/hns3/hns3_ethdev.c ++++ b/drivers/net/hns3/hns3_ethdev.c +@@ -6501,6 +6501,7 @@ static const struct eth_dev_ops hns3_eth_dev_ops = { + .eth_dev_priv_dump = hns3_eth_dev_priv_dump, + .eth_rx_descriptor_dump = hns3_rx_descriptor_dump, + .eth_tx_descriptor_dump = hns3_tx_descriptor_dump, ++ .get_monitor_addr = hns3_get_monitor_addr, + }; + + static const struct hns3_reset_ops hns3_reset_ops = { +diff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c +index 0b4ad5a0f7..a6f0d77104 100644 +--- a/drivers/net/hns3/hns3_ethdev_vf.c ++++ b/drivers/net/hns3/hns3_ethdev_vf.c +@@ -2290,6 +2290,7 @@ static const struct eth_dev_ops hns3vf_eth_dev_ops = { + .eth_dev_priv_dump = hns3_eth_dev_priv_dump, + .eth_rx_descriptor_dump = hns3_rx_descriptor_dump, + .eth_tx_descriptor_dump = hns3_tx_descriptor_dump, ++ .get_monitor_addr = hns3_get_monitor_addr, + }; + + static const struct hns3_reset_ops hns3vf_reset_ops = { +diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c +index 81edd5258d..49f7177578 100644 +--- a/drivers/net/hns3/hns3_rxtx.c ++++ b/drivers/net/hns3/hns3_rxtx.c +@@ -4883,3 +4883,24 @@ hns3_start_rxtx_datapath(struct rte_eth_dev *dev) + + hns3_mp_req_start_rxtx(dev); + } ++ ++static int ++hns3_monitor_callback(const uint64_t value, ++ const uint64_t arg[RTE_POWER_MONITOR_OPAQUE_SZ] __rte_unused) ++{ ++ const uint64_t vld = rte_le_to_cpu_32(BIT(HNS3_RXD_VLD_B)); ++ return (value & vld) == vld ? -1 : 0; ++} ++ ++int ++hns3_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc) ++{ ++ struct hns3_rx_queue *rxq = rx_queue; ++ struct hns3_desc *rxdp = &rxq->rx_ring[rxq->next_to_use]; ++ ++ pmc->addr = &rxdp->rx.bd_base_info; ++ pmc->fn = hns3_monitor_callback; ++ pmc->size = sizeof(uint32_t); ++ ++ return 0; ++} +diff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h +index b6a6513307..18dcc75805 100644 +--- a/drivers/net/hns3/hns3_rxtx.h ++++ b/drivers/net/hns3/hns3_rxtx.h +@@ -814,5 +814,6 @@ void hns3_stop_tx_datapath(struct rte_eth_dev *dev); + void hns3_start_tx_datapath(struct rte_eth_dev *dev); + void hns3_stop_rxtx_datapath(struct rte_eth_dev *dev); + void hns3_start_rxtx_datapath(struct rte_eth_dev *dev); ++int hns3_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc); + + #endif /* HNS3_RXTX_H */ +-- +2.33.0 + diff --git a/0423-ring-add-telemetry-command-to-list-rings.patch b/0423-ring-add-telemetry-command-to-list-rings.patch new file mode 100644 index 0000000000000000000000000000000000000000..8aa1ec9994c0c8230ece1dfd94214abed91cacf3 --- /dev/null +++ b/0423-ring-add-telemetry-command-to-list-rings.patch @@ -0,0 +1,100 @@ +From 29169ffded36ddc6a0f6d127a70e256a7bd5479f Mon Sep 17 00:00:00 2001 +From: Jie Hai +Date: Mon, 19 Feb 2024 16:32:52 +0800 +Subject: [PATCH 422/431] ring: add telemetry command to list rings +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ upstream commit 36e5c1b91607cc41e73e1108bdc5843c68e3ebc6 ] + +Add a telemetry command to list the rings used in the system. +An example using this command is shown below: + +--> /ring/list +{ + "/ring/list": [ + "HT_0000:7d:00.2", + "MP_mb_pool_0" + ] +} + +Signed-off-by: Jie Hai +Acked-by: Konstantin Ananyev +Reviewed-by: Honnappa Nagarahalli +Acked-by: Huisong Li +Acked-by: Chengwen Feng +Acked-by: Morten Brørup +Signed-off-by: chenyi +--- + lib/ring/meson.build | 1 + + lib/ring/rte_ring.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 41 insertions(+) + +diff --git a/lib/ring/meson.build b/lib/ring/meson.build +index c20685c689..7fca958ed7 100644 +--- a/lib/ring/meson.build ++++ b/lib/ring/meson.build +@@ -18,3 +18,4 @@ indirect_headers += files ( + 'rte_ring_rts.h', + 'rte_ring_rts_elem_pvt.h', + ) ++deps += ['telemetry'] +diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c +index f17bd966be..c6e5a738c3 100644 +--- a/lib/ring/rte_ring.c ++++ b/lib/ring/rte_ring.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + #include "rte_ring.h" + #include "rte_ring_elem.h" +@@ -428,3 +429,42 @@ rte_ring_lookup(const char *name) + + return r; + } ++ ++static void ++ring_walk(void (*func)(struct rte_ring *, void *), void *arg) ++{ ++ struct rte_ring_list *ring_list; ++ struct rte_tailq_entry *tailq_entry; ++ ++ ring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list); ++ rte_mcfg_tailq_read_lock(); ++ ++ TAILQ_FOREACH(tailq_entry, ring_list, next) { ++ (*func)((struct rte_ring *) tailq_entry->data, arg); ++ } ++ ++ rte_mcfg_tailq_read_unlock(); ++} ++ ++static void ++ring_list_cb(struct rte_ring *r, void *arg) ++{ ++ struct rte_tel_data *d = (struct rte_tel_data *)arg; ++ ++ rte_tel_data_add_array_string(d, r->name); ++} ++ ++static int ++ring_handle_list(const char *cmd __rte_unused, ++ const char *params __rte_unused, struct rte_tel_data *d) ++{ ++ rte_tel_data_start_array(d, RTE_TEL_STRING_VAL); ++ ring_walk(ring_list_cb, d); ++ return 0; ++} ++ ++RTE_INIT(ring_init_telemetry) ++{ ++ rte_telemetry_register_cmd("/ring/list", ring_handle_list, ++ "Returns list of available rings. Takes no parameters"); ++} +-- +2.33.0 + diff --git a/0424-ring-add-telemetry-command-for-ring-info.patch b/0424-ring-add-telemetry-command-for-ring-info.patch new file mode 100644 index 0000000000000000000000000000000000000000..1c3ad6b16d9a3b0c8a3b148c8eae1b837ff46ae8 --- /dev/null +++ b/0424-ring-add-telemetry-command-for-ring-info.patch @@ -0,0 +1,155 @@ +From 5ebb87f1d880410aec6131e7b21ed0c1d9eae225 Mon Sep 17 00:00:00 2001 +From: Jie Hai +Date: Mon, 19 Feb 2024 16:32:53 +0800 +Subject: [PATCH 1/9] ring: add telemetry command for ring info +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +[ upstream commit 2e99bd65ca788f7f540b2c155208dae2b0128b36 ] + +This patch supports dump of ring information by its name. +An example using this command is shown below: + +--> /ring/info,MP_mb_pool_0 +{ + "/ring/info": { + "name": "MP_mb_pool_0", + "socket": 0, + "flags": 0, + "producer_type": "MP", + "consumer_type": "MC", + "size": 262144, + "mask": "0x3ffff", + "capacity": 262143, + "used_count": 153197, + "mz_name": "RG_MP_mb_pool_0", + "mz_len": 2097536, + "mz_hugepage_sz": 1073741824, + "mz_socket_id": 0, + "mz_flags": "0x0" + } +} + +Signed-off-by: Jie Hai +Reviewed-by: Honnappa Nagarahalli +Acked-by: Konstantin Ananyev +Acked-by: Huisong Li +Acked-by: Chengwen Feng +Acked-by: Morten Brørup +Signed-off-by: chenyi +--- + lib/ring/rte_ring.c | 95 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 95 insertions(+) + +diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c +index c6e5a738c3..72ef981c22 100644 +--- a/lib/ring/rte_ring.c ++++ b/lib/ring/rte_ring.c +@@ -463,8 +463,103 @@ ring_handle_list(const char *cmd __rte_unused, + return 0; + } + ++static const char * ++ring_prod_sync_type_to_name(struct rte_ring *r) ++{ ++ switch (r->prod.sync_type) { ++ case RTE_RING_SYNC_MT: ++ return "MP"; ++ case RTE_RING_SYNC_ST: ++ return "SP"; ++ case RTE_RING_SYNC_MT_RTS: ++ return "MP_RTS"; ++ case RTE_RING_SYNC_MT_HTS: ++ return "MP_HTS"; ++ default: ++ return "Unknown"; ++ } ++} ++ ++static const char * ++ring_cons_sync_type_to_name(struct rte_ring *r) ++{ ++ switch (r->cons.sync_type) { ++ case RTE_RING_SYNC_MT: ++ return "MC"; ++ case RTE_RING_SYNC_ST: ++ return "SC"; ++ case RTE_RING_SYNC_MT_RTS: ++ return "MC_RTS"; ++ case RTE_RING_SYNC_MT_HTS: ++ return "MC_HTS"; ++ default: ++ return "Unknown"; ++ } ++} ++ ++struct ring_info_cb_arg { ++ char *ring_name; ++ struct rte_tel_data *d; ++}; ++ ++static void ++ring_info_cb(struct rte_ring *r, void *arg) ++{ ++ struct ring_info_cb_arg *ring_arg = (struct ring_info_cb_arg *)arg; ++ struct rte_tel_data *d = ring_arg->d; ++ const struct rte_memzone *mz; ++ ++ if (strncmp(r->name, ring_arg->ring_name, RTE_RING_NAMESIZE)) ++ return; ++ ++ rte_tel_data_add_dict_string(d, "name", r->name); ++ rte_tel_data_add_dict_int(d, "socket", r->memzone->socket_id); ++ rte_tel_data_add_dict_int(d, "flags", r->flags); ++ rte_tel_data_add_dict_string(d, "producer_type", ++ ring_prod_sync_type_to_name(r)); ++ rte_tel_data_add_dict_string(d, "consumer_type", ++ ring_cons_sync_type_to_name(r)); ++ rte_tel_data_add_dict_int(d, "size", r->size); ++ rte_tel_data_add_dict_uint_hex(d, "mask", r->mask, 0); ++ rte_tel_data_add_dict_int(d, "capacity", r->capacity); ++ rte_tel_data_add_dict_int(d, "used_count", rte_ring_count(r)); ++ ++ mz = r->memzone; ++ if (mz == NULL) ++ return; ++ rte_tel_data_add_dict_string(d, "mz_name", mz->name); ++ rte_tel_data_add_dict_int(d, "mz_len", mz->len); ++ rte_tel_data_add_dict_int(d, "mz_hugepage_sz", mz->hugepage_sz); ++ rte_tel_data_add_dict_int(d, "mz_socket_id", mz->socket_id); ++ rte_tel_data_add_dict_uint_hex(d, "mz_flags", mz->flags, 0); ++} ++ ++static int ++ring_handle_info(const char *cmd __rte_unused, const char *params, ++ struct rte_tel_data *d) ++{ ++ char name[RTE_RING_NAMESIZE] = {0}; ++ struct ring_info_cb_arg ring_arg; ++ ++ if (params == NULL || strlen(params) == 0 || ++ strlen(params) >= RTE_RING_NAMESIZE) ++ return -EINVAL; ++ ++ rte_strlcpy(name, params, RTE_RING_NAMESIZE); ++ ++ ring_arg.ring_name = name; ++ ring_arg.d = d; ++ ++ rte_tel_data_start_dict(d); ++ ring_walk(ring_info_cb, &ring_arg); ++ ++ return 0; ++} ++ + RTE_INIT(ring_init_telemetry) + { + rte_telemetry_register_cmd("/ring/list", ring_handle_list, + "Returns list of available rings. Takes no parameters"); ++ rte_telemetry_register_cmd("/ring/info", ring_handle_info, ++ "Returns ring info. Parameters: ring_name."); + } +-- +2.33.0 + diff --git a/0425-net-hns3-enable-PFC-for-all-user-priorities.patch b/0425-net-hns3-enable-PFC-for-all-user-priorities.patch new file mode 100644 index 0000000000000000000000000000000000000000..6d75cbd0a9aeaebc03941ef2a54bca62bac37c01 --- /dev/null +++ b/0425-net-hns3-enable-PFC-for-all-user-priorities.patch @@ -0,0 +1,55 @@ +From e6ecd7b0cb7c8f7461ebdfcb394d7ae80392a072 Mon Sep 17 00:00:00 2001 +From: Jie Hai +Date: Wed, 6 Mar 2024 17:20:47 +0800 +Subject: [PATCH 424/431] net/hns3: enable PFC for all user priorities + +[ upstream commit aae6989df36c105b917cf69975c075dfde2e6b84 ] + +When user set TC number to 4 and enable PFC and ETS by dev_configure, +driver only enable user priority 0-3. +The packet with user priority 4-7 cannot trigger PFC frame. + +Fix by enabling PFC for all user priorities. + +By the way, the nb_tcs from user can never be 0 because of the ahead +check in driver. So remove this redundant code. + +Fixes: 62e3ccc2b94c ("net/hns3: support flow control") +Cc: stable@dpdk.org + +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_dcb.c | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) + +diff --git a/drivers/net/hns3/hns3_dcb.c b/drivers/net/hns3/hns3_dcb.c +index 2831d3dc62..915e4eb768 100644 +--- a/drivers/net/hns3/hns3_dcb.c ++++ b/drivers/net/hns3/hns3_dcb.c +@@ -1499,7 +1499,6 @@ hns3_dcb_info_update(struct hns3_adapter *hns, uint8_t num_tc) + static int + hns3_dcb_hw_configure(struct hns3_adapter *hns) + { +- struct rte_eth_dcb_rx_conf *dcb_rx_conf; + struct hns3_pf *pf = &hns->pf; + struct hns3_hw *hw = &hns->hw; + enum hns3_fc_status fc_status = hw->current_fc_status; +@@ -1519,12 +1518,8 @@ hns3_dcb_hw_configure(struct hns3_adapter *hns) + } + + if (hw->data->dev_conf.dcb_capability_en & RTE_ETH_DCB_PFC_SUPPORT) { +- dcb_rx_conf = &hw->data->dev_conf.rx_adv_conf.dcb_rx_conf; +- if (dcb_rx_conf->nb_tcs == 0) +- hw->dcb_info.pfc_en = 1; /* tc0 only */ +- else +- hw->dcb_info.pfc_en = +- RTE_LEN2MASK((uint8_t)dcb_rx_conf->nb_tcs, uint8_t); ++ hw->dcb_info.pfc_en = ++ RTE_LEN2MASK((uint8_t)HNS3_MAX_USER_PRIO, uint8_t); + + hw->dcb_info.hw_pfc_map = + hns3_dcb_undrop_tc_map(hw, hw->dcb_info.pfc_en); +-- +2.33.0 + diff --git a/0426-net-hns3-fix-variable-overflow.patch b/0426-net-hns3-fix-variable-overflow.patch new file mode 100644 index 0000000000000000000000000000000000000000..a2adb50eeaa5082fe1f3f6e5427a8595fc522ecd --- /dev/null +++ b/0426-net-hns3-fix-variable-overflow.patch @@ -0,0 +1,36 @@ +From 88fe688b023c5f652be22519302b305dc586c5bd Mon Sep 17 00:00:00 2001 +From: Dengdui Huang +Date: Wed, 3 Apr 2024 18:16:22 +0800 +Subject: [PATCH 425/431] net/hns3: fix variable overflow + +[ upstream commit 861bfb275cb4aea37253c3171f922a0131afb1a3 ] + +The function strtoul() returns an unsigned long, which should +be received using the variable uint64_t. + +Fixes: 2fc3e696a7f1 ("net/hns3: add runtime config for mailbox limit time") +Cc: stable@dpdk.org + +Signed-off-by: Dengdui Huang +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_common.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c +index 717649f259..d880dc9c54 100644 +--- a/drivers/net/hns3/hns3_common.c ++++ b/drivers/net/hns3/hns3_common.c +@@ -222,7 +222,7 @@ hns3_parse_dev_caps_mask(const char *key, const char *value, void *extra_args) + static int + hns3_parse_mbx_time_limit(const char *key, const char *value, void *extra_args) + { +- uint32_t val; ++ uint64_t val; + + RTE_SET_USED(key); + +-- +2.33.0 + diff --git a/0427-net-hns3-fix-double-free-for-Rx-Tx-queue.patch b/0427-net-hns3-fix-double-free-for-Rx-Tx-queue.patch new file mode 100644 index 0000000000000000000000000000000000000000..739d09f9e54df16f2bb907a0bc0b185d07f1db61 --- /dev/null +++ b/0427-net-hns3-fix-double-free-for-Rx-Tx-queue.patch @@ -0,0 +1,68 @@ +From c73d2a88d8731412cfa5c4e9f10facbeb74e5a04 Mon Sep 17 00:00:00 2001 +From: Dengdui Huang +Date: Wed, 3 Apr 2024 18:16:21 +0800 +Subject: [PATCH 426/431] net/hns3: fix double free for Rx/Tx queue + +[ upstream commit 833a5beab5bfc16708ee9b53c83e2f221cd99f90 ] + +The Pointers to some resources on the Rx/Tx queue need to be set to NULL +after free inside the hns3_rx/tx_queue_release(), as this function is +called from multiple threads (reset thread, device config thread, etc), +leading to double memory free error. + +Fixes: bba636698316 ("net/hns3: support Rx/Tx and related operations") +Cc: stable@dpdk.org + +Signed-off-by: Dengdui Huang +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_rxtx.c | 23 ++++++++++++++++++----- + 1 file changed, 18 insertions(+), 5 deletions(-) + +diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c +index 49f7177578..0b8c59f4f9 100644 +--- a/drivers/net/hns3/hns3_rxtx.c ++++ b/drivers/net/hns3/hns3_rxtx.c +@@ -86,9 +86,14 @@ hns3_rx_queue_release(void *queue) + struct hns3_rx_queue *rxq = queue; + if (rxq) { + hns3_rx_queue_release_mbufs(rxq); +- if (rxq->mz) ++ if (rxq->mz) { + rte_memzone_free(rxq->mz); +- rte_free(rxq->sw_ring); ++ rxq->mz = NULL; ++ } ++ if (rxq->sw_ring) { ++ rte_free(rxq->sw_ring); ++ rxq->sw_ring = NULL; ++ } + rte_free(rxq); + } + } +@@ -99,10 +104,18 @@ hns3_tx_queue_release(void *queue) + struct hns3_tx_queue *txq = queue; + if (txq) { + hns3_tx_queue_release_mbufs(txq); +- if (txq->mz) ++ if (txq->mz) { + rte_memzone_free(txq->mz); +- rte_free(txq->sw_ring); +- rte_free(txq->free); ++ txq->mz = NULL; ++ } ++ if (txq->sw_ring) { ++ rte_free(txq->sw_ring); ++ txq->sw_ring = NULL; ++ } ++ if (txq->free) { ++ rte_free(txq->free); ++ txq->free = NULL; ++ } + rte_free(txq); + } + } +-- +2.33.0 + diff --git a/0428-net-hns3-fix-read-Rx-timestamp-handle.patch b/0428-net-hns3-fix-read-Rx-timestamp-handle.patch new file mode 100644 index 0000000000000000000000000000000000000000..cf69441e94987b32868cdc651c3d787540ee52d6 --- /dev/null +++ b/0428-net-hns3-fix-read-Rx-timestamp-handle.patch @@ -0,0 +1,37 @@ +From da365adce5e00a7dd7791e6ae7ed702de20af30c Mon Sep 17 00:00:00 2001 +From: Dengdui Huang +Date: Wed, 3 Apr 2024 18:16:20 +0800 +Subject: [PATCH 427/431] net/hns3: fix read Rx timestamp handle + +[ upstream commit 0a96792880b7eb410f3c4ae4843d82df7005a627 ] + +The flag RTE_MBUF_F_RX_IEEE1588_PTP depends on the packet +type and does not need to be set when reading Rx timestamp. + +Fixes: 38b539d96eb6 ("net/hns3: support IEEE 1588 PTP") +Cc: stable@dpdk.org + +Signed-off-by: Dengdui Huang +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_rxtx.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c +index 0b8c59f4f9..2de31ab9a3 100644 +--- a/drivers/net/hns3/hns3_rxtx.c ++++ b/drivers/net/hns3/hns3_rxtx.c +@@ -2401,8 +2401,7 @@ hns3_rx_ptp_timestamp_handle(struct hns3_rx_queue *rxq, struct rte_mbuf *mbuf, + { + struct hns3_pf *pf = HNS3_DEV_PRIVATE_TO_PF(rxq->hns); + +- mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_PTP | +- RTE_MBUF_F_RX_IEEE1588_TMST; ++ mbuf->ol_flags |= RTE_MBUF_F_RX_IEEE1588_TMST; + if (hns3_timestamp_rx_dynflag > 0) { + *RTE_MBUF_DYNFIELD(mbuf, hns3_timestamp_dynfield_offset, + rte_mbuf_timestamp_t *) = timestamp; +-- +2.33.0 + diff --git a/0429-net-hns3-fix-offload-flag-of-IEEE-1588.patch b/0429-net-hns3-fix-offload-flag-of-IEEE-1588.patch new file mode 100644 index 0000000000000000000000000000000000000000..70dadbcd987091835e4d2f4e5fe8083f131428cd --- /dev/null +++ b/0429-net-hns3-fix-offload-flag-of-IEEE-1588.patch @@ -0,0 +1,45 @@ +From 3d7475b7bbb96565726a4e0f387fd35974682022 Mon Sep 17 00:00:00 2001 +From: Dengdui Huang +Date: Wed, 3 Apr 2024 18:16:19 +0800 +Subject: [PATCH 428/431] net/hns3: fix offload flag of IEEE 1588 + +[ upstream commit 5fde4c41f26d2ad607935b76b528e1b64727b5c7 ] + +Currently, the RTE_MBUF_F_RX_IEEE1588_TMST offload flag will +not be set when the scatter algorithm is used. +This patch fixes it. + +Fixes: 4801f0403b58 ("net/hns3: fix IEEE 1588 PTP for scalar scattered Rx") +Cc: stable@dpdk.org + +Signed-off-by: Dengdui Huang +Signed-off-by: Jie Hai +Signed-off-by: chenyi +--- + drivers/net/hns3/hns3_rxtx.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c +index 2de31ab9a3..5cf2b3af33 100644 +--- a/drivers/net/hns3/hns3_rxtx.c ++++ b/drivers/net/hns3/hns3_rxtx.c +@@ -2680,6 +2680,7 @@ hns3_recv_scattered_pkts(void *rx_queue, + continue; + } + ++ first_seg->ol_flags = 0; + if (unlikely(bd_base_info & BIT(HNS3_RXD_TS_VLD_B))) + hns3_rx_ptp_timestamp_handle(rxq, first_seg, timestamp); + +@@ -2709,7 +2710,7 @@ hns3_recv_scattered_pkts(void *rx_queue, + + first_seg->port = rxq->port_id; + first_seg->hash.rss = rte_le_to_cpu_32(rxd.rx.rss_hash); +- first_seg->ol_flags = RTE_MBUF_F_RX_RSS_HASH; ++ first_seg->ol_flags |= RTE_MBUF_F_RX_RSS_HASH; + if (unlikely(bd_base_info & BIT(HNS3_RXD_LUM_B))) { + first_seg->hash.fdir.hi = + rte_le_to_cpu_16(rxd.rx.fd_id); +-- +2.33.0 + diff --git a/0430-app-testpmd-fix-crash-in-multi-process-forwarding.patch b/0430-app-testpmd-fix-crash-in-multi-process-forwarding.patch new file mode 100644 index 0000000000000000000000000000000000000000..c8c9b551883bc4a1aecf127f8a5fc125d07bff5e --- /dev/null +++ b/0430-app-testpmd-fix-crash-in-multi-process-forwarding.patch @@ -0,0 +1,85 @@ +From 6568baa18852528dafc7559b43fad1dc9f0ff717 Mon Sep 17 00:00:00 2001 +From: Dengdui Huang +Date: Tue, 30 Jan 2024 09:32:49 +0800 +Subject: [PATCH 429/431] app/testpmd: fix crash in multi-process forwarding + +[ upstream commit b3a33138f317d1c651cd86f423cc703176eb7b07 ] + +On multi-process scenario, each process creates flows based on the +number of queues. When nbcore is greater than 1, multiple cores may +use the same queue to forward packet, like: +dpdk-testpmd -a BDF --proc-type=auto -- -i --rxq=4 --txq=4 +--nb-cores=2 --num-procs=2 --proc-id=0 +testpmd> start +mac packet forwarding - ports=1 - cores=2 - streams=4 - NUMA support +enabled, MP allocation mode: native +Logical Core 2 (socket 0) forwards packets on 2 streams: + RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 + RX P=0/Q=1 (socket 0) -> TX P=0/Q=1 (socket 0) peer=02:00:00:00:00:00 +Logical Core 3 (socket 0) forwards packets on 2 streams: + RX P=0/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 + RX P=0/Q=1 (socket 0) -> TX P=0/Q=1 (socket 0) peer=02:00:00:00:00:00 + +After this commit, the result will be: +dpdk-testpmd -a BDF --proc-type=auto -- -i --rxq=4 --txq=4 +--nb-cores=2 --num-procs=2 --proc-id=0 +testpmd> start +io packet forwarding - ports=1 - cores=2 - streams=2 - NUMA support +enabled, MP allocation mode: native +Logical Core 2 (socket 0) forwards packets on 1 streams: + RX P=0/Q=0 (socket 2) -> TX P=0/Q=0 (socket 2) peer=02:00:00:00:00:00 +Logical Core 3 (socket 0) forwards packets on 1 streams: + RX P=0/Q=1 (socket 2) -> TX P=0/Q=1 (socket 2) peer=02:00:00:00:00:00 + +Fixes: a550baf24af9 ("app/testpmd: support multi-process") +Cc: stable@dpdk.org + +Signed-off-by: Dengdui Huang +Acked-by: Chengwen Feng +Acked-by: Ferruh Yigit +Signed-off-by: chenyi +--- + app/test-pmd/config.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c +index fbb0cabf3d..dac6be0daf 100644 +--- a/app/test-pmd/config.c ++++ b/app/test-pmd/config.c +@@ -3385,7 +3385,6 @@ rss_fwd_config_setup(void) + queueid_t nb_q; + streamid_t sm_id; + int start; +- int end; + + nb_q = nb_rxq; + if (nb_q > nb_txq) +@@ -3393,7 +3392,7 @@ rss_fwd_config_setup(void) + cur_fwd_config.nb_fwd_lcores = (lcoreid_t) nb_fwd_lcores; + cur_fwd_config.nb_fwd_ports = nb_fwd_ports; + cur_fwd_config.nb_fwd_streams = +- (streamid_t) (nb_q * cur_fwd_config.nb_fwd_ports); ++ (streamid_t) (nb_q / num_procs * cur_fwd_config.nb_fwd_ports); + + if (cur_fwd_config.nb_fwd_streams < cur_fwd_config.nb_fwd_lcores) + cur_fwd_config.nb_fwd_lcores = +@@ -3415,7 +3414,6 @@ rss_fwd_config_setup(void) + * the 2~3 queue for secondary process. + */ + start = proc_id * nb_q / num_procs; +- end = start + nb_q / num_procs; + rxp = 0; + rxq = start; + for (sm_id = 0; sm_id < cur_fwd_config.nb_fwd_streams; sm_id++) { +@@ -3434,8 +3432,6 @@ rss_fwd_config_setup(void) + continue; + rxp = 0; + rxq++; +- if (rxq >= end) +- rxq = start; + } + } + +-- +2.33.0 + diff --git a/dpdk.spec b/dpdk.spec index bc6d5d4bdaba036e7905afc683290d37f6633ffc..0747e6f5e2d1c7005fc48b9fddad4d3b89734698 100644 --- a/dpdk.spec +++ b/dpdk.spec @@ -1,6 +1,6 @@ Name: dpdk Version: 21.11 -Release: 65 +Release: 66 Packager: packaging@6wind.com URL: http://dpdk.org %global source_version 21.11 @@ -452,6 +452,18 @@ Patch6418: 0418-net-hns3-don-t-support-QinQ-insert-for-VF.patch Patch9024: 0419-add-rte_eth_bond_link_monitoring_get-in-map.patch +Patch6419: 0420-app-testpmd-fix-RSS-algorithm-choice.patch +Patch6420: 0421-net-hns3-disable-SCTP-verification-tag-for-RSS-hash-.patch +Patch6421: 0422-net-hns3-support-power-monitor.patch +Patch6422: 0423-ring-add-telemetry-command-to-list-rings.patch +Patch6423: 0424-ring-add-telemetry-command-for-ring-info.patch +Patch6424: 0425-net-hns3-enable-PFC-for-all-user-priorities.patch +Patch6425: 0426-net-hns3-fix-variable-overflow.patch +Patch6426: 0427-net-hns3-fix-double-free-for-Rx-Tx-queue.patch +Patch6427: 0428-net-hns3-fix-read-Rx-timestamp-handle.patch +Patch6428: 0429-net-hns3-fix-offload-flag-of-IEEE-1588.patch +Patch6429: 0430-app-testpmd-fix-crash-in-multi-process-forwarding.patch + Summary: Data Plane Development Kit core Group: System Environment/Libraries License: BSD and LGPLv2 and GPLv2 @@ -607,6 +619,21 @@ strip -g $RPM_BUILD_ROOT/lib/modules/%{kern_devel_ver}/extra/dpdk/igb_uio.ko /usr/sbin/depmod %changelog +* Tue May 28 2024 chenyi - 21.11-66 + Sync some patches from upstream about bugfix, modifies + are as follow: + - app/testpmd: fix crash in multi-process forwarding + - net/hns3: fix offload flag of IEEE 1588 + - net/hns3: fix read Rx timestamp handle + - net/hns3: fix double free for Rx/Tx queue + - net/hns3: fix variable overflow + - net/hns3: enable PFC for all user priorities + - ring: add telemetry command for ring info + - ring: add telemetry command to list rings + - net/hns3: support power monitor + - net/hns3: disable SCTP verification tag for RSS hash input + - app/testpmd: fix RSS algorithm choice + * Mon Apr 8 2024 zhangmengxuan - 21.11-65 Add add-rte_eth_bond_link_monitoring_get API in map