aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/cmd.c
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2013-01-29 04:48:30 -0500
committerJiri Kosina <jkosina@suse.cz>2013-01-29 04:48:30 -0500
commit617677295b53a40d0e54aac4cbbc216ffbc755dd (patch)
tree51b9e87213243ed5efff252c8e8d8fec4eebc588 /drivers/net/ethernet/mellanox/mlx4/cmd.c
parent5c8d1b68e01a144813e38795fe6dbe7ebb506131 (diff)
parent6abb7c25775b7fb2225ad0508236d63ca710e65f (diff)
Merge branch 'master' into for-next
Conflicts: drivers/devfreq/exynos4_bus.c Sync with Linus' tree to be able to apply patches that are against newer code (mvneta).
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/cmd.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index 3d1899ff1076..fdc5f23d8e9f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -1498,6 +1498,7 @@ static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
1498 u32 reply; 1498 u32 reply;
1499 u8 is_going_down = 0; 1499 u8 is_going_down = 0;
1500 int i; 1500 int i;
1501 unsigned long flags;
1501 1502
1502 slave_state[slave].comm_toggle ^= 1; 1503 slave_state[slave].comm_toggle ^= 1;
1503 reply = (u32) slave_state[slave].comm_toggle << 31; 1504 reply = (u32) slave_state[slave].comm_toggle << 31;
@@ -1576,12 +1577,12 @@ static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
1576 mlx4_warn(dev, "Bad comm cmd:%d from slave:%d\n", cmd, slave); 1577 mlx4_warn(dev, "Bad comm cmd:%d from slave:%d\n", cmd, slave);
1577 goto reset_slave; 1578 goto reset_slave;
1578 } 1579 }
1579 spin_lock(&priv->mfunc.master.slave_state_lock); 1580 spin_lock_irqsave(&priv->mfunc.master.slave_state_lock, flags);
1580 if (!slave_state[slave].is_slave_going_down) 1581 if (!slave_state[slave].is_slave_going_down)
1581 slave_state[slave].last_cmd = cmd; 1582 slave_state[slave].last_cmd = cmd;
1582 else 1583 else
1583 is_going_down = 1; 1584 is_going_down = 1;
1584 spin_unlock(&priv->mfunc.master.slave_state_lock); 1585 spin_unlock_irqrestore(&priv->mfunc.master.slave_state_lock, flags);
1585 if (is_going_down) { 1586 if (is_going_down) {
1586 mlx4_warn(dev, "Slave is going down aborting command(%d)" 1587 mlx4_warn(dev, "Slave is going down aborting command(%d)"
1587 " executing from slave:%d\n", 1588 " executing from slave:%d\n",
@@ -1597,10 +1598,10 @@ static void mlx4_master_do_cmd(struct mlx4_dev *dev, int slave, u8 cmd,
1597reset_slave: 1598reset_slave:
1598 /* cleanup any slave resources */ 1599 /* cleanup any slave resources */
1599 mlx4_delete_all_resources_for_slave(dev, slave); 1600 mlx4_delete_all_resources_for_slave(dev, slave);
1600 spin_lock(&priv->mfunc.master.slave_state_lock); 1601 spin_lock_irqsave(&priv->mfunc.master.slave_state_lock, flags);
1601 if (!slave_state[slave].is_slave_going_down) 1602 if (!slave_state[slave].is_slave_going_down)
1602 slave_state[slave].last_cmd = MLX4_COMM_CMD_RESET; 1603 slave_state[slave].last_cmd = MLX4_COMM_CMD_RESET;
1603 spin_unlock(&priv->mfunc.master.slave_state_lock); 1604 spin_unlock_irqrestore(&priv->mfunc.master.slave_state_lock, flags);
1604 /*with slave in the middle of flr, no need to clean resources again.*/ 1605 /*with slave in the middle of flr, no need to clean resources again.*/
1605inform_slave_state: 1606inform_slave_state:
1606 memset(&slave_state[slave].event_eq, 0, 1607 memset(&slave_state[slave].event_eq, 0,
@@ -1755,7 +1756,7 @@ int mlx4_multi_func_init(struct mlx4_dev *dev)
1755 spin_lock_init(&s_state->lock); 1756 spin_lock_init(&s_state->lock);
1756 } 1757 }
1757 1758
1758 memset(&priv->mfunc.master.cmd_eqe, 0, sizeof(struct mlx4_eqe)); 1759 memset(&priv->mfunc.master.cmd_eqe, 0, dev->caps.eqe_size);
1759 priv->mfunc.master.cmd_eqe.type = MLX4_EVENT_TYPE_CMD; 1760 priv->mfunc.master.cmd_eqe.type = MLX4_EVENT_TYPE_CMD;
1760 INIT_WORK(&priv->mfunc.master.comm_work, 1761 INIT_WORK(&priv->mfunc.master.comm_work,
1761 mlx4_master_comm_channel); 1762 mlx4_master_comm_channel);