On Thu, Jan 8, 2026 at 3:48 PM Simon Schippers <[email protected]> wrote: > > On 1/8/26 05:38, Jason Wang wrote: > > On Thu, Jan 8, 2026 at 5:06 AM Simon Schippers > > <[email protected]> wrote: > >> > >> 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 <[email protected]> > >> Signed-off-by: Tim Gebauer <[email protected]> > >> Co-developed by: Jon Kohler <[email protected]> > >> Signed-off-by: Jon Kohler <[email protected]> > >> Signed-off-by: Simon Schippers <[email protected]> > >> --- > >> 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? Thanks > > > > > Thanks > > >

