patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH v2 1/2] net/virtio: fix vDPA device init advertising control queue
       [not found] <20240313125932.1878279-1-maxime.coquelin@redhat.com>
@ 2024-03-13 12:59 ` Maxime Coquelin
  2024-03-13 14:12   ` David Marchand
  0 siblings, 1 reply; 2+ messages in thread
From: Maxime Coquelin @ 2024-03-13 12:59 UTC (permalink / raw)
  To: dev, david.marchand, chenbox, schalla; +Cc: Maxime Coquelin, stable

If the vDPA device advertises control queue support, but
the user neither passes "cq=1" as devarg nor requests
multiple queues, the initialization fails because the
driver tries to setup the control queue without negotiating
related feature.

This patch enables the control queue at driver level as
soon as the device claims to support it, and not only when
multiple queue pairs are requested. Also, enable the
control queue event if multiqueue feature has not been
negotiated and device start time, and disable it at device
stop time.

Fixes: b277308e8868 ("net/virtio-user: advertise control VQ support with vDPA")
Cc: stable@dpdk.org

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
 .../net/virtio/virtio_user/virtio_user_dev.c  | 22 ++++++++++++++-----
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c
index d395fc1676..54187fedf5 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
@@ -216,6 +216,12 @@ virtio_user_start_device(struct virtio_user_dev *dev)
 	if (ret < 0)
 		goto error;
 
+	if (dev->scvq) {
+		ret = dev->ops->cvq_enable(dev, 1);
+		if (ret < 0)
+			goto error;
+	}
+
 	dev->started = true;
 
 	pthread_mutex_unlock(&dev->mutex);
@@ -248,6 +254,12 @@ int virtio_user_stop_device(struct virtio_user_dev *dev)
 			goto err;
 	}
 
+	if (dev->scvq) {
+		ret = dev->ops->cvq_enable(dev, 0);
+		if (ret < 0)
+			goto err;
+	}
+
 	/* Stop the backend. */
 	for (i = 0; i < dev->max_queue_pairs * 2; ++i) {
 		state.index = i;
@@ -752,7 +764,7 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, uint16_t queues,
 	if (virtio_user_dev_init_max_queue_pairs(dev, queues))
 		dev->unsupported_features |= (1ull << VIRTIO_NET_F_MQ);
 
-	if (dev->max_queue_pairs > 1)
+	if (dev->max_queue_pairs > 1 || dev->hw_cvq)
 		cq = 1;
 
 	if (!mrg_rxbuf)
@@ -770,8 +782,9 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char *path, uint16_t queues,
 		dev->unsupported_features |= (1ull << VIRTIO_NET_F_MAC);
 
 	if (cq) {
-		/* device does not really need to know anything about CQ,
-		 * so if necessary, we just claim to support CQ
+		/* Except for vDPA, the device does not really need to know
+		 * anything about CQ, so if necessary, we just claim to support
+		 * control queue.
 		 */
 		dev->frontend_features |= (1ull << VIRTIO_NET_F_CTRL_VQ);
 	} else {
@@ -871,9 +884,6 @@ virtio_user_handle_mq(struct virtio_user_dev *dev, uint16_t q_pairs)
 	for (i = q_pairs; i < dev->max_queue_pairs; ++i)
 		ret |= dev->ops->enable_qp(dev, i, 0);
 
-	if (dev->scvq)
-		ret |= dev->ops->cvq_enable(dev, 1);
-
 	dev->queue_pairs = q_pairs;
 
 	return ret;
-- 
2.44.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH v2 1/2] net/virtio: fix vDPA device init advertising control queue
  2024-03-13 12:59 ` [PATCH v2 1/2] net/virtio: fix vDPA device init advertising control queue Maxime Coquelin
@ 2024-03-13 14:12   ` David Marchand
  0 siblings, 0 replies; 2+ messages in thread
From: David Marchand @ 2024-03-13 14:12 UTC (permalink / raw)
  To: Maxime Coquelin; +Cc: dev, chenbox, schalla, stable

On Wed, Mar 13, 2024 at 1:59 PM Maxime Coquelin
<maxime.coquelin@redhat.com> wrote:
>
> If the vDPA device advertises control queue support, but
> the user neither passes "cq=1" as devarg nor requests
> multiple queues, the initialization fails because the
> driver tries to setup the control queue without negotiating
> related feature.
>
> This patch enables the control queue at driver level as
> soon as the device claims to support it, and not only when
> multiple queue pairs are requested. Also, enable the
> control queue event if multiqueue feature has not been
> negotiated and device start time, and disable it at device
> stop time.
>
> Fixes: b277308e8868 ("net/virtio-user: advertise control VQ support with vDPA")
> Cc: stable@dpdk.org
>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Reviewed-by: David Marchand <david.marchand@redhat.com>


-- 
David Marchand


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-03-13 14:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20240313125932.1878279-1-maxime.coquelin@redhat.com>
2024-03-13 12:59 ` [PATCH v2 1/2] net/virtio: fix vDPA device init advertising control queue Maxime Coquelin
2024-03-13 14:12   ` David Marchand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).