Thread (69 messages) 69 messages, 3 authors, 2026-02-16
STALE118d

[PATCH net-next v7 7/9] vhost-net: vhost-net: replace rx_ring with tun/tap ring wrappers

From: Simon Schippers <hidden>
Date: 2026-01-09 09:57:26
Also in: kvm, lkml, virtualization

On 1/9/26 07:04, Jason Wang wrote:
On Thu, Jan 8, 2026 at 3:48 PM Simon Schippers
[off-list ref] wrote:
quoted
On 1/8/26 05:38, Jason Wang wrote:
quoted
On Thu, Jan 8, 2026 at 5:06 AM Simon Schippers
[off-list ref] wrote:
quoted
Replace the direct use of ptr_ring in the vhost-net virtqueue with
tun/tap ring wrapper helpers. Instead of storing an rx_ring pointer,
the virtqueue now stores the interface type (IF_TUN, IF_TAP, or IF_NONE)
and dispatches to the corresponding tun/tap helpers for ring
produce, consume, and unconsume operations.

Routing ring operations through the tun/tap helpers enables netdev
queue wakeups, which are required for upcoming netdev queue flow
control support shared by tun/tap and vhost-net.

No functional change is intended beyond switching to the wrapper
helpers.

Co-developed-by: Tim Gebauer <redacted>
Signed-off-by: Tim Gebauer <redacted>
Co-developed by: Jon Kohler [off-list ref]
Signed-off-by: Jon Kohler <redacted>
Signed-off-by: Simon Schippers <redacted>
---
 drivers/vhost/net.c | 92 +++++++++++++++++++++++++++++----------------
 1 file changed, 60 insertions(+), 32 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 7f886d3dba7d..215556f7cd40 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -90,6 +90,12 @@ enum {
        VHOST_NET_VQ_MAX = 2,
 };

+enum if_type {
+       IF_NONE = 0,
+       IF_TUN = 1,
+       IF_TAP = 2,
+};
This looks not elegant, can we simply export objects we want to use to
vhost like get_tap_socket()?
No, we cannot do that. We would need access to both the ptr_ring and the
net_device. However, the net_device is protected by an RCU lock.

That is why {tun,tap}_ring_consume_batched() are used:
they take the appropriate locks and handle waking the queue.
How about introducing a callback in the ptr_ring itself, so vhost_net
only need to know about the ptr_ring?
That would be great, but I'm not sure whether this should be the
responsibility of the ptr_ring.

If the ptr_ring were to keep track of the netdev queue, it could handle
all the management itself - stopping the queue when full and waking it
again once space becomes available.

What would be your idea for implementing this?
Thanks
quoted
quoted
Thanks
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help