]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/zcrx: don't pass slot to io_zcrx_create_area
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 16 Sep 2025 14:27:48 +0000 (15:27 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 16 Sep 2025 18:37:20 +0000 (12:37 -0600)
Don't pass a pointer to a pointer where an area should be stored to
io_zcrx_create_area(), and let it handle finding the right place for a
new area. It's more straightforward and will be needed to support
multiple areas.

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

index 7a46e6fc2ee7c0278e6619f5ec07a9a334a1a072..c64b8c7ddedf5dfba034446986db827412f4574f 100644 (file)
@@ -397,8 +397,16 @@ static void io_zcrx_free_area(struct io_zcrx_area *area)
 
 #define IO_ZCRX_AREA_SUPPORTED_FLAGS   (IORING_ZCRX_AREA_DMABUF)
 
+static int io_zcrx_append_area(struct io_zcrx_ifq *ifq,
+                               struct io_zcrx_area *area)
+{
+       if (ifq->area)
+               return -EINVAL;
+       ifq->area = area;
+       return 0;
+}
+
 static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
-                              struct io_zcrx_area **res,
                               struct io_uring_zcrx_area_reg *area_reg)
 {
        struct io_zcrx_area *area;
@@ -455,8 +463,10 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq,
        area->area_id = 0;
        area_reg->rq_area_token = (u64)area->area_id << IORING_ZCRX_AREA_SHIFT;
        spin_lock_init(&area->freelist_lock);
-       *res = area;
-       return 0;
+
+       ret = io_zcrx_append_area(ifq, area);
+       if (!ret)
+               return 0;
 err:
        if (area)
                io_zcrx_free_area(area);
@@ -610,7 +620,7 @@ int io_register_zcrx_ifq(struct io_ring_ctx *ctx,
        }
        get_device(ifq->dev);
 
-       ret = io_zcrx_create_area(ifq, &ifq->area, &area);
+       ret = io_zcrx_create_area(ifq, &area);
        if (ret)
                goto err;