|
|
@@ -2645,6 +2645,8 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
|
|
|
if (!priv->cmd.context)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ if (mlx4_is_mfunc(dev))
|
|
|
+ mutex_lock(&priv->cmd.slave_cmd_mutex);
|
|
|
down_write(&priv->cmd.switch_sem);
|
|
|
for (i = 0; i < priv->cmd.max_cmds; ++i) {
|
|
|
priv->cmd.context[i].token = i;
|
|
|
@@ -2670,6 +2672,8 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
|
|
|
down(&priv->cmd.poll_sem);
|
|
|
priv->cmd.use_events = 1;
|
|
|
up_write(&priv->cmd.switch_sem);
|
|
|
+ if (mlx4_is_mfunc(dev))
|
|
|
+ mutex_unlock(&priv->cmd.slave_cmd_mutex);
|
|
|
|
|
|
return err;
|
|
|
}
|
|
|
@@ -2682,6 +2686,8 @@ void mlx4_cmd_use_polling(struct mlx4_dev *dev)
|
|
|
struct mlx4_priv *priv = mlx4_priv(dev);
|
|
|
int i;
|
|
|
|
|
|
+ if (mlx4_is_mfunc(dev))
|
|
|
+ mutex_lock(&priv->cmd.slave_cmd_mutex);
|
|
|
down_write(&priv->cmd.switch_sem);
|
|
|
priv->cmd.use_events = 0;
|
|
|
|
|
|
@@ -2693,6 +2699,8 @@ void mlx4_cmd_use_polling(struct mlx4_dev *dev)
|
|
|
|
|
|
up(&priv->cmd.poll_sem);
|
|
|
up_write(&priv->cmd.switch_sem);
|
|
|
+ if (mlx4_is_mfunc(dev))
|
|
|
+ mutex_unlock(&priv->cmd.slave_cmd_mutex);
|
|
|
}
|
|
|
|
|
|
struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev)
|