summaryrefslogtreecommitdiff
path: root/io_uring/msg_ring.h
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2024-09-24 05:57:31 -0600
committerJens Axboe <axboe@kernel.dk>2024-10-29 13:43:26 -0600
commita377132154ab8404dafcc52e8bc0c73050a954c2 (patch)
tree7007cd6f5c29e31dcea173774bf53c7d4e07fc14 /io_uring/msg_ring.h
parent95d6c9229a04cc12d39034cd6be6446a55a85d6d (diff)
io_uring/msg_ring: add support for sending a sync message
Normally MSG_RING requires both a source and a destination ring. But some users don't always have a ring avilable to send a message from, yet they still need to notify a target ring. Add support for using io_uring_register(2) without having a source ring, using a file descriptor of -1 for that. Internally those are called blind registration opcodes. Implement IORING_REGISTER_SEND_MSG_RING as a blind opcode, which simply takes an sqe that the application can put on the stack and use the normal liburing helpers to initialize it. Then the app can call: io_uring_register(-1, IORING_REGISTER_SEND_MSG_RING, &sqe, 1); and get the same behavior in terms of the target, where a CQE is posted with the details given in the sqe. For now this takes a single sqe pointer argument, and hence arg must be set to that, and nr_args must be 1. Could easily be extended to take an array of sqes, but for now let's keep it simple. Link: https://lore.kernel.org/r/20240924115932.116167-3-axboe@kernel.dk Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/msg_ring.h')
-rw-r--r--io_uring/msg_ring.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/io_uring/msg_ring.h b/io_uring/msg_ring.h
index 3030f3942f0f..38e7f8f0c944 100644
--- a/io_uring/msg_ring.h
+++ b/io_uring/msg_ring.h
@@ -1,5 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
+int io_uring_sync_msg_ring(struct io_uring_sqe *sqe);
int io_msg_ring_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
int io_msg_ring(struct io_kiocb *req, unsigned int issue_flags);
void io_msg_ring_cleanup(struct io_kiocb *req);