]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/zcrx: protect netdev with pp_lock
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 16 Sep 2025 14:27:57 +0000 (15:27 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 16 Sep 2025 18:37:20 +0000 (12:37 -0600)
Remove ifq->lock and reuse pp_lock to protect the netdev pointer.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/zcrx.c
io_uring/zcrx.h

index 0deb41b74b7c3b68d488fd7a3bb55d1f0d4c7021..6a5b6f32edc32a4cd262ace94da55f09ebba9733 100644 (file)
@@ -476,7 +476,6 @@ static struct io_zcrx_ifq *io_zcrx_ifq_alloc(struct io_ring_ctx *ctx)
 
        ifq->if_rxq = -1;
        ifq->ctx = ctx;
-       spin_lock_init(&ifq->lock);
        spin_lock_init(&ifq->rq_lock);
        mutex_init(&ifq->pp_lock);
        return ifq;
@@ -484,12 +483,12 @@ static struct io_zcrx_ifq *io_zcrx_ifq_alloc(struct io_ring_ctx *ctx)
 
 static void io_zcrx_drop_netdev(struct io_zcrx_ifq *ifq)
 {
-       spin_lock(&ifq->lock);
-       if (ifq->netdev) {
-               netdev_put(ifq->netdev, &ifq->netdev_tracker);
-               ifq->netdev = NULL;
-       }
-       spin_unlock(&ifq->lock);
+       guard(mutex)(&ifq->pp_lock);
+
+       if (!ifq->netdev)
+               return;
+       netdev_put(ifq->netdev, &ifq->netdev_tracker);
+       ifq->netdev = NULL;
 }
 
 static void io_close_queue(struct io_zcrx_ifq *ifq)
@@ -504,11 +503,11 @@ static void io_close_queue(struct io_zcrx_ifq *ifq)
        if (ifq->if_rxq == -1)
                return;
 
-       spin_lock(&ifq->lock);
-       netdev = ifq->netdev;
-       netdev_tracker = ifq->netdev_tracker;
-       ifq->netdev = NULL;
-       spin_unlock(&ifq->lock);
+       scoped_guard(mutex, &ifq->pp_lock) {
+               netdev = ifq->netdev;
+               netdev_tracker = ifq->netdev_tracker;
+               ifq->netdev = NULL;
+       }
 
        if (netdev) {
                net_mp_close_rxq(netdev, ifq->if_rxq, &p);
index 3f89a34e52825bdaac903f9db022ab608a7a5669..a48871b5adad2dfe11ff788ac56d94760758e799 100644 (file)
@@ -53,7 +53,6 @@ struct io_zcrx_ifq {
        struct device                   *dev;
        struct net_device               *netdev;
        netdevice_tracker               netdev_tracker;
-       spinlock_t                      lock;
 
        /*
         * Page pool and net configuration lock, can be taken deeper in the