diff options
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/cmd.c')
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/cmd.c | 9 |
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 | ||
| 2697 | struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev) | 2706 | struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev) |
