Hi Xueming,

On 9/23/21 10:17, Xueming Li wrote:
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.

Signed-off-by: Xueming Li <xuemi...@nvidia.com>
Reviewed-by: Matan Azrad <ma...@nvidia.com>
---
  drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c 
b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
index f530646058..71470d23d9 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c
@@ -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;


Maybe this patch should be backported to stable branch?
If so, could you reply with the Fixes tag so that I can add it while
applying?

Thanks,
Maxime

Reply via email to