From: Peter Zijlstra <[email protected]>
To: Jens Axboe <[email protected]>
Cc: [email protected], [email protected],
[email protected]
Subject: Re: [PATCH 06/10] io_uring: add support for futex wake and wait
Date: Fri, 21 Jul 2023 13:30:31 +0200 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On Thu, Jul 20, 2023 at 04:18:54PM -0600, Jens Axboe wrote:
> +struct io_futex {
> + struct file *file;
> + u32 __user *uaddr;
> + unsigned int futex_val;
> + unsigned int futex_flags;
> + unsigned int futex_mask;
> +};
So in the futex patches I just posted I went with 'unsigned long'
(syscall) or 'u64' (data structures) for the futex, such that, on 64bit
platforms, we might support 64bit futexes in the future (I still need to
audit the whole futex internals and convert u32 to unsigned long in
order to enable that).
So would something like:
struct io_futex {
struct file *file;
void __user *uaddr;
u64 futex_val;
u64 futex_mask;
u32 futex_flags;
};
work to match the futex2 syscalls?
> +int io_futex_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
> +{
> + struct io_futex *iof = io_kiocb_to_cmd(req, struct io_futex);
> +
> + if (unlikely(sqe->fd || sqe->addr2 || sqe->buf_index || sqe->addr3))
> + return -EINVAL;
> +
> + iof->uaddr = u64_to_user_ptr(READ_ONCE(sqe->addr));
> + iof->futex_val = READ_ONCE(sqe->len);
> + iof->futex_mask = READ_ONCE(sqe->file_index);
> + iof->futex_flags = READ_ONCE(sqe->futex_flags);
sqe->addr, u64
sqe->len, u32
sqe->file_index, u32
sqe->futex_flags, u32
> + if (iof->futex_flags & FUTEX_CMD_MASK)
FUTEX2_MASK
(which would need lifting from syscall.c to kernel/futex/futex.h I
suppose)
> + return -EINVAL;
> +
> + return 0;
> +}
> diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
> index 36f9c73082de..3bd2d765f593 100644
> --- a/include/uapi/linux/io_uring.h
> +++ b/include/uapi/linux/io_uring.h
> @@ -65,6 +65,7 @@ struct io_uring_sqe {
> __u32 xattr_flags;
> __u32 msg_ring_flags;
> __u32 uring_cmd_flags;
> + __u32 futex_flags;
> };
> __u64 user_data; /* data to be passed back at completion time */
> /* pack this to avoid bogus arm OABI complaints */
Perhaps extend it like so?
diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
index 08720c7bd92f..c1d28bf64d11 100644
--- a/include/uapi/linux/io_uring.h
+++ b/include/uapi/linux/io_uring.h
@@ -35,6 +35,7 @@ struct io_uring_sqe {
union {
__u64 off; /* offset into file */
__u64 addr2;
+ __u64 futex_val;
struct {
__u32 cmd_op;
__u32 __pad1;
@@ -65,6 +66,7 @@ struct io_uring_sqe {
__u32 xattr_flags;
__u32 msg_ring_flags;
__u32 uring_cmd_flags;
+ __u32 futex_flags;
};
__u64 user_data; /* data to be passed back at completion time */
/* pack this to avoid bogus arm OABI complaints */
@@ -87,6 +89,7 @@ struct io_uring_sqe {
union {
struct {
__u64 addr3;
+ __u64 futex_mask;
__u64 __pad2[1];
};
/*
So that we can write something roughtly like:
iof->uaddr = sqe->addr;
iof->val = sqe->futex_val;
iof->mask = sqe->futex_mask;
iof->flags = sqe->futex_flags;
if (iof->flags & ~FUTEX2_MASK)
return -EINVAL;
next prev parent reply other threads:[~2023-07-21 11:30 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-20 22:18 [PATCHSET v3 0/10] Add io_uring futex/futexv support Jens Axboe
2023-07-20 22:18 ` [PATCH 01/10] futex: Clarify FUTEX2 flags Jens Axboe
2023-07-20 22:18 ` [PATCH 02/10] futex: Extend the " Jens Axboe
2023-07-20 22:18 ` [PATCH 03/10] futex: Flag conversion Jens Axboe
2023-07-20 22:18 ` [PATCH 04/10] futex: factor out the futex wake handling Jens Axboe
2023-07-20 22:18 ` [PATCH 05/10] futex: abstract out a __futex_wake_mark() helper Jens Axboe
2023-07-20 22:18 ` [PATCH 06/10] io_uring: add support for futex wake and wait Jens Axboe
2023-07-21 11:30 ` Peter Zijlstra [this message]
2023-07-21 11:37 ` Peter Zijlstra
2023-07-21 14:43 ` Jens Axboe
2023-07-21 15:29 ` Jens Axboe
2023-07-25 13:00 ` Peter Zijlstra
2023-07-25 13:48 ` Jens Axboe
2023-07-25 13:57 ` Jens Axboe
2023-07-25 15:19 ` Peter Zijlstra
2023-07-25 20:42 ` Jens Axboe
2023-07-25 21:24 ` Jens Axboe
2023-07-25 14:06 ` Peter Zijlstra
2023-07-20 22:18 ` [PATCH 07/10] futex: add wake_data to struct futex_q Jens Axboe
2023-07-20 22:18 ` [PATCH 08/10] futex: make futex_parse_waitv() available as a helper Jens Axboe
2023-07-20 22:18 ` [PATCH 09/10] futex: make the vectored futex operations available Jens Axboe
2023-07-20 22:18 ` [PATCH 10/10] io_uring: add support for vectored futex waits Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230721113031.GG3630545@hirez.programming.kicks-ass.net \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox