summaryrefslogtreecommitdiff
path: root/io_uring/memmap.h
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2025-10-16 14:23:23 +0100
committerJens Axboe <axboe@kernel.dk>2025-10-20 10:37:56 -0600
commit5b6d8a032e807c48a843fb81d9e3d74391f731ea (patch)
tree19b56c57b2acef182ee31f5ab914661b8a0c6adc /io_uring/memmap.h
parentdec10a1ad1d5f9d46e7f6e7c8b414a805e00717c (diff)
io_uring: only publish fully handled mem region
io_register_mem_region() can try to remove a region right after publishing it. This non-atomicity is annoying. Do it in two steps similar to io_register_mem_region(), create memory first and publish it once the rest of the handling is done. Remove now unused io_create_region_mmap_safe(), which was assumed to be a temporary solution from day one. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/memmap.h')
-rw-r--r--io_uring/memmap.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/io_uring/memmap.h b/io_uring/memmap.h
index 08419684e4bc..58002976e0c3 100644
--- a/io_uring/memmap.h
+++ b/io_uring/memmap.h
@@ -36,4 +36,16 @@ static inline bool io_region_is_set(struct io_mapped_region *mr)
return !!mr->nr_pages;
}
+static inline void io_region_publish(struct io_ring_ctx *ctx,
+ struct io_mapped_region *src_region,
+ struct io_mapped_region *dst_region)
+{
+ /*
+ * Once published mmap can find it without holding only the ->mmap_lock
+ * and not ->uring_lock.
+ */
+ guard(mutex)(&ctx->mmap_lock);
+ *dst_region = *src_region;
+}
+
#endif