[PATCH vhost 11/23] vdpa/mlx5: Set an initial size on the VQ

From: Dragos Tatulea
Date: Mon Jun 17 2024 - 11:36:14 EST


The virtqueue size is a pre-requisite for setting up any virtqueue
resources. For the upcoming optimization of creating virtqueues at
device add, the virtqueue size has to be configured.

Store the default queue size in struct mlx5_vdpa_net to make it easy in
the future to pre-configure this default value via vdpa tool.

The queue size check in setup_vq() will always be false. So remove it.

Signed-off-by: Dragos Tatulea <dtatulea@xxxxxxxxxx>
Reviewed-by: Cosmin Ratiu <cratiu@xxxxxxxxxx>
---
drivers/vdpa/mlx5/net/mlx5_vnet.c | 7 ++++---
drivers/vdpa/mlx5/net/mlx5_vnet.h | 1 +
2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c
index 245b5dac98d3..1181e0ac3671 100644
--- a/drivers/vdpa/mlx5/net/mlx5_vnet.c
+++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c
@@ -58,6 +58,8 @@ MODULE_LICENSE("Dual BSD/GPL");
*/
#define MLX5V_DEFAULT_VQ_COUNT 2

+#define MLX5V_DEFAULT_VQ_SIZE 256
+
struct mlx5_vdpa_cq_buf {
struct mlx5_frag_buf_ctrl fbc;
struct mlx5_frag_buf frag_buf;
@@ -1445,9 +1447,6 @@ static int setup_vq(struct mlx5_vdpa_net *ndev, struct mlx5_vdpa_virtqueue *mvq)
u16 idx = mvq->index;
int err;

- if (!mvq->num_ent)
- return 0;
-
if (mvq->initialized)
return 0;

@@ -3523,6 +3522,7 @@ static void init_mvqs(struct mlx5_vdpa_net *ndev)
mvq->ndev = ndev;
mvq->fwqp.fw = true;
mvq->fw_state = MLX5_VIRTIO_NET_Q_OBJECT_NONE;
+ mvq->num_ent = ndev->default_queue_size;
}
}

@@ -3660,6 +3660,7 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name,
goto err_alloc;
}
ndev->cur_num_vqs = MLX5V_DEFAULT_VQ_COUNT;
+ ndev->default_queue_size = MLX5V_DEFAULT_VQ_SIZE;

init_mvqs(ndev);
allocate_irqs(ndev);
diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.h b/drivers/vdpa/mlx5/net/mlx5_vnet.h
index 90b556a57971..2ada29767cc5 100644
--- a/drivers/vdpa/mlx5/net/mlx5_vnet.h
+++ b/drivers/vdpa/mlx5/net/mlx5_vnet.h
@@ -58,6 +58,7 @@ struct mlx5_vdpa_net {
bool setup;
u32 cur_num_vqs;
u32 rqt_size;
+ u16 default_queue_size;
bool nb_registered;
struct notifier_block nb;
struct vdpa_callback config_cb;

--
2.45.1