aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/cmd.c
diff options
context:
space:
mode:
authorRony Efraim <ronye@mellanox.com>2013-11-07 05:19:51 -0500
committerDavid S. Miller <davem@davemloft.net>2013-11-07 19:22:47 -0500
commitf0f829bf42cdeb027234a1d0e1e5f62d77380a4d (patch)
treea34783b75f12d3136073ab3a13dfdf734cfe8fba /drivers/net/ethernet/mellanox/mlx4/cmd.c
parent571b8b92c7d4cddd899cf19f11f14fb149968898 (diff)
net/mlx4_core: Add immediate activate for VGT->VST->VGT
Allow immediate activate of VGT->VST and VST->VGT transitions, without the need of rebinding in mlx4_master_immediate_activate_vlan_qos(). Also in struct res_qp: add qp parameters (vlan_index,fvl,vlan_cntrol..) to the saved set, in order to restore when move to VGT. - Clear at mlx4_RST2INIT_QP_wrapper() - Save at mlx4_INIT2RTR_QP_wrapper() - Restore at mlx4_vf_immed_vlan_work_handler() Update mlx4_vf_immed_vlan_work_handler() to support VGT. Signed-off-by: Rony Efraim <ronye@mellanox.com> Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il> Reviewed-by: Hadar Hen Zion <hadarh@mellanox.com> Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/cmd.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index 7207dcd05759..1e9970d2f0f3 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -1539,11 +1539,6 @@ out:
1539 return ret; 1539 return ret;
1540} 1540}
1541 1541
1542static int calculate_transition(u16 oper_vlan, u16 admin_vlan)
1543{
1544 return (2 * (oper_vlan == MLX4_VGT) + (admin_vlan == MLX4_VGT));
1545}
1546
1547static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv, 1542static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
1548 int slave, int port) 1543 int slave, int port)
1549{ 1544{
@@ -1553,7 +1548,6 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
1553 struct mlx4_dev *dev = &(priv->dev); 1548 struct mlx4_dev *dev = &(priv->dev);
1554 int err; 1549 int err;
1555 int admin_vlan_ix = NO_INDX; 1550 int admin_vlan_ix = NO_INDX;
1556 enum mlx4_vlan_transition vlan_trans;
1557 1551
1558 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port]; 1552 vp_oper = &priv->mfunc.master.vf_oper[slave].vport[port];
1559 vp_admin = &priv->mfunc.master.vf_admin[slave].vport[port]; 1553 vp_admin = &priv->mfunc.master.vf_admin[slave].vport[port];
@@ -1563,12 +1557,8 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
1563 vp_oper->state.link_state == vp_admin->link_state) 1557 vp_oper->state.link_state == vp_admin->link_state)
1564 return 0; 1558 return 0;
1565 1559
1566 vlan_trans = calculate_transition(vp_oper->state.default_vlan,
1567 vp_admin->default_vlan);
1568
1569 if (!(priv->mfunc.master.slave_state[slave].active && 1560 if (!(priv->mfunc.master.slave_state[slave].active &&
1570 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_UPDATE_QP && 1561 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_UPDATE_QP)) {
1571 vlan_trans == MLX4_VLAN_TRANSITION_VST_VST)) {
1572 /* even if the UPDATE_QP command isn't supported, we still want 1562 /* even if the UPDATE_QP command isn't supported, we still want
1573 * to set this VF link according to the admin directive 1563 * to set this VF link according to the admin directive
1574 */ 1564 */
@@ -1586,15 +1576,19 @@ static int mlx4_master_immediate_activate_vlan_qos(struct mlx4_priv *priv,
1586 return -ENOMEM; 1576 return -ENOMEM;
1587 1577
1588 if (vp_oper->state.default_vlan != vp_admin->default_vlan) { 1578 if (vp_oper->state.default_vlan != vp_admin->default_vlan) {
1589 err = __mlx4_register_vlan(&priv->dev, port, 1579 if (MLX4_VGT != vp_admin->default_vlan) {
1590 vp_admin->default_vlan, 1580 err = __mlx4_register_vlan(&priv->dev, port,
1591 &admin_vlan_ix); 1581 vp_admin->default_vlan,
1592 if (err) { 1582 &admin_vlan_ix);
1593 kfree(work); 1583 if (err) {
1594 mlx4_warn((&priv->dev), 1584 kfree(work);
1595 "No vlan resources slave %d, port %d\n", 1585 mlx4_warn((&priv->dev),
1596 slave, port); 1586 "No vlan resources slave %d, port %d\n",
1597 return err; 1587 slave, port);
1588 return err;
1589 }
1590 } else {
1591 admin_vlan_ix = NO_INDX;
1598 } 1592 }
1599 work->flags |= MLX4_VF_IMMED_VLAN_FLAG_VLAN; 1593 work->flags |= MLX4_VF_IMMED_VLAN_FLAG_VLAN;
1600 mlx4_dbg((&(priv->dev)), 1594 mlx4_dbg((&(priv->dev)),