From: Huisong Li <lihuis...@huawei.com>

Some RSS fields in struct hns3_rss_conf (e.g. conf, queue,
valid) are only used when create RSS flow rule, which is
unnecessary for RSS configuration information from ethdev
ops. This patch removes these fields from hns3_rss_conf
and add a new struct hns3_flow_rss_conf as rte flow
RSS filter list node element.

Cc: sta...@dpdk.org

Signed-off-by: Huisong Li <lihuis...@huawei.com>
Signed-off-by: Dongdong Liu <liudongdo...@huawei.com>
---
 drivers/net/hns3/hns3_flow.c | 23 ++++++++++++-----------
 drivers/net/hns3/hns3_flow.h | 10 +++++++++-
 drivers/net/hns3/hns3_rss.h  |  5 -----
 3 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c
index 527874df44..89374816aa 100644
--- a/drivers/net/hns3/hns3_flow.c
+++ b/drivers/net/hns3/hns3_flow.c
@@ -1359,7 +1359,6 @@ hns3_parse_rss_filter(struct rte_eth_dev *dev,
 {
        struct hns3_adapter *hns = dev->data->dev_private;
        struct hns3_hw *hw = &hns->hw;
-       struct hns3_rss_conf *rss_conf = &hw->rss_info;
        const struct rte_flow_action_rss *rss;
        const struct rte_flow_action *act;
        uint32_t act_index = 0;
@@ -1374,7 +1373,7 @@ hns3_parse_rss_filter(struct rte_eth_dev *dev,
                                          act, "no valid queues");
        }
 
-       if (rss->queue_num > RTE_DIM(rss_conf->queue))
+       if (rss->queue_num > HNS3_RSS_QUEUES_BUFFER_NUM)
                return rte_flow_error_set(error, ENOTSUP,
                                          RTE_FLOW_ERROR_TYPE_ACTION_CONF, act,
                                          "queue number configured exceeds "
@@ -1439,7 +1438,7 @@ hns3_disable_rss(struct hns3_hw *hw)
 }
 
 static int
-hns3_parse_rss_algorithm(struct hns3_hw *hw, struct hns3_rss_conf *rss_conf,
+hns3_parse_rss_algorithm(struct hns3_hw *hw, struct hns3_flow_rss_conf 
*rss_conf,
                         uint8_t *hash_algo)
 {
        const uint8_t hash_func_map[] = {
@@ -1466,8 +1465,8 @@ hns3_parse_rss_algorithm(struct hns3_hw *hw, struct 
hns3_rss_conf *rss_conf,
                 * rte_flow_hash_algo) when this rule is delivered.
                 */
                if (__atomic_load_n(&hw->reset.resetting, __ATOMIC_RELAXED) &&
-                   *hash_algo != rss_conf->rte_flow_hash_algo)
-                       *hash_algo = rss_conf->rte_flow_hash_algo;
+                   *hash_algo != rss_conf->hash_algo)
+                       *hash_algo = rss_conf->hash_algo;
 
                return 0;
        }
@@ -1478,7 +1477,7 @@ hns3_parse_rss_algorithm(struct hns3_hw *hw, struct 
hns3_rss_conf *rss_conf,
 }
 
 static int
-hns3_hw_rss_hash_set(struct hns3_hw *hw, struct hns3_rss_conf *conf)
+hns3_hw_rss_hash_set(struct hns3_hw *hw, struct hns3_flow_rss_conf *conf)
 {
        struct rte_flow_action_rss *rss_config = &conf->conf;
        uint8_t rss_key[HNS3_RSS_KEY_SIZE_MAX] = {0};
@@ -1503,7 +1502,7 @@ hns3_hw_rss_hash_set(struct hns3_hw *hw, struct 
hns3_rss_conf *conf)
                                    hw->rss_key_size);
        if (ret)
                return ret;
-       conf->rte_flow_hash_algo = hash_algo;
+       conf->hash_algo = hash_algo;
 
        /* Filter the unsupported flow types */
        flow_types = rss_config->types ?
@@ -1545,7 +1544,8 @@ hns3_update_indir_table(struct hns3_hw *hw,
 }
 
 static int
-hns3_reset_rss_filter(struct hns3_hw *hw, const struct hns3_rss_conf *conf)
+hns3_reset_rss_filter(struct hns3_hw *hw,
+                     const struct hns3_flow_rss_conf *conf)
 {
        int ret;
 
@@ -1560,7 +1560,7 @@ hns3_reset_rss_filter(struct hns3_hw *hw, const struct 
hns3_rss_conf *conf)
 }
 
 static int
-hns3_config_rss_filter(struct hns3_hw *hw, struct hns3_rss_conf *conf)
+hns3_config_rss_filter(struct hns3_hw *hw, struct hns3_flow_rss_conf *conf)
 {
        struct rte_flow_action_rss *rss_act;
        uint16_t num;
@@ -1669,7 +1669,8 @@ hns3_rss_action_is_dup(struct hns3_hw *hw,
 }
 
 static int
-hns3_flow_parse_rss(struct rte_eth_dev *dev, struct hns3_rss_conf *conf)
+hns3_flow_parse_rss(struct rte_eth_dev *dev,
+                   struct hns3_flow_rss_conf *conf)
 {
        struct hns3_adapter *hns = dev->data->dev_private;
        struct hns3_hw *hw = &hns->hw;
@@ -1739,8 +1740,8 @@ hns3_flow_create_rss_rule(struct rte_eth_dev *dev,
        struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private);
        const struct rte_flow_action_rss *rss_act;
        struct hns3_rss_conf_ele *rss_filter_ptr;
+       struct hns3_flow_rss_conf *new_conf;
        struct hns3_rss_conf_ele *filter_ptr;
-       struct hns3_rss_conf *new_conf;
        int ret;
 
        rss_filter_ptr = rte_zmalloc("hns3 rss filter",
diff --git a/drivers/net/hns3/hns3_flow.h b/drivers/net/hns3/hns3_flow.h
index e4b2fdf2e6..90126f2b6e 100644
--- a/drivers/net/hns3/hns3_flow.h
+++ b/drivers/net/hns3/hns3_flow.h
@@ -24,10 +24,18 @@ struct rte_flow {
        uint32_t counter_id;
 };
 
+struct hns3_flow_rss_conf {
+       struct rte_flow_action_rss conf;
+       uint8_t hash_algo;
+       uint8_t key[HNS3_RSS_KEY_SIZE_MAX];  /* Hash key */
+       uint16_t queue[HNS3_RSS_QUEUES_BUFFER_NUM]; /* Queues indices to use */
+       bool valid; /* check if RSS rule is valid */
+};
+
 /* rss filter list structure */
 struct hns3_rss_conf_ele {
        TAILQ_ENTRY(hns3_rss_conf_ele) entries;
-       struct hns3_rss_conf filter_info;
+       struct hns3_flow_rss_conf filter_info;
 };
 
 /* hns3_flow memory list structure */
diff --git a/drivers/net/hns3/hns3_rss.h b/drivers/net/hns3/hns3_rss.h
index cc0bb8431d..d19730c69c 100644
--- a/drivers/net/hns3/hns3_rss.h
+++ b/drivers/net/hns3/hns3_rss.h
@@ -40,15 +40,10 @@
 /* Same as the Max queue num under TC */
 #define HNS3_RSS_QUEUES_BUFFER_NUM     512
 struct hns3_rss_conf {
-       /* RSS parameters :algorithm, flow_types,  key, queue */
-       struct rte_flow_action_rss conf;
        uint64_t rss_hf;
        uint8_t hash_algo; /* hash function type defined by hardware */
-       uint8_t rte_flow_hash_algo;
        uint8_t key[HNS3_RSS_KEY_SIZE_MAX];  /* Hash key */
        uint16_t rss_indirection_tbl[HNS3_RSS_IND_TBL_SIZE_MAX];
-       uint16_t queue[HNS3_RSS_QUEUES_BUFFER_NUM]; /* Queues indices to use */
-       bool valid; /* check if RSS rule is valid */
        /*
         * For IPv6 SCTP packets type, check whether the NIC hardware support
         * RSS hash using the src/dst port as the input tuple. For Kunpeng920
-- 
2.22.0

Reply via email to