From: Peng Li <lipeng...@huawei.com>

To improve code readability and maintainability, separate
the command handling part and the status parsing part from
bloated hclge_set_vf_vlan_common().

Signed-off-by: Peng Li <lipeng...@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazh...@huawei.com>
---
 .../ethernet/hisilicon/hns3/hns3pf/hclge_main.c    | 63 +++++++++++++++-------
 1 file changed, 44 insertions(+), 19 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c 
b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index e2c5b8f..4fac22d 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -8786,32 +8786,16 @@ static void hclge_enable_vlan_filter(struct 
hnae3_handle *handle, bool enable)
                handle->netdev_flags &= ~HNAE3_VLAN_FLTR;
 }
 
-static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, u16 vfid,
-                                   bool is_kill, u16 vlan,
-                                   __be16 proto)
+static int hclge_set_vf_vlan_filter_cmd(struct hclge_dev *hdev, u16 vfid,
+                                       bool is_kill, u16 vlan,
+                                       struct hclge_desc *desc)
 {
-       struct hclge_vport *vport = &hdev->vport[vfid];
        struct hclge_vlan_filter_vf_cfg_cmd *req0;
        struct hclge_vlan_filter_vf_cfg_cmd *req1;
-       struct hclge_desc desc[2];
        u8 vf_byte_val;
        u8 vf_byte_off;
        int ret;
 
-       /* if vf vlan table is full, firmware will close vf vlan filter, it
-        * is unable and unnecessary to add new vlan id to vf vlan filter.
-        * If spoof check is enable, and vf vlan is full, it shouldn't add
-        * new vlan, because tx packets with these vlan id will be dropped.
-        */
-       if (test_bit(vfid, hdev->vf_vlan_full) && !is_kill) {
-               if (vport->vf_info.spoofchk && vlan) {
-                       dev_err(&hdev->pdev->dev,
-                               "Can't add vlan due to spoof check is on and vf 
vlan table is full\n");
-                       return -EPERM;
-               }
-               return 0;
-       }
-
        hclge_cmd_setup_basic_desc(&desc[0],
                                   HCLGE_OPC_VLAN_FILTER_VF_CFG, false);
        hclge_cmd_setup_basic_desc(&desc[1],
@@ -8841,6 +8825,18 @@ static int hclge_set_vf_vlan_common(struct hclge_dev 
*hdev, u16 vfid,
                return ret;
        }
 
+       return 0;
+}
+
+static int hclge_check_vf_vlan_cmd_status(struct hclge_dev *hdev, u16 vfid,
+                                         bool is_kill, struct hclge_desc *desc)
+{
+       struct hclge_vlan_filter_vf_cfg_cmd *req0;
+       struct hclge_vlan_filter_vf_cfg_cmd *req1;
+
+       req0 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[0].data;
+       req1 = (struct hclge_vlan_filter_vf_cfg_cmd *)desc[1].data;
+
        if (!is_kill) {
 #define HCLGE_VF_VLAN_NO_ENTRY 2
                if (!req0->resp_code || req0->resp_code == 1)
@@ -8877,6 +8873,35 @@ static int hclge_set_vf_vlan_common(struct hclge_dev 
*hdev, u16 vfid,
        return -EIO;
 }
 
+static int hclge_set_vf_vlan_common(struct hclge_dev *hdev, u16 vfid,
+                                   bool is_kill, u16 vlan,
+                                   __be16 proto)
+{
+       struct hclge_vport *vport = &hdev->vport[vfid];
+       struct hclge_desc desc[2];
+       int ret;
+
+       /* if vf vlan table is full, firmware will close vf vlan filter, it
+        * is unable and unnecessary to add new vlan id to vf vlan filter.
+        * If spoof check is enable, and vf vlan is full, it shouldn't add
+        * new vlan, because tx packets with these vlan id will be dropped.
+        */
+       if (test_bit(vfid, hdev->vf_vlan_full) && !is_kill) {
+               if (vport->vf_info.spoofchk && vlan) {
+                       dev_err(&hdev->pdev->dev,
+                               "Can't add vlan due to spoof check is on and vf 
vlan table is full\n");
+                       return -EPERM;
+               }
+               return 0;
+       }
+
+       ret = hclge_set_vf_vlan_filter_cmd(hdev, vfid, is_kill, vlan, desc);
+       if (ret)
+               return ret;
+
+       return hclge_check_vf_vlan_cmd_status(hdev, vfid, is_kill, desc);
+}
+
 static int hclge_set_port_vlan_filter(struct hclge_dev *hdev, __be16 proto,
                                      u16 vlan_id, bool is_kill)
 {
-- 
2.7.4

Reply via email to