[PATCH net 1/4] net: hns3: fix concurrent setting vlan filter issue

Jijie Shao posted 4 patches 3 months, 1 week ago
There is a newer version of this series
[PATCH net 1/4] net: hns3: fix concurrent setting vlan filter issue
Posted by Jijie Shao 3 months, 1 week ago
From: Jian Shen <shenjian15@huawei.com>

The vport->req_vlan_fltr_en may be changed concurrently by function
hclge_sync_vlan_fltr_state() called in periodic work task and
function hclge_enable_vport_vlan_filter() called by user configuration.
It may cause the user configuration inoperative. Fixes it by protect
the vport->req_vlan_fltr by vport_lock.

Fixes: fa6a262a2550 ("net: hns3: add support for VF modify VLAN filter state")
Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
---
 .../hisilicon/hns3/hns3pf/hclge_main.c        | 36 +++++++++++--------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index 35c984a256ab..a485fc53807d 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -9576,33 +9576,36 @@ static bool hclge_need_enable_vport_vlan_filter(struct hclge_vport *vport)
 	return false;
 }
 
-int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en)
+static int __hclge_enable_vport_vlan_filter(struct hclge_vport *vport,
+					    bool request_en)
 {
-	struct hclge_dev *hdev = vport->back;
 	bool need_en;
 	int ret;
 
-	mutex_lock(&hdev->vport_lock);
-
-	vport->req_vlan_fltr_en = request_en;
-
 	need_en = hclge_need_enable_vport_vlan_filter(vport);
-	if (need_en == vport->cur_vlan_fltr_en) {
-		mutex_unlock(&hdev->vport_lock);
+	if (need_en == vport->cur_vlan_fltr_en)
 		return 0;
-	}
 
 	ret = hclge_set_vport_vlan_filter(vport, need_en);
-	if (ret) {
-		mutex_unlock(&hdev->vport_lock);
+	if (ret)
 		return ret;
-	}
 
 	vport->cur_vlan_fltr_en = need_en;
 
+	return 0;
+}
+
+int hclge_enable_vport_vlan_filter(struct hclge_vport *vport, bool request_en)
+{
+	struct hclge_dev *hdev = vport->back;
+	int ret;
+
+	mutex_lock(&hdev->vport_lock);
+	vport->req_vlan_fltr_en = request_en;
+	ret = __hclge_enable_vport_vlan_filter(vport, request_en);
 	mutex_unlock(&hdev->vport_lock);
 
-	return 0;
+	return ret;
 }
 
 static int hclge_enable_vlan_filter(struct hnae3_handle *handle, bool enable)
@@ -10623,16 +10626,19 @@ static void hclge_sync_vlan_fltr_state(struct hclge_dev *hdev)
 					&vport->state))
 			continue;
 
-		ret = hclge_enable_vport_vlan_filter(vport,
-						     vport->req_vlan_fltr_en);
+		mutex_lock(&hdev->vport_lock);
+		ret = __hclge_enable_vport_vlan_filter(vport,
+						       vport->req_vlan_fltr_en);
 		if (ret) {
 			dev_err(&hdev->pdev->dev,
 				"failed to sync vlan filter state for vport%u, ret = %d\n",
 				vport->vport_id, ret);
 			set_bit(HCLGE_VPORT_STATE_VLAN_FLTR_CHANGE,
 				&vport->state);
+			mutex_unlock(&hdev->vport_lock);
 			return;
 		}
+		mutex_unlock(&hdev->vport_lock);
 	}
 }
 
-- 
2.33.0
Re: [PATCH net 1/4] net: hns3: fix concurrent setting vlan filter issue
Posted by Simon Horman 3 months ago
On Wed, Jul 02, 2025 at 09:08:58PM +0800, Jijie Shao wrote:
> From: Jian Shen <shenjian15@huawei.com>
> 
> The vport->req_vlan_fltr_en may be changed concurrently by function
> hclge_sync_vlan_fltr_state() called in periodic work task and
> function hclge_enable_vport_vlan_filter() called by user configuration.
> It may cause the user configuration inoperative. Fixes it by protect
> the vport->req_vlan_fltr by vport_lock.
> 
> Fixes: fa6a262a2550 ("net: hns3: add support for VF modify VLAN filter state")

I think the commit sited above is for the VF driver, whereas this
patch addresses PF driver code. I think the following is the
correct tag:

Fixes: 2ba306627f59 ("net: hns3: add support for modify VLAN filter state")

> Signed-off-by: Jian Shen <shenjian15@huawei.com>
> Signed-off-by: Jijie Shao <shaojijie@huawei.com>

Otherwise, this looks good to me.

Reviewed-by: Simon Horman <horms@kernel.org>
Re: [PATCH net 1/4] net: hns3: fix concurrent setting vlan filter issue
Posted by Jijie Shao 3 months ago
on 2025/7/4 23:52, Simon Horman wrote:
> On Wed, Jul 02, 2025 at 09:08:58PM +0800, Jijie Shao wrote:
>> From: Jian Shen <shenjian15@huawei.com>
>>
>> The vport->req_vlan_fltr_en may be changed concurrently by function
>> hclge_sync_vlan_fltr_state() called in periodic work task and
>> function hclge_enable_vport_vlan_filter() called by user configuration.
>> It may cause the user configuration inoperative. Fixes it by protect
>> the vport->req_vlan_fltr by vport_lock.
>>
>> Fixes: fa6a262a2550 ("net: hns3: add support for VF modify VLAN filter state")
> I think the commit sited above is for the VF driver, whereas this
> patch addresses PF driver code. I think the following is the
> correct tag:

Yeah, I will fix it in v2.

Thanks,
Jijie Shao

>
> Fixes: 2ba306627f59 ("net: hns3: add support for modify VLAN filter state")
>
>> Signed-off-by: Jian Shen <shenjian15@huawei.com>
>> Signed-off-by: Jijie Shao <shaojijie@huawei.com>
> Otherwise, this looks good to me.
>
> Reviewed-by: Simon Horman <horms@kernel.org>
>
>
>