From: Breno Leitao <leitao@debian.org>
To: dccp@vger.kernel.org
Subject: Re: [PATCH 0/5] add initial io_uring_cmd support for sockets
Date: Tue, 18 Apr 2023 13:23:15 +0000 [thread overview]
Message-ID: <ZD6Zw1GAZR28++3v@gmail.com> (raw)
In-Reply-To: <20230406144330.1932798-1-leitao@debian.org>
On Thu, Apr 13, 2023 at 10:24:31AM -0400, Willem de Bruijn wrote:
> > How to handle these contradictory behaviour ahead of time (at callee
> > time, where the buffers will be prepared)?
>
> Ah you found a counter-example to the simple pattern of put_user.
>
> The answer perhaps depends on how many such counter-examples you
> encounter in the list you gave. If this is the only one, exceptions
> in the wrapper are reasonable. Not if there are many.
Hello Williem,
I spend sometime dealing with it, and the best way for me to figure out
how much work this is, was implementing a PoC. You can find a basic PoC
in the link below. It is not 100% complete (still need to convert 4
simple ioctls), but, it deals with the most complicated cases. The
missing parts are straighforward if we are OK with this approach.
https://github.com/leitao/linux/commits/ioctl_refactor
Details
===
1) Change the ioctl callback to use kernel memory arguments. This
changes a lot of files but most of them are trivial. This is the new
ioctl callback:
struct proto {
int (*ioctl)(struct sock *sk, int cmd,
- unsigned long arg);
+ int *karg);
You can see the full changeset in the following commit (which is
the last in the tree above)
https://github.com/leitao/linux/commit/ad78da14601b078c4b6a9f63a86032467ab59bf7
2) Create a wrapper (sock_skprot_ioctl()) that should be called instead
of sk->sk_prot->ioctl(). For every exception, calls a specific function
for the exception (basically ipmr_ioctl and ipmr_ioctl) (see more on 3)
This is the commit https://github.com/leitao/linux/commit/511592e549c39ef0de19efa2eb4382cac5786227
3) There are two exceptions, they are ip{6}mr_ioctl() and pn_ioctl().
ip{6}mr is the hardest one, and I implemented the exception flow for it.
You could find ipmr changes here:
https://github.com/leitao/linux/commit/659a76dc0547ab2170023f31e20115520ebe33d9
Is this what you had in mind?
Thank you!
WARNING: multiple messages have this Message-ID (diff)
From: Breno Leitao <leitao@debian.org>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>, kuba@kernel.org
Cc: Jens Axboe <axboe@kernel.dk>, David Ahern <dsahern@kernel.org>,
Willem de Bruijn <willemb@google.com>,
io-uring@vger.kernel.org, netdev@vger.kernel.org,
kuba@kernel.org, asml.silence@gmail.com, leit@fb.com,
edumazet@google.com, pabeni@redhat.com, davem@davemloft.net,
dccp@vger.kernel.org, mptcp@lists.linux.dev,
linux-kernel@vger.kernel.org, matthieu.baerts@tessares.net,
marcelo.leitner@gmail.com
Subject: Re: [PATCH 0/5] add initial io_uring_cmd support for sockets
Date: Tue, 18 Apr 2023 06:23:15 -0700 [thread overview]
Message-ID: <ZD6Zw1GAZR28++3v@gmail.com> (raw)
In-Reply-To: <6438109fe8733_13361929472@willemb.c.googlers.com.notmuch>
On Thu, Apr 13, 2023 at 10:24:31AM -0400, Willem de Bruijn wrote:
> > How to handle these contradictory behaviour ahead of time (at callee
> > time, where the buffers will be prepared)?
>
> Ah you found a counter-example to the simple pattern of put_user.
>
> The answer perhaps depends on how many such counter-examples you
> encounter in the list you gave. If this is the only one, exceptions
> in the wrapper are reasonable. Not if there are many.
Hello Williem,
I spend sometime dealing with it, and the best way for me to figure out
how much work this is, was implementing a PoC. You can find a basic PoC
in the link below. It is not 100% complete (still need to convert 4
simple ioctls), but, it deals with the most complicated cases. The
missing parts are straighforward if we are OK with this approach.
https://github.com/leitao/linux/commits/ioctl_refactor
Details
=======
1) Change the ioctl callback to use kernel memory arguments. This
changes a lot of files but most of them are trivial. This is the new
ioctl callback:
struct proto {
int (*ioctl)(struct sock *sk, int cmd,
- unsigned long arg);
+ int *karg);
You can see the full changeset in the following commit (which is
the last in the tree above)
https://github.com/leitao/linux/commit/ad78da14601b078c4b6a9f63a86032467ab59bf7
2) Create a wrapper (sock_skprot_ioctl()) that should be called instead
of sk->sk_prot->ioctl(). For every exception, calls a specific function
for the exception (basically ipmr_ioctl and ipmr_ioctl) (see more on 3)
This is the commit https://github.com/leitao/linux/commit/511592e549c39ef0de19efa2eb4382cac5786227
3) There are two exceptions, they are ip{6}mr_ioctl() and pn_ioctl().
ip{6}mr is the hardest one, and I implemented the exception flow for it.
You could find ipmr changes here:
https://github.com/leitao/linux/commit/659a76dc0547ab2170023f31e20115520ebe33d9
Is this what you had in mind?
Thank you!
next prev parent reply other threads:[~2023-04-18 13:23 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-06 14:43 [PATCH 0/5] add initial io_uring_cmd support for sockets Breno Leitao
2023-04-06 14:43 ` Breno Leitao
2023-04-06 15:34 ` Willem de Bruijn
2023-04-06 15:34 ` Willem de Bruijn
2023-04-06 15:59 ` Breno Leitao
2023-04-06 15:59 ` Breno Leitao
2023-04-06 16:41 ` Keith Busch
2023-04-06 16:41 ` Keith Busch
2023-04-06 16:49 ` Jens Axboe
2023-04-06 16:49 ` Jens Axboe
2023-04-06 16:58 ` Breno Leitao
2023-04-06 16:58 ` Breno Leitao
2023-04-06 18:16 ` Willem de Bruijn
2023-04-06 18:16 ` Willem de Bruijn
2023-04-07 2:46 ` David Ahern
2023-04-07 2:46 ` David Ahern
2023-04-11 11:59 ` Breno Leitao
2023-04-11 12:00 ` Breno Leitao
2023-04-11 14:36 ` David Ahern
2023-04-11 14:36 ` David Ahern
2023-04-11 14:41 ` Jens Axboe
2023-04-11 14:41 ` Jens Axboe
2023-04-11 14:51 ` Willem de Bruijn
2023-04-11 14:51 ` Willem de Bruijn
2023-04-11 14:54 ` Jens Axboe
2023-04-11 14:54 ` Jens Axboe
2023-04-11 15:00 ` Willem de Bruijn
2023-04-11 15:00 ` Willem de Bruijn
2023-04-11 15:06 ` Jens Axboe
2023-04-11 15:06 ` Jens Axboe
2023-04-11 15:10 ` David Ahern
2023-04-11 15:10 ` David Ahern
2023-04-11 15:17 ` Jens Axboe
2023-04-11 15:17 ` Jens Axboe
2023-04-11 15:24 ` Willem de Bruijn
2023-04-11 15:24 ` Willem de Bruijn
2023-04-11 15:27 ` David Ahern
2023-04-11 15:27 ` David Ahern
2023-04-11 15:28 ` Jens Axboe
2023-04-11 15:28 ` Jens Axboe
2023-04-11 15:29 ` Jens Axboe
2023-04-11 15:29 ` Jens Axboe
2023-04-12 7:39 ` David Laight
2023-04-12 7:39 ` David Laight
2023-04-12 13:53 ` Breno Leitao
2023-04-12 13:53 ` Breno Leitao
2023-04-12 14:28 ` Willem de Bruijn
2023-04-12 14:28 ` Willem de Bruijn
2023-04-13 0:02 ` Breno Leitao
2023-04-13 0:02 ` Breno Leitao
2023-04-13 14:24 ` Willem de Bruijn
2023-04-13 14:24 ` Willem de Bruijn
2023-04-13 14:45 ` Jakub Kicinski
2023-04-13 14:45 ` Jakub Kicinski
2023-04-13 14:57 ` David Laight
2023-04-13 14:57 ` David Laight
2023-04-18 13:23 ` Breno Leitao [this message]
2023-04-18 13:23 ` Breno Leitao
2023-04-18 19:41 ` Willem de Bruijn
2023-04-18 19:41 ` Willem de Bruijn
2023-04-20 14:43 ` Breno Leitao
2023-04-20 14:43 ` Breno Leitao
2023-04-20 16:48 ` Willem de Bruijn
2023-04-20 16:48 ` Willem de Bruijn
2023-05-02 9:21 ` Adrien Delorme
2023-05-02 9:21 ` Adrien Delorme
2023-05-02 13:03 ` Pavel Begunkov
2023-05-02 13:03 ` Pavel Begunkov
2023-05-03 13:11 ` Adrien Delorme
2023-05-03 13:11 ` Adrien Delorme
2023-05-03 13:27 ` David Laight
2023-05-03 13:27 ` David Laight
-- strict thread matches above, loose matches on Subject: below --
2023-04-06 14:43 [RFC PATCH 1/4] net: wire up support for file_operations->uring_cmd() Breno Leitao
2023-04-06 14:43 ` Breno Leitao
2023-04-06 14:43 [RFC PATCH 2/4] net: add uring_cmd callback to UDP Breno Leitao
2023-04-06 14:43 ` Breno Leitao
2023-04-06 19:03 ` kernel test robot
2023-04-11 12:54 ` Pavel Begunkov
2023-04-11 12:54 ` Pavel Begunkov
2023-04-06 14:43 [RFC PATCH 3/4] net: add uring_cmd callback to TCP Breno Leitao
2023-04-06 14:43 ` Breno Leitao
2023-04-06 20:35 ` kernel test robot
2023-04-06 14:43 [RFC PATCH 4/4] net: add uring_cmd callback to raw "protocol" Breno Leitao
2023-04-06 14:43 ` Breno Leitao
2023-04-06 16:57 [PATCH RFC] io_uring: Pass whole sqe to commands Breno Leitao
2023-04-06 16:57 ` Breno Leitao
2023-04-06 17:50 ` io_uring: Pass whole sqe to commands: Tests Results MPTCP CI
2023-04-07 18:51 ` [PATCH RFC] io_uring: Pass whole sqe to commands Keith Busch
2023-04-07 18:51 ` Keith Busch
2023-04-07 19:43 ` io_uring: Pass whole sqe to commands: Tests Results MPTCP CI
2023-04-11 12:22 ` [PATCH RFC] io_uring: Pass whole sqe to commands Breno Leitao
2023-04-11 12:22 ` Breno Leitao
2023-04-11 12:39 ` Pavel Begunkov
2023-04-11 12:39 ` Pavel Begunkov
2023-04-13 2:56 ` Ming Lei
2023-04-13 2:56 ` Ming Lei
2023-04-13 16:47 ` Breno Leitao
2023-04-13 16:47 ` Breno Leitao
2023-04-14 2:12 ` Ming Lei
2023-04-14 2:12 ` Ming Lei
2023-04-14 13:12 ` Pavel Begunkov
2023-04-14 13:12 ` Pavel Begunkov
2023-04-14 13:59 ` Ming Lei
2023-04-14 13:59 ` Ming Lei
2023-04-14 14:56 ` Pavel Begunkov
2023-04-14 14:56 ` Pavel Begunkov
2023-04-16 9:51 ` Ming Lei
2023-04-16 9:51 ` Ming Lei
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=ZD6Zw1GAZR28++3v@gmail.com \
--to=leitao@debian.org \
--cc=dccp@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.