aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorAjit Khaparde <ajit.khaparde@emulex.com>2013-09-27 16:18:46 -0400
committerDavid S. Miller <davem@davemloft.net>2013-09-27 17:11:49 -0400
commitb9fc0e53b093ed74268c25731e4b9ac9cf2db5f1 (patch)
tree3bd3bbf3546868bd525a9f7ec9c03f1ce5121a41 /drivers/net/ethernet
parent45c459739e849b5a26a4b9a552460b1e601a32fc (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.c21
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