Skip to content

Commit

Permalink
vdpa/mlx5: fix interrupt trash that leads to crash
Browse files Browse the repository at this point in the history
Disable interrupt unregister timeout to avoid invalid FD caused
interrupt thread segment fault.

Fixes: 62c8137 ("vdpa/mlx5: map doorbell")
Cc: stable@dpdk.org

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
  • Loading branch information
steevenlee authored and mcoquelin committed May 9, 2022
1 parent c573699 commit 66a439c
Showing 1 changed file with 8 additions and 12 deletions.
20 changes: 8 additions & 12 deletions drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
Expand Up @@ -17,7 +17,7 @@


static void
mlx5_vdpa_virtq_handler(void *cb_arg)
mlx5_vdpa_virtq_kick_handler(void *cb_arg)
{
struct mlx5_vdpa_virtq *virtq = cb_arg;
struct mlx5_vdpa_priv *priv = virtq->priv;
Expand Down Expand Up @@ -59,20 +59,16 @@ static int
mlx5_vdpa_virtq_unset(struct mlx5_vdpa_virtq *virtq)
{
unsigned int i;
int retries = MLX5_VDPA_INTR_RETRIES;
int ret = -EAGAIN;

if (rte_intr_fd_get(virtq->intr_handle) != -1) {
while (retries-- && ret == -EAGAIN) {
if (rte_intr_fd_get(virtq->intr_handle) >= 0) {
while (ret == -EAGAIN) {
ret = rte_intr_callback_unregister(virtq->intr_handle,
mlx5_vdpa_virtq_handler,
virtq);
mlx5_vdpa_virtq_kick_handler, virtq);
if (ret == -EAGAIN) {
DRV_LOG(DEBUG, "Try again to unregister fd %d "
"of virtq %d interrupt, retries = %d.",
rte_intr_fd_get(virtq->intr_handle),
(int)virtq->index, retries);

DRV_LOG(DEBUG, "Try again to unregister fd %d of virtq %hu interrupt",
rte_intr_fd_get(virtq->intr_handle),
virtq->index);
usleep(MLX5_VDPA_INTR_RETRIES_USEC);
}
}
Expand Down Expand Up @@ -359,7 +355,7 @@ mlx5_vdpa_virtq_setup(struct mlx5_vdpa_priv *priv, int index)
goto error;

if (rte_intr_callback_register(virtq->intr_handle,
mlx5_vdpa_virtq_handler,
mlx5_vdpa_virtq_kick_handler,
virtq)) {
rte_intr_fd_set(virtq->intr_handle, -1);
DRV_LOG(ERR, "Failed to register virtq %d interrupt.",
Expand Down

0 comments on commit 66a439c

Please sign in to comment.