diff options
author | Ajit Khaparde <ajit.khaparde@emulex.com> | 2013-09-27 16:18:46 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-09-27 17:11:49 -0400 |
commit | b9fc0e53b093ed74268c25731e4b9ac9cf2db5f1 (patch) | |
tree | 3bd3bbf3546868bd525a9f7ec9c03f1ce5121a41 /drivers/net/ethernet | |
parent | 45c459739e849b5a26a4b9a552460b1e601a32fc (diff) |
be2net: Fix to configure VLAN priority for a VF interface.
Thix fix allows the VLAN priority to be configured for a VF interface
via the "ip link set DEVICE vf NUM" path.
Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 9c25607e5f58..ad593cabeed3 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
@@ -1212,28 +1212,29 @@ static int be_set_vf_vlan(struct net_device *netdev, | |||
1212 | int vf, u16 vlan, u8 qos) | 1212 | int vf, u16 vlan, u8 qos) |
1213 | { | 1213 | { |
1214 | struct be_adapter *adapter = netdev_priv(netdev); | 1214 | struct be_adapter *adapter = netdev_priv(netdev); |
1215 | struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf]; | ||
1215 | int status = 0; | 1216 | int status = 0; |
1216 | 1217 | ||
1217 | if (!sriov_enabled(adapter)) | 1218 | if (!sriov_enabled(adapter)) |
1218 | return -EPERM; | 1219 | return -EPERM; |
1219 | 1220 | ||
1220 | if (vf >= adapter->num_vfs || vlan > 4095) | 1221 | if (vf >= adapter->num_vfs || vlan > 4095 || qos > 7) |
1221 | return -EINVAL; | 1222 | return -EINVAL; |
1222 | 1223 | ||
1223 | if (vlan) { | 1224 | if (vlan || qos) { |
1224 | if (adapter->vf_cfg[vf].vlan_tag != vlan) { | 1225 | vlan |= qos << VLAN_PRIO_SHIFT; |
1226 | if (vf_cfg->vlan_tag != vlan) { | ||
1225 | /* If this is new value, program it. Else skip. */ | 1227 | /* If this is new value, program it. Else skip. */ |
1226 | adapter->vf_cfg[vf].vlan_tag = vlan; | 1228 | vf_cfg->vlan_tag = vlan; |
1227 | 1229 | status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, | |
1228 | status = be_cmd_set_hsw_config(adapter, vlan, | 1230 | vf_cfg->if_handle, 0); |
1229 | vf + 1, adapter->vf_cfg[vf].if_handle, 0); | ||
1230 | } | 1231 | } |
1231 | } else { | 1232 | } else { |
1232 | /* Reset Transparent Vlan Tagging. */ | 1233 | /* Reset Transparent Vlan Tagging. */ |
1233 | adapter->vf_cfg[vf].vlan_tag = 0; | 1234 | vf_cfg->vlan_tag = 0; |
1234 | vlan = adapter->vf_cfg[vf].def_vid; | 1235 | vlan = vf_cfg->def_vid; |
1235 | status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, | 1236 | status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, |
1236 | adapter->vf_cfg[vf].if_handle, 0); | 1237 | vf_cfg->if_handle, 0); |
1237 | } | 1238 | } |
1238 | 1239 | ||
1239 | 1240 | ||