]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "vhost-net: wake queue of tun/tap after ptr_ring consume"
authorSimon Schippers <simon.schippers@tu-dortmund.de>
Tue, 28 Jul 2026 09:22:39 +0000 (11:22 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 30 Jul 2026 00:12:27 +0000 (17:12 -0700)
This reverts commit baf808fe4fcd35767ab732b4ab2ea80dabfd97a6.

There is no netdev queue left to wake after reverting
commit 1d6e569b7d0c ("tun/tap & vhost-net: avoid ptr_ring tail-drop
when a qdisc is present").

Signed-off-by: Simon Schippers <simon.schippers@tu-dortmund.de>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://patch.msgid.link/20260728092240.250257-4-simon.schippers@tu-dortmund.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/tun.c
drivers/vhost/net.c
include/linux/if_tun.h

index ec5573f545af6128fe53e51f107e29c362a93923..39abc3078097c2c60264f8c84b24a1c02f5a0619 100644 (file)
@@ -3787,29 +3787,6 @@ struct ptr_ring *tun_get_tx_ring(struct file *file)
 }
 EXPORT_SYMBOL_GPL(tun_get_tx_ring);
 
-/* Callers must hold ring.consumer_lock */
-void tun_wake_queue(struct file *file, int consumed)
-{
-       struct tun_file *tfile;
-       struct tun_struct *tun;
-
-       if (file->f_op != &tun_fops)
-               return;
-
-       tfile = file->private_data;
-       if (!tfile)
-               return;
-
-       rcu_read_lock();
-
-       tun = rcu_dereference(tfile->tun);
-       if (tun)
-               __tun_wake_queue(tun, tfile, consumed);
-
-       rcu_read_unlock();
-}
-EXPORT_SYMBOL_GPL(tun_wake_queue);
-
 module_init(tun_init);
 module_exit(tun_cleanup);
 MODULE_DESCRIPTION(DRV_DESCRIPTION);
index 3e72b9c6af0ca4aab74add2dcfa72c903f84e67a..6949b704166d58b9eb8a4fafaf87f22592dd42e9 100644 (file)
@@ -176,21 +176,13 @@ static void *vhost_net_buf_consume(struct vhost_net_buf *rxq)
        return ret;
 }
 
-static int vhost_net_buf_produce(struct sock *sk,
-                                struct vhost_net_virtqueue *nvq)
+static int vhost_net_buf_produce(struct vhost_net_virtqueue *nvq)
 {
-       struct file *file = sk->sk_socket->file;
        struct vhost_net_buf *rxq = &nvq->rxq;
 
        rxq->head = 0;
-       spin_lock(&nvq->rx_ring->consumer_lock);
-       rxq->tail = __ptr_ring_consume_batched(nvq->rx_ring, rxq->queue,
-                                              VHOST_NET_BATCH);
-
-       if (rxq->tail)
-               tun_wake_queue(file, rxq->tail);
-
-       spin_unlock(&nvq->rx_ring->consumer_lock);
+       rxq->tail = ptr_ring_consume_batched(nvq->rx_ring, rxq->queue,
+                                             VHOST_NET_BATCH);
        return rxq->tail;
 }
 
@@ -217,15 +209,14 @@ static int vhost_net_buf_peek_len(void *ptr)
        return __skb_array_len_with_tag(ptr);
 }
 
-static int vhost_net_buf_peek(struct sock *sk,
-                             struct vhost_net_virtqueue *nvq)
+static int vhost_net_buf_peek(struct vhost_net_virtqueue *nvq)
 {
        struct vhost_net_buf *rxq = &nvq->rxq;
 
        if (!vhost_net_buf_is_empty(rxq))
                goto out;
 
-       if (!vhost_net_buf_produce(sk, nvq))
+       if (!vhost_net_buf_produce(nvq))
                return 0;
 
 out:
@@ -1013,7 +1004,7 @@ static int peek_head_len(struct vhost_net_virtqueue *rvq, struct sock *sk)
        unsigned long flags;
 
        if (rvq->rx_ring)
-               return vhost_net_buf_peek(sk, rvq);
+               return vhost_net_buf_peek(rvq);
 
        spin_lock_irqsave(&sk->sk_receive_queue.lock, flags);
        head = skb_peek(&sk->sk_receive_queue);
index 5f3e206c7a737584a7014c33b0f52354e128dc0a..80166eb62f41c7a04d63c11c02df4e5ab20120a6 100644 (file)
@@ -22,7 +22,6 @@ struct tun_msg_ctl {
 #if defined(CONFIG_TUN) || defined(CONFIG_TUN_MODULE)
 struct socket *tun_get_socket(struct file *);
 struct ptr_ring *tun_get_tx_ring(struct file *file);
-void tun_wake_queue(struct file *file, int consumed);
 
 static inline bool tun_is_xdp_frame(void *ptr)
 {
@@ -56,8 +55,6 @@ static inline struct ptr_ring *tun_get_tx_ring(struct file *f)
        return ERR_PTR(-EINVAL);
 }
 
-static inline void tun_wake_queue(struct file *f, int consumed) {}
-
 static inline bool tun_is_xdp_frame(void *ptr)
 {
        return false;