net/mlx5_core: Call synchronize_irq() before freeing EQ buffer
After destroying the EQ, the object responsible for generating interrupts, call synchronize_irq() to ensure that any handler routines running on other CPU cores finish execution. Only then free the EQ buffer. This patch solves a very rare case when we get panic on driver unload. The same thing is done when we destroy a CQ which is one of the sources generating interrupts. In the case of CQ we want to avoid completion handlers on a CQ that was destroyed. In the case we do the same to avoid receiving asynchronous events after the EQ has been destroyed and its buffers freed. Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
b71e821de5
Коммит
96e4be06cb
|
@ -420,6 +420,7 @@ int mlx5_destroy_unmap_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
|
||||||
if (err)
|
if (err)
|
||||||
mlx5_core_warn(dev, "failed to destroy a previously created eq: eqn %d\n",
|
mlx5_core_warn(dev, "failed to destroy a previously created eq: eqn %d\n",
|
||||||
eq->eqn);
|
eq->eqn);
|
||||||
|
synchronize_irq(table->msix_arr[eq->irqn].vector);
|
||||||
mlx5_buf_free(dev, &eq->buf);
|
mlx5_buf_free(dev, &eq->buf);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче