Commit 1c985508 authored by Jian Shen's avatar Jian Shen Committed by David S. Miller

net: hns3: fix VF ID issue for setting VF VLAN

Previously, when set VF VLAN with command "ip link set <pf name>
vf <vf id> vlan <vlan id>", the VF ID 0 is handled as PF incorrectly,
which should be the first VF. This patch fixes it.

Fixes: 21e043cd ("net: hns3: fix set port based VLAN for PF")
Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d1a37ded
...@@ -8438,13 +8438,16 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid, ...@@ -8438,13 +8438,16 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid,
if (hdev->pdev->revision == 0x20) if (hdev->pdev->revision == 0x20)
return -EOPNOTSUPP; return -EOPNOTSUPP;
vport = hclge_get_vf_vport(hdev, vfid);
if (!vport)
return -EINVAL;
/* qos is a 3 bits value, so can not be bigger than 7 */ /* qos is a 3 bits value, so can not be bigger than 7 */
if (vfid >= hdev->num_alloc_vfs || vlan > VLAN_N_VID - 1 || qos > 7) if (vlan > VLAN_N_VID - 1 || qos > 7)
return -EINVAL; return -EINVAL;
if (proto != htons(ETH_P_8021Q)) if (proto != htons(ETH_P_8021Q))
return -EPROTONOSUPPORT; return -EPROTONOSUPPORT;
vport = &hdev->vport[vfid];
state = hclge_get_port_base_vlan_state(vport, state = hclge_get_port_base_vlan_state(vport,
vport->port_base_vlan_cfg.state, vport->port_base_vlan_cfg.state,
vlan); vlan);
...@@ -8455,21 +8458,12 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid, ...@@ -8455,21 +8458,12 @@ static int hclge_set_vf_vlan_filter(struct hnae3_handle *handle, int vfid,
vlan_info.qos = qos; vlan_info.qos = qos;
vlan_info.vlan_proto = ntohs(proto); vlan_info.vlan_proto = ntohs(proto);
/* update port based VLAN for PF */
if (!vfid) {
hclge_notify_client(hdev, HNAE3_DOWN_CLIENT);
ret = hclge_update_port_base_vlan_cfg(vport, state, &vlan_info);
hclge_notify_client(hdev, HNAE3_UP_CLIENT);
return ret;
}
if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) { if (!test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
return hclge_update_port_base_vlan_cfg(vport, state, return hclge_update_port_base_vlan_cfg(vport, state,
&vlan_info); &vlan_info);
} else { } else {
ret = hclge_push_vf_port_base_vlan_info(&hdev->vport[0], ret = hclge_push_vf_port_base_vlan_info(&hdev->vport[0],
(u8)vfid, state, vport->vport_id, state,
vlan, qos, vlan, qos,
ntohs(proto)); ntohs(proto));
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment