mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
io_uring/zcrx: cache fallback availability in zcrx ctx
Store a flag in struct io_zcrx_ifq telling if the backing memory is normal page or dmabuf based. It was looking it up from the area, however it logically allocates from the zcrx ctx and not a particular area, and once we add more than one area it'll become a mess. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://patch.msgid.link/65e75408a7758fe7e60fae89b7a8d5ae4857f515.1774261953.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
f0b92207a0
commit
5c727ce042
|
|
@ -423,8 +423,13 @@ static void io_zcrx_free_area(struct io_zcrx_ifq *ifq,
|
|||
static int io_zcrx_append_area(struct io_zcrx_ifq *ifq,
|
||||
struct io_zcrx_area *area)
|
||||
{
|
||||
bool kern_readable = !area->mem.is_dmabuf;
|
||||
|
||||
if (WARN_ON_ONCE(ifq->area))
|
||||
return -EINVAL;
|
||||
if (WARN_ON_ONCE(ifq->kern_readable != kern_readable))
|
||||
return -EINVAL;
|
||||
|
||||
ifq->area = area;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -882,6 +887,8 @@ int io_register_zcrx_ifq(struct io_ring_ctx *ctx,
|
|||
if (ret)
|
||||
goto err;
|
||||
|
||||
ifq->kern_readable = !(area.flags & IORING_ZCRX_AREA_DMABUF);
|
||||
|
||||
if (!(reg.flags & ZCRX_REG_NODEV)) {
|
||||
ret = zcrx_register_netdev(ifq, ®, &area);
|
||||
if (ret)
|
||||
|
|
@ -1298,7 +1305,7 @@ static struct net_iov *io_alloc_fallback_niov(struct io_zcrx_ifq *ifq)
|
|||
struct io_zcrx_area *area = ifq->area;
|
||||
struct net_iov *niov = NULL;
|
||||
|
||||
if (area->mem.is_dmabuf)
|
||||
if (!ifq->kern_readable)
|
||||
return NULL;
|
||||
|
||||
scoped_guard(spinlock_bh, &area->freelist_lock)
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct io_zcrx_ifq {
|
|||
unsigned niov_shift;
|
||||
struct user_struct *user;
|
||||
struct mm_struct *mm_account;
|
||||
bool kern_readable;
|
||||
|
||||
struct zcrx_rq rq ____cacheline_aligned_in_smp;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user