optimize RSS hash config/update,RETA update/get.<br /> <br />Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> <br />---<br /> drivers/net/zxdh/zxdh_ethdev_ops.c |   1 -<br /> drivers/net/zxdh/zxdh_msg.c        | 129 +++++++++++++++++++++++++++++<br /> 2 files changed, 129 insertions(+), 1 deletion(-)<br /> <br />diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />index ec83e8850c..8b51877489 100644<br />--- a/drivers/net/zxdh/zxdh_ethdev_ops.c<br />+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c<br />@@ -1144,7 +1144,6 @@ zxdh_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_con<br />         }<br />         reply_msg.reply_body.rss_hf.rss_hf = port_attr.rss_hash_factor;<br />     } else {<br />-        zxdh_msg_head_build(hw, ZXDH_RSS_HF_SET, &msg);<br />         ret = zxdh_vf_send_msg_to_pf(dev, &msg, sizeof(struct zxdh_msg_info),<br />                 &reply_msg, sizeof(struct zxdh_msg_reply_info));<br />         if (ret) {<br />diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c<br />index d9f212e642..efa28e7b17 100644<br />--- a/drivers/net/zxdh/zxdh_msg.c<br />+++ b/drivers/net/zxdh/zxdh_msg.c<br />@@ -1546,6 +1546,130 @@ zxdh_vf_set_vlan_offload(struct zxdh_hw *hw, uint16_t vport, void *cfg_data,<br />     return ret;<br /> }<br />  <br />+static int<br />+zxdh_vf_rss_hf_get(struct zxdh_hw *hw, uint16_t vport, void *cfg_data __rte_unused,<br />+            struct zxdh_msg_reply_body *reply, uint16_t *res_len)<br />+{<br />+    char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "rss_hf";<br />+    struct zxdh_port_attr_table vport_att = {0};<br />+    int ret = 0;<br />+<br />+    ret = zxdh_get_port_attr(hw, vport, &vport_att);<br />+    if (ret) {<br />+        sprintf(str, "get rss hash factor failed, ret:%d\n", ret);<br />+        PMD_DRV_LOG(ERR, "get rss hash factor failed.");<br />+        goto proc_end;<br />+    }<br />+<br />+    reply->rss_hf.rss_hf = vport_att.rss_hash_factor;<br />+<br />+proc_end:<br />+    *res_len = strlen(str) + sizeof(enum zxdh_reps_flag);<br />+    reply->flag = (ret == 0) ? ZXDH_REPS_SUCC : ZXDH_REPS_FAIL;<br />+    rte_memcpy(&reply->reply_data, str, strlen(str) + 1);<br />+    return ret;<br />+}<br />+<br />+static int<br />+zxdh_vf_rss_hf_set(struct zxdh_hw *hw, uint16_t vport, void *cfg_data,<br />+            struct zxdh_msg_reply_body *reply, uint16_t *res_len)<br />+{<br />+    char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "rss_hf";<br />+    struct zxdh_rss_hf *rss_hf = cfg_data;<br />+    struct zxdh_port_attr_table vport_att = {0};<br />+    int ret = 0;<br />+<br />+    ret = zxdh_get_port_attr(hw, vport, &vport_att);<br />+    if (ret) {<br />+        sprintf(str, "set rss hash factor (set vport tbl failed, hf is %d). ret:%d\n",<br />+                rss_hf->rss_hf, ret);<br />+        PMD_DRV_LOG(ERR, "rss enable hash factor set failed");<br />+        goto proc_end;<br />+    }<br />+<br />+    vport_att.rss_hash_factor = rss_hf->rss_hf;<br />+    ret = zxdh_set_port_attr(hw, vport, &vport_att);<br />+    if (ret) {<br />+        sprintf(str, "set rss hash factor (set vport tbl failed, hf is %d). ret:%d\n",<br />+                rss_hf->rss_hf, ret);<br />+        PMD_DRV_LOG(ERR, "rss config hf failed");<br />+    }<br />+<br />+proc_end:<br />+    *res_len = strlen(str) + sizeof(enum zxdh_reps_flag);<br />+    reply->flag = (ret == 0) ? ZXDH_REPS_SUCC : ZXDH_REPS_FAIL;<br />+    rte_memcpy(&reply->reply_data, str, strlen(str) + 1);<br />+    return ret;<br />+}<br />+<br />+static int<br />+zxdh_vf_rss_enable(struct zxdh_hw *hw, uint16_t vport, void *cfg_data,<br />+            struct zxdh_msg_reply_body *reply, uint16_t *res_len)<br />+{<br />+    char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "rss_enable";<br />+    struct zxdh_rss_enable *rss_enable = cfg_data;<br />+    struct zxdh_port_attr_table vport_att = {0};<br />+    int ret = 0;<br />+<br />+    ret = zxdh_get_port_attr(hw, vport, &vport_att);<br />+    if (ret) {<br />+        sprintf(str, "set rss enable (get vport tbl failed, rss_enable is %d). ret:%d\n",<br />+                rss_enable->enable, ret);<br />+        PMD_DRV_LOG(ERR, "rss enable set failed");<br />+        goto proc_end;<br />+    }<br />+<br />+    vport_att.rss_enable = rss_enable->enable;<br />+    ret = zxdh_set_port_attr(hw, vport, &vport_att);<br />+    if (ret) {<br />+        sprintf(str, "set rss enable (set vport tbl failed, rss_enable is %d). ret:%d\n",<br />+                rss_enable->enable, ret);<br />+        PMD_DRV_LOG(ERR, "rss enable set failed");<br />+    }<br />+<br />+proc_end:<br />+    *res_len = strlen(str) + sizeof(enum zxdh_reps_flag);<br />+    reply->flag = (ret == 0) ? ZXDH_REPS_SUCC : ZXDH_REPS_FAIL;<br />+    rte_memcpy(&reply->reply_data, str, strlen(str) + 1);<br />+    return ret;<br />+}<br />+<br />+static int<br />+zxdh_vf_rss_table_set(struct zxdh_hw *hw, uint16_t vport, void *cfg_data,<br />+        struct zxdh_msg_reply_body *reply, uint16_t *res_len)<br />+{<br />+    char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "rss_table";<br />+    struct zxdh_rss_reta *rss_reta = cfg_data;<br />+    int32_t ret = 0;<br />+<br />+    ret = zxdh_rss_table_set(hw, vport, rss_reta);<br />+    if (ret)<br />+        sprintf(str, "set rss reta tbl failed, code:%d", ret);<br />+<br />+    *res_len = strlen(str) + sizeof(enum zxdh_reps_flag);<br />+    reply->flag = (ret == 0) ? ZXDH_REPS_SUCC : ZXDH_REPS_FAIL;<br />+    rte_memcpy(&reply->reply_data, str, strlen(str) + 1);<br />+    return ret;<br />+}<br />+<br />+static int<br />+zxdh_vf_rss_table_get(struct zxdh_hw *hw, uint16_t vport, void *cfg_data __rte_unused,<br />+        struct zxdh_msg_reply_body *reply, uint16_t *res_len)<br />+{<br />+    char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "rss_table";<br />+    struct zxdh_rss_reta *rss_reta = &reply->rss_reta;<br />+    int ret = 0;<br />+<br />+    ret = zxdh_rss_table_get(hw, vport, rss_reta);<br />+    if (ret)<br />+        sprintf(str, "set rss reta tbl failed, code:%d", ret);<br />+<br />+    *res_len = strlen(str) + sizeof(enum zxdh_reps_flag);<br />+    reply->flag = (ret == 0) ? ZXDH_REPS_SUCC : ZXDH_REPS_FAIL;<br />+    rte_memcpy(&reply->reply_data, str, strlen(str) + 1);<br />+    return ret;<br />+}<br />+<br /> zxdh_msg_process_callback zxdh_proc_cb[] = {<br />     [ZXDH_NULL] = NULL,<br />     [ZXDH_VF_PORT_INIT] = zxdh_vf_port_init,<br />@@ -1556,6 +1680,11 @@ zxdh_msg_process_callback zxdh_proc_cb[] = {<br />     [ZXDH_VLAN_FILTER_SET] = zxdh_vf_set_vlan_filter,<br />     [ZXDH_VLAN_FILTER_ADD] = zxdh_vf_vlan_filter_table_add,<br />     [ZXDH_VLAN_FILTER_DEL] = zxdh_vf_vlan_filter_table_del,<br />+    [ZXDH_RSS_ENABLE] = zxdh_vf_rss_enable,<br />+    [ZXDH_RSS_RETA_GET] = zxdh_vf_rss_table_get,<br />+    [ZXDH_RSS_RETA_SET] = zxdh_vf_rss_table_set,<br />+    [ZXDH_RSS_HF_SET] = zxdh_vf_rss_hf_set,<br />+    [ZXDH_RSS_HF_GET] = zxdh_vf_rss_hf_get,<br />     [ZXDH_VLAN_OFFLOAD] = zxdh_vf_set_vlan_offload,<br /> };<br />  <br />--  <br />2.27.0<br />