aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx4/cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/cmd.c')
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index c19e74e6ac94..a5d5d6fc1da0 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -2645,6 +2645,8 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
2645 if (!priv->cmd.context) 2645 if (!priv->cmd.context)
2646 return -ENOMEM; 2646 return -ENOMEM;
2647 2647
2648 if (mlx4_is_mfunc(dev))
2649 mutex_lock(&priv->cmd.slave_cmd_mutex);
2648 down_write(&priv->cmd.switch_sem); 2650 down_write(&priv->cmd.switch_sem);
2649 for (i = 0; i < priv->cmd.max_cmds; ++i) { 2651 for (i = 0; i < priv->cmd.max_cmds; ++i) {
2650 priv->cmd.context[i].token = i; 2652 priv->cmd.context[i].token = i;
@@ -2670,6 +2672,8 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
2670 down(&priv->cmd.poll_sem); 2672 down(&priv->cmd.poll_sem);
2671 priv->cmd.use_events = 1; 2673 priv->cmd.use_events = 1;
2672 up_write(&priv->cmd.switch_sem); 2674 up_write(&priv->cmd.switch_sem);
2675 if (mlx4_is_mfunc(dev))
2676 mutex_unlock(&priv->cmd.slave_cmd_mutex);
2673 2677
2674 return err; 2678 return err;
2675} 2679}
@@ -2682,6 +2686,8 @@ void mlx4_cmd_use_polling(struct mlx4_dev *dev)
2682 struct mlx4_priv *priv = mlx4_priv(dev); 2686 struct mlx4_priv *priv = mlx4_priv(dev);
2683 int i; 2687 int i;
2684 2688
2689 if (mlx4_is_mfunc(dev))
2690 mutex_lock(&priv->cmd.slave_cmd_mutex);
2685 down_write(&priv->cmd.switch_sem); 2691 down_write(&priv->cmd.switch_sem);
2686 priv->cmd.use_events = 0; 2692 priv->cmd.use_events = 0;
2687 2693
@@ -2689,9 +2695,12 @@ void mlx4_cmd_use_polling(struct mlx4_dev *dev)
2689 down(&priv->cmd.event_sem); 2695 down(&priv->cmd.event_sem);
2690 2696
2691 kfree(priv->cmd.context); 2697 kfree(priv->cmd.context);
2698 priv->cmd.context = NULL;
2692 2699
2693 up(&priv->cmd.poll_sem); 2700 up(&priv->cmd.poll_sem);
2694 up_write(&priv->cmd.switch_sem); 2701 up_write(&priv->cmd.switch_sem);
2702 if (mlx4_is_mfunc(dev))
2703 mutex_unlock(&priv->cmd.slave_cmd_mutex);
2695} 2704}
2696 2705
2697struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev) 2706struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev)