mirror-linux/io_uring
Pavel Begunkov f12ecf5e1c io_uring/zcrx: fix late dma unmap for a dead dev
There is a problem with page pools not dma-unmapping immediately when
the device is going down, and delaying it until the page pool is
destroyed, which is not allowed (see links). That just got fixed for
normal page pools, and we need to address memory providers as well.

Unmap pages in the memory provider uninstall callback, and protect it
with a new lock. There is also a gap between when a dma mapping is
created and the mp is installed, so if the device is killed in between,
io_uring would be holding on to dma mappings to a dead device with no
one to call ->uninstall. Move it to page pool init and rely on
->is_mapped to make sure it's only done once.

Link: https://lore.kernel.org/lkml/8067f204-1380-4d37-8ffd-007fc6f26738@kernel.org/T/
Link: https://lore.kernel.org/all/20250409-page-pool-track-dma-v9-0-6a9ef2e0cba8@redhat.com/
Fixes: 34a3e60821 ("io_uring/zcrx: implement zerocopy receive pp memory provider")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/ef9b7db249b14f6e0b570a1bb77ff177389f881c.1744965853.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2025-04-18 06:12:10 -06:00
..
Kconfig io_uring: make zcrx depend on CONFIG_IO_URING 2025-03-31 07:07:44 -06:00
Makefile io_uring/epoll: remove CONFIG_EPOLL guards 2025-02-20 07:59:56 -07:00
advise.c io_uring/advise: support 64-bit lengths 2024-06-16 14:54:55 -06:00
advise.h
alloc_cache.c io_uring: add alloc_cache.c 2025-01-28 15:10:40 -07:00
alloc_cache.h io_uring/net: convert to struct iou_vec 2025-03-07 13:41:08 -07:00
cancel.c io_uring/cancel: add generic cancel helper 2025-02-17 05:34:45 -07:00
cancel.h io_uring/cancel: add generic cancel helper 2025-02-17 05:34:45 -07:00
epoll.c io_uring/epoll: add support for IORING_OP_EPOLL_WAIT 2025-02-20 07:59:56 -07:00
epoll.h io_uring/epoll: add support for IORING_OP_EPOLL_WAIT 2025-02-20 07:59:56 -07:00
eventfd.c io_uring/eventfd: ensure io_eventfd_signal() defers another RCU period 2025-01-09 07:16:45 -07:00
eventfd.h io_uring/eventfd: move eventfd handling to separate file 2024-06-16 14:54:55 -06:00
fdinfo.c io_uring/fdinfo: fix io_uring_show_fdinfo() misuse of ->d_iname 2025-01-19 07:28:37 -07:00
fdinfo.h
filetable.c io_uring: cache nodes and mapped buffers 2025-02-28 07:05:46 -07:00
filetable.h io_uring/rsrc: pass 'struct io_ring_ctx' reference to rsrc helpers 2024-11-07 15:24:33 -07:00
fs.c io_uring/fs: consider link->flags when getting path for LINKAT 2023-11-20 09:01:42 -07:00
fs.h
futex.c io_uring: introduce io_cache_free() helper 2025-03-05 07:38:55 -07:00
futex.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
io-wq.c Merge branch 'io_uring-6.14' into for-6.15/io_uring 2025-02-27 07:18:01 -07:00
io-wq.h io_uring/io-wq: cache work->flags in variable 2025-02-17 05:34:45 -07:00
io_uring.c io_uring: always do atomic put from iowq 2025-04-03 08:31:57 -06:00
io_uring.h io_uring: don't pass ctx to tw add remote helper 2025-03-28 17:14:01 -06:00
kbuf.c io_uring/kbuf: reject zero sized provided buffers 2025-04-07 07:51:23 -06:00
kbuf.h io_uring/kbuf: uninline __io_put_kbufs 2025-02-17 05:34:45 -07:00
memmap.c io_uring: add missing IORING_MAP_OFF_ZCRX_REGION in io_uring_mmap 2025-02-21 09:40:09 -07:00
memmap.h io_uring/zcrx: add interface queue and refill queue 2025-02-17 05:41:03 -07:00
msg_ring.c io_uring: don't pass ctx to tw add remote helper 2025-03-28 17:14:01 -06:00
msg_ring.h io_uring/msg_ring: Drop custom destructor 2024-12-27 10:08:21 -07:00
napi.c net: use napi_id_valid helper 2025-02-17 16:43:04 -08:00
napi.h io_uring/napi: add static napi tracking strategy 2024-11-06 13:55:38 -07:00
net.c io_uring/net: avoid import_ubuf for regvec send 2025-03-31 12:41:49 -06:00
net.h io_uring/net: convert to struct iou_vec 2025-03-07 13:41:08 -07:00
nop.c io_uring/nop: use io_find_buf_node() 2025-02-28 19:35:37 -07:00
nop.h
notif.c io_uring: introduce type alias for io_tw_state 2025-02-17 05:34:50 -07:00
notif.h io_uring/notif: implement notification stacking 2024-04-22 19:31:18 -06:00
opdef.c for-6.15/io_uring-epoll-wait-20250325 2025-03-28 14:55:32 -07:00
opdef.h io_uring: rearrange opdef flags by use pattern 2025-02-27 07:27:56 -07:00
openclose.c io_uring: enable audit and restrict cred override for IORING_OP_FIXED_FD_INSTALL 2024-01-23 15:25:14 -07:00
openclose.h io_uring/openclose: add support for IORING_OP_FIXED_FD_INSTALL 2023-12-12 07:42:57 -07:00
poll.c io_uring: unify STOP_MULTISHOT with IOU_OK 2025-03-10 07:14:18 -06:00
poll.h io_uring: introduce type alias for io_tw_state 2025-02-17 05:34:50 -07:00
refs.h io_uring: always do atomic put from iowq 2025-04-03 08:31:57 -06:00
register.c io_uring/zcrx: add interface queue and refill queue 2025-02-17 05:41:03 -07:00
register.h io_uring: temporarily disable registered waits 2024-11-15 09:58:34 -07:00
rsrc.c io_uring/rsrc: ensure segments counts are correct on kbuf buffers 2025-04-17 11:59:12 -06:00
rsrc.h for-6.15/io_uring-rx-zc-20250325 2025-03-28 13:45:52 -07:00
rw.c for-6.15/io_uring-reg-vec-20250327 2025-03-28 15:07:04 -07:00
rw.h io_uring/rw: implement vectored registered rw 2025-03-07 09:07:29 -07:00
slist.h io_uring: silence variable ‘prev’ set but not used warning 2023-03-09 10:10:58 -07:00
splice.c io_uring/rsrc: avoid NULL check in io_put_rsrc_node() 2025-02-17 05:34:46 -07:00
splice.h io_uring/splice: open code 2nd direct file assignment 2024-10-29 13:43:28 -06:00
sqpoll.c execve updates for v6.14-rc1 2025-01-20 13:27:58 -08:00
sqpoll.h io_uring/sqpoll: statistics of the true utilization of sq threads 2024-03-01 06:28:19 -07:00
statx.c io_statx_prep(): use getname_uflags() 2024-11-13 11:44:30 -05:00
statx.h
sync.c io_uring: for requests that require async, force it 2023-01-29 15:18:26 -07:00
sync.h
tctx.c io_uring/tctx: work around xa_store() allocation error issue 2024-11-29 07:20:28 -07:00
tctx.h io_uring: simplify __io_uring_add_tctx_node 2022-10-07 12:25:30 -06:00
timeout.c for-6.15/io_uring-20250322 2025-03-26 17:56:00 -07:00
timeout.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
truncate.c io_uring: add support for ftruncate 2024-02-09 09:04:39 -07:00
truncate.h io_uring: add support for ftruncate 2024-02-09 09:04:39 -07:00
uring_cmd.c io_uring: cleanup {g,s]etsockopt sqe reading 2025-03-31 07:08:46 -06:00
uring_cmd.h io_uring: hide caches sqes from drivers 2025-03-31 07:08:34 -06:00
waitid.c io_uring/waitid: use io_is_compat() 2025-02-24 12:10:38 -07:00
waitid.h io_uring: move cancelations to be io_uring_task based 2024-11-06 13:55:38 -07:00
xattr.c replace do_getxattr() with saner helpers. 2024-11-06 12:59:39 -05:00
xattr.h
zcrx.c io_uring/zcrx: fix late dma unmap for a dead dev 2025-04-18 06:12:10 -06:00
zcrx.h io_uring/zcrx: fix late dma unmap for a dead dev 2025-04-18 06:12:10 -06:00