io_uring/zcrx: don't pass slot to io_zcrx_create_area

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>
pull/1354/merge
Pavel Begunkov 2025-09-16 15:27:48 +01:00 committed by Jens Axboe
parent c49606fc4b
commit d425f13146
1 changed files with 14 additions and 4 deletions

View 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;