Signed-off-by: speech_white <humin29@huawei.com> (cherry picked from commit 39c2c5154122fef74060ffd6dbbe8cd4fdd9d21b)
71 lines
2.3 KiB
Diff
71 lines
2.3 KiB
Diff
From 93e1ea6dfa99dea359b8d66123576a395c2c0acd Mon Sep 17 00:00:00 2001
|
|
From: Huisong Li <lihuisong@huawei.com>
|
|
Date: Wed, 6 Apr 2022 14:57:00 +0800
|
|
Subject: [PATCH] ethdev: fix RSS update when RSS is disabled
|
|
|
|
The RTE_ETH_MQ_RX_RSS_FLAG flag is a switch to enable RSS. If the flag
|
|
is not set in dev_configure, RSS will be not configured and enabled.
|
|
However, RSS hash and reta can still be configured by ethdev ops to
|
|
enable RSS if the flag isn't set. The behavior is inconsistent.
|
|
|
|
Fixes: 99a2dd955fba ("lib: remove librte_ prefix from directory names")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Huisong Li <lihuisong@huawei.com>
|
|
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
|
|
Reviewed-by: Ferruh Yigit <ferruh.yigit@xilinx.com>
|
|
---
|
|
lib/ethdev/rte_ethdev.c | 15 +++++++++++++++
|
|
1 file changed, 15 insertions(+)
|
|
|
|
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
|
|
index 29a3d80466..8520aec561 100644
|
|
--- a/lib/ethdev/rte_ethdev.c
|
|
+++ b/lib/ethdev/rte_ethdev.c
|
|
@@ -3867,6 +3867,7 @@ rte_eth_dev_rss_reta_update(uint16_t port_id,
|
|
struct rte_eth_rss_reta_entry64 *reta_conf,
|
|
uint16_t reta_size)
|
|
{
|
|
+ enum rte_eth_rx_mq_mode mq_mode;
|
|
struct rte_eth_dev *dev;
|
|
int ret;
|
|
|
|
@@ -3898,6 +3899,12 @@ rte_eth_dev_rss_reta_update(uint16_t port_id,
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
+ mq_mode = dev->data->dev_conf.rxmode.mq_mode;
|
|
+ if (!(mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) {
|
|
+ RTE_ETHDEV_LOG(ERR, "Multi-queue RSS mode isn't enabled.\n");
|
|
+ return -ENOTSUP;
|
|
+ }
|
|
+
|
|
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->reta_update, -ENOTSUP);
|
|
return eth_err(port_id, (*dev->dev_ops->reta_update)(dev, reta_conf,
|
|
reta_size));
|
|
@@ -3937,6 +3944,7 @@ rte_eth_dev_rss_hash_update(uint16_t port_id,
|
|
{
|
|
struct rte_eth_dev *dev;
|
|
struct rte_eth_dev_info dev_info = { .flow_type_rss_offloads = 0, };
|
|
+ enum rte_eth_rx_mq_mode mq_mode;
|
|
int ret;
|
|
|
|
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
|
@@ -3962,6 +3970,13 @@ rte_eth_dev_rss_hash_update(uint16_t port_id,
|
|
dev_info.flow_type_rss_offloads);
|
|
return -EINVAL;
|
|
}
|
|
+
|
|
+ mq_mode = dev->data->dev_conf.rxmode.mq_mode;
|
|
+ if (!(mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) {
|
|
+ RTE_ETHDEV_LOG(ERR, "Multi-queue RSS mode isn't enabled.\n");
|
|
+ return -ENOTSUP;
|
|
+ }
|
|
+
|
|
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_update, -ENOTSUP);
|
|
return eth_err(port_id, (*dev->dev_ops->rss_hash_update)(dev,
|
|
rss_conf));
|
|
--
|
|
2.33.0
|
|
|