[PATCH 2/6] net/hns3: fix inconsistent enabled RSS behavior
Min Hu (Connor)
humin29 at huawei.com
Mon Feb 28 04:21:42 CET 2022
From: Huisong Li <lihuisong at huawei.com>
RSS will not be enabled if the RTE_ETH_MQ_RX_RSS_FLAG isn't be set in
dev_configure phase. However, if this flag isn't set, RSS can be enabled
through the ethdev ops and rte_flow API. This behavior is contrary to each
other.
Fixes: c37ca66f2b27 ("net/hns3: support RSS")
Cc: stable at dpdk.org
Signed-off-by: Huisong Li <lihuisong at huawei.com>
---
drivers/net/hns3/hns3_flow.c | 5 +++++
drivers/net/hns3/hns3_rss.c | 12 ++++++++++++
2 files changed, 17 insertions(+)
diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c
index aba07aaa6f..46371c4190 100644
--- a/drivers/net/hns3/hns3_flow.c
+++ b/drivers/net/hns3/hns3_flow.c
@@ -1371,6 +1371,7 @@ hns3_parse_rss_filter(struct rte_eth_dev *dev,
const struct rte_flow_action *actions,
struct rte_flow_error *error)
{
+ enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode;
struct hns3_adapter *hns = dev->data->dev_private;
struct hns3_hw *hw = &hns->hw;
struct hns3_rss_conf *rss_conf = &hw->rss_info;
@@ -1426,6 +1427,10 @@ hns3_parse_rss_filter(struct rte_eth_dev *dev,
RTE_FLOW_ERROR_TYPE_ACTION_CONF,
&rss->types,
"input RSS types are not supported");
+ if (!((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG))
+ return rte_flow_error_set(error, ENOTSUP,
+ RTE_FLOW_ERROR_TYPE_ACTION_CONF,
+ act, "multi-queue RSS isn't enabled");
act_index++;
diff --git a/drivers/net/hns3/hns3_rss.c b/drivers/net/hns3/hns3_rss.c
index 1782d63883..e0eab05fb9 100644
--- a/drivers/net/hns3/hns3_rss.c
+++ b/drivers/net/hns3/hns3_rss.c
@@ -399,6 +399,7 @@ int
hns3_dev_rss_hash_update(struct rte_eth_dev *dev,
struct rte_eth_rss_conf *rss_conf)
{
+ enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode;
struct hns3_adapter *hns = dev->data->dev_private;
struct hns3_hw *hw = &hns->hw;
struct hns3_rss_tuple_cfg *tuple = &hw->rss_info.rss_tuple_sets;
@@ -408,6 +409,11 @@ hns3_dev_rss_hash_update(struct rte_eth_dev *dev,
uint8_t *key = rss_conf->rss_key;
int ret;
+ if (!((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) {
+ hns3_err(hw, "multi-queue RSS isn't enabled.");
+ return -EOPNOTSUPP;
+ }
+
if (hw->rss_dis_flag)
return -EINVAL;
@@ -498,6 +504,7 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev,
struct rte_eth_rss_reta_entry64 *reta_conf,
uint16_t reta_size)
{
+ enum rte_eth_rx_mq_mode mq_mode = dev->data->dev_conf.rxmode.mq_mode;
struct hns3_adapter *hns = dev->data->dev_private;
struct hns3_hw *hw = &hns->hw;
struct hns3_rss_conf *rss_cfg = &hw->rss_info;
@@ -506,6 +513,11 @@ hns3_dev_rss_reta_update(struct rte_eth_dev *dev,
uint16_t i;
int ret;
+ if (!((uint32_t)mq_mode & RTE_ETH_MQ_RX_RSS_FLAG)) {
+ hns3_err(hw, "multi-queue RSS isn't enabled.");
+ return -EOPNOTSUPP;
+ }
+
if (reta_size != hw->rss_ind_tbl_size) {
hns3_err(hw, "The size of hash lookup table configured (%u)"
"doesn't match the number hardware can supported"
--
2.33.0
More information about the dev
mailing list