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
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>
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>
>
>
>
© 2016 - 2026 Red Hat, Inc.