mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 03:55:50 +00:00
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: 21e043cd81
("net: hns3: fix set port based VLAN for PF")
Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d1a37dedcf
commit
1c9855085e
1 changed files with 6 additions and 12 deletions
|
@ -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,
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue