Add basic support for a sync MSG_RING without having a source ring

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. Implement
IORING_REGISTER_SEND_MSG_RING, which simply takes an sqe that the
application can put on the stack and use the normal liburing helpers
to get it setup. For an application, it may look like:

struct io_uring_sqe sqe = { };

io_uring_prep_msg_ring(&sqe, target_ring->ring_fd, len, data, flags);
ret = io_uring_register_sync_msg_ring(&sqe);

and 'ret' here would be what you would've seen in cqe->res if the
MSG_RING request was issued in the usual fashion as an sqe that was
gotten from a source ring.

On the destination side, no changes should be observed compared to
sending a normal sqe based async MSG_RING request.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
7 files changed