NACK: [SRU][FOCAL][PATCH 1/1] net/mlx5: Fix a race when moving command interface to polling mode
William Breathitt Gray
william.gray at canonical.com
Tue Jan 19 16:04:11 UTC 2021
On Tue, Jan 19, 2021 at 11:00:15AM -0500, William Breathitt Gray wrote:
> From: Eran Ben Elisha <eranbe at mellanox.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1905574
>
> As part of driver unload, it destroys the commands EQ (via FW command).
> As the commands EQ is destroyed, FW will not generate EQEs for any command
> that driver sends afterwards. Driver should poll for later commands status.
>
> Driver commands mode metadata is updated before the commands EQ is
> actually destroyed. This can lead for double completion handle by the
> driver (polling and interrupt), if a command is executed and completed by
> FW after the mode was changed, but before the EQ was destroyed.
>
> Fix that by using the mlx5_cmd_allowed_opcode mechanism to guarantee
> that only DESTROY_EQ command can be executed during this time period.
>
> Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
> Signed-off-by: Eran Ben Elisha <eranbe at mellanox.com>
> Reviewed-by: Moshe Shemesh <moshe at mellanox.com>
> Signed-off-by: Saeed Mahameed <saeedm at nvidia.com>
> (cherry-picked from commit 432161ea26d6d5e5c3f7306d9407d26ed1e1953e)
Cherry pick line has a typo.
Nacked-by: William Breathitt Gray <william.gray at canonical.com>
> Signed-off-by: William Breathitt Gray <william.gray at canonical.com>
> ---
> drivers/net/ethernet/mellanox/mlx5/core/eq.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> index 0a20938b4aad..938c4a46f9de 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> @@ -695,8 +695,10 @@ static void destroy_async_eqs(struct mlx5_core_dev *dev)
>
> cleanup_async_eq(dev, &table->pages_eq, "pages");
> cleanup_async_eq(dev, &table->async_eq, "async");
> + mlx5_cmd_allowed_opcode(dev, MLX5_CMD_OP_DESTROY_EQ);
> mlx5_cmd_use_polling(dev);
> cleanup_async_eq(dev, &table->cmd_eq, "cmd");
> + mlx5_cmd_allowed_opcode(dev, CMD_ALLOWED_OPCODE_ALL);
> mlx5_eq_notifier_unregister(dev, &table->cq_err_nb);
> }
>
> --
> 2.27.0
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20210119/a8d408d3/attachment.sig>
More information about the kernel-team
mailing list