]> git.droids-corp.org - dpdk.git/commitdiff
vdpa/mlx5: workaround FW first completion in start
authorXueming Li <xuemingl@nvidia.com>
Fri, 15 Oct 2021 15:05:44 +0000 (23:05 +0800)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Thu, 21 Oct 2021 12:24:21 +0000 (14:24 +0200)
After a vDPA application restart, Qemu restores VQ with used and
available index, new incoming packet triggers virtio driver to
handle buffers. Under heavy traffic, no available buffer for
firmware to receive new packets, no Rx interrupts generated,
driver is stuck on endless interrupt waiting.

As a firmware workaround, this patch sends a notification after
VQ setup to ask driver handling buffers and filling new buffers.

Fixes: bff735011078 ("vdpa/mlx5: prepare virtio queues")
Cc: stable@dpdk.org
Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Matan Azrad <matan@nvidia.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
drivers/vdpa/mlx5/mlx5_vdpa_virtq.c

index cfd50d92f5a86129826fa90d6746adb6d833c27b..c5b357a83bc96dc75c87a56ec7a084d2d58f0f54 100644 (file)
@@ -4,6 +4,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/mman.h>
+#include <sys/eventfd.h>
 
 #include <rte_malloc.h>
 #include <rte_errno.h>
@@ -367,6 +368,9 @@ mlx5_vdpa_virtq_setup(struct mlx5_vdpa_priv *priv, int index)
                goto error;
        }
        virtq->stopped = false;
+       /* Initial notification to ask Qemu handling completed buffers. */
+       if (virtq->eqp.cq.callfd != -1)
+               eventfd_write(virtq->eqp.cq.callfd, (eventfd_t)1);
        DRV_LOG(DEBUG, "vid %u virtq %u was created successfully.", priv->vid,
                index);
        return 0;