mbox series

[v1,0/2] io_uring uapi updates

Message ID 20221115212614.1308132-1-ammar.faizi@intel.com (mailing list archive)
Headers show
Series io_uring uapi updates | expand

Message

Ammar Faizi Nov. 15, 2022, 9:29 p.m. UTC
From: Ammar Faizi <ammarfaizi2@gnuweeb.org>

Hi Jens,

io_uring uapi updates:

1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
   synced 1:1 into liburing's io_uring.h. liburing has a configure
   check to detect the need for linux/time_types.h (Stefan).

2) Do not use a zero-size array because it doesn't allow the user to
   compile an app that uses liburing with the `-pedantic-errors` flag:

       io_uring.h:611:28: error: zero size arrays are an extension [-Werror,-Wzero-length-array]

   Replace the array size from 0 to 1 (me).

Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
---

Ammar Faizi (1):
  io_uring: uapi: Don't use a zero-size array

Stefan Metzmacher (1):
  io_uring: uapi: Don't force linux/time_types.h for userspace

 include/uapi/linux/io_uring.h | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)


base-commit: 5576035f15dfcc6cb1cec236db40c2c0733b0ba4

Comments

Jens Axboe Nov. 15, 2022, 11:14 p.m. UTC | #1
On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
> 
> Hi Jens,
> 
> io_uring uapi updates:
> 
> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>    synced 1:1 into liburing's io_uring.h. liburing has a configure
>    check to detect the need for linux/time_types.h (Stefan).
> 
> [...]

Applied, thanks!

[1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
      commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c

Best regards,
Ammar Faizi Nov. 16, 2022, 6:34 a.m. UTC | #2
On 11/16/22 6:14 AM, Jens Axboe wrote:
> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>
>> Hi Jens,
>>
>> io_uring uapi updates:
>>
>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>     synced 1:1 into liburing's io_uring.h. liburing has a configure
>>     check to detect the need for linux/time_types.h (Stefan).
>>
>> [...]
> 
> Applied, thanks!
> 
> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>        commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c

Jens, please drop this commit. It breaks the build:

All errors (new ones prefixed by >>):

    In file included from <command-line>:
>> ./usr/include/linux/io_uring.h:654:41: error: field 'timeout' has incomplete type
      654 |         struct __kernel_timespec        timeout;
          |                                         ^~~~~~~
Ammar Faizi Nov. 16, 2022, 6:49 a.m. UTC | #3
On 11/16/22 1:34 PM, Ammar Faizi wrote:
> On 11/16/22 6:14 AM, Jens Axboe wrote:
>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>
>>> Hi Jens,
>>>
>>> io_uring uapi updates:
>>>
>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>     synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>     check to detect the need for linux/time_types.h (Stefan).
>>>
>>> [...]
>>
>> Applied, thanks!
>>
>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>        commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
> 
> Jens, please drop this commit. It breaks the build:
> 
> All errors (new ones prefixed by >>):
> 
>     In file included from <command-line>:
>>> ./usr/include/linux/io_uring.h:654:41: error: field 'timeout' has incomplete type
>       654 |         struct __kernel_timespec        timeout;
>           |                                         ^~~~~~~

https://lore.kernel.org/r/202211161421.AfP10hq6-lkp@intel.com
Jens Axboe Nov. 16, 2022, 1:50 p.m. UTC | #4
On 11/15/22 11:34 PM, Ammar Faizi wrote:
> On 11/16/22 6:14 AM, Jens Axboe wrote:
>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>
>>> Hi Jens,
>>>
>>> io_uring uapi updates:
>>>
>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>     synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>     check to detect the need for linux/time_types.h (Stefan).
>>>
>>> [...]
>>
>> Applied, thanks!
>>
>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>        commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
> 
> Jens, please drop this commit. It breaks the build:

Dropped - please actually build your patches, or make it clear that
they were not built at all. None of these 2 patches were any good.
Stefan Metzmacher Nov. 16, 2022, 2:22 p.m. UTC | #5
Am 16.11.22 um 14:50 schrieb Jens Axboe:
> On 11/15/22 11:34 PM, Ammar Faizi wrote:
>> On 11/16/22 6:14 AM, Jens Axboe wrote:
>>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>>
>>>> Hi Jens,
>>>>
>>>> io_uring uapi updates:
>>>>
>>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>>      synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>>      check to detect the need for linux/time_types.h (Stefan).
>>>>
>>>> [...]
>>>
>>> Applied, thanks!
>>>
>>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>>         commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
>>
>> Jens, please drop this commit. It breaks the build:
> 
> Dropped - please actually build your patches, or make it clear that
> they were not built at all. None of these 2 patches were any good.

Is it tools/testing/selftests/net/io_uring_zerocopy_tx.c that doesn't build?
and needs a '#define HAVE_LINUX_TIME_TYPES_H 1'

BTW, the original commit I posted was here:
https://lore.kernel.org/io-uring/c7782923deeb4016f2ac2334bc558921e8d91a67.1666605446.git.metze@samba.org/

What's the magic to compile tools/testing/selftests/net/io_uring_zerocopy_tx.c ?

My naive tries both fail (even without my patch):
All other files including any io_uring.h build and the patch was also included
in a branch where I build a complete working kernel with 'make -j33 bindeb-pkg'

metze@SERNOX19:~/devel/kernel/linux-4.4$ LANG=C make $(find io_uring/*.c fs/file_table.c fs/exec.c kernel/exit.c kernel/fork.c net/socket.c  net/unix/scm.c 
security/selinux/hooks.c security/smack/smack_lsm.c tools/testing/selftests/net/io_uring_zerocopy_tx.c | sed -e 's!\.c$!.o!') EXTRA_CFLAGS="-Wfatal-errors"
   UPD     include/config/kernel.release
   UPD     include/generated/utsrelease.h
   CALL    scripts/checksyscalls.sh
   DESCEND objtool
   DESCEND bpf/resolve_btfids
   CC      fs/file_table.o
   CC      fs/exec.o
   CC      io_uring/advise.o
   CC      io_uring/cancel.o
   CC      io_uring/epoll.o
   CC      io_uring/fdinfo.o
   CC      io_uring/filetable.o
   CC      io_uring/fs.o
   CC      io_uring/io_uring.o
   CC      io_uring/io-wq.o
   CC      io_uring/kbuf.o
   CC      io_uring/msg_ring.o
   CC      io_uring/net.o
   CC      io_uring/nop.o
   CC      io_uring/notif.o
   CC      io_uring/opdef.o
   CC      io_uring/openclose.o
   CC      io_uring/poll.o
   CC      io_uring/rsrc.o
   CC      io_uring/rw.o
   CC      io_uring/splice.o
   CC      io_uring/sqpoll.o
   CC      io_uring/statx.o
   CC      io_uring/sync.o
   CC      io_uring/tctx.o
   CC      io_uring/timeout.o
   CC      io_uring/uring_cmd.o
   CC      io_uring/xattr.o
   CC      kernel/exit.o
   CC      kernel/fork.o
   CC      net/socket.o
   CC      net/unix/scm.o
   CC      security/selinux/hooks.o
   CC      security/smack/smack_lsm.o
   CC      tools/testing/selftests/net/io_uring_zerocopy_tx.o
tools/testing/selftests/net/io_uring_zerocopy_tx.c:3:10: fatal error: assert.h: No such file or directory
     3 | #include <assert.h>
       |          ^~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.build:258: tools/testing/selftests/net/io_uring_zerocopy_tx.o] Error 1
make: *** [Makefile:1997: .] Error 2


metze@SERNOX19:~/devel/kernel/linux-4.4/tools/testing/selftests/net$ make io_uring_zerocopy_tx.o
gcc -Wall -Wl,--no-as-needed -O2 -g -I../../../../usr/include/ -isystem /home/metze/devel/kernel/linux-4.4/tools/testing/selftests/../../../usr/include   -c -o 
io_uring_zerocopy_tx.o io_uring_zerocopy_tx.c
io_uring_zerocopy_tx.c: In function ‘io_uring_prep_sendzc’:
io_uring_zerocopy_tx.c:287:30: error: ‘IORING_OP_SEND_ZC’ undeclared (first use in this function); did you mean ‘IORING_OP_SEND’?
   287 |         sqe->opcode = (__u8) IORING_OP_SEND_ZC;
       |                              ^~~~~~~~~~~~~~~~~
       |                              IORING_OP_SEND
io_uring_zerocopy_tx.c:287:30: note: each undeclared identifier is reported only once for each function it appears in
io_uring_zerocopy_tx.c: In function ‘do_tx’:
io_uring_zerocopy_tx.c:407:56: error: ‘IORING_RECVSEND_FIXED_BUF’ undeclared (first use in this function)
   407 |                                         sqe->ioprio |= IORING_RECVSEND_FIXED_BUF;
       |                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~
io_uring_zerocopy_tx.c:429:42: error: ‘IORING_CQE_F_NOTIF’ undeclared (first use in this function); did you mean ‘IORING_CQE_F_MORE’?
   429 |                         if (cqe->flags & IORING_CQE_F_NOTIF) {
       |                                          ^~~~~~~~~~~~~~~~~~
       |                                          IORING_CQE_F_MORE
make: *** [<eingebaut>: io_uring_zerocopy_tx.o] Fehler 1
Jens Axboe Nov. 16, 2022, 7:46 p.m. UTC | #6
On 11/16/22 7:22 AM, Stefan Metzmacher wrote:
> Am 16.11.22 um 14:50 schrieb Jens Axboe:
>> On 11/15/22 11:34 PM, Ammar Faizi wrote:
>>> On 11/16/22 6:14 AM, Jens Axboe wrote:
>>>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>>>
>>>>> Hi Jens,
>>>>>
>>>>> io_uring uapi updates:
>>>>>
>>>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>>> ???? synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>>> ???? check to detect the need for linux/time_types.h (Stefan).
>>>>>
>>>>> [...]
>>>>
>>>> Applied, thanks!
>>>>
>>>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>>> ??????? commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
>>>
>>> Jens, please drop this commit. It breaks the build:
>>
>> Dropped - please actually build your patches, or make it clear that
>> they were not built at all. None of these 2 patches were any good.
> 
> Is it tools/testing/selftests/net/io_uring_zerocopy_tx.c that doesn't build?

Honestly not sure, but saw a few reports come in. Here's the one from
linux-next:

https://lore.kernel.org/all/20221116123556.79a7bbd8@canb.auug.org.au/

> and needs a '#define HAVE_LINUX_TIME_TYPES_H 1'
> 
> BTW, the original commit I posted was here:
> https://lore.kernel.org/io-uring/c7782923deeb4016f2ac2334bc558921e8d91a67.1666605446.git.metze@samba.org/
> 
> What's the magic to compile tools/testing/selftests/net/io_uring_zerocopy_tx.c ?

Some variant of make kselftests-foo?

> My naive tries both fail (even without my patch):

Mine does too, in various other tests. Stephen?
Stefan Metzmacher Nov. 16, 2022, 8:03 p.m. UTC | #7
Am 16.11.22 um 20:46 schrieb Jens Axboe:
> On 11/16/22 7:22 AM, Stefan Metzmacher wrote:
>> Am 16.11.22 um 14:50 schrieb Jens Axboe:
>>> On 11/15/22 11:34 PM, Ammar Faizi wrote:
>>>> On 11/16/22 6:14 AM, Jens Axboe wrote:
>>>>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>>>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>>>>
>>>>>> Hi Jens,
>>>>>>
>>>>>> io_uring uapi updates:
>>>>>>
>>>>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>>>> ???? synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>>>> ???? check to detect the need for linux/time_types.h (Stefan).
>>>>>>
>>>>>> [...]
>>>>>
>>>>> Applied, thanks!
>>>>>
>>>>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>>>> ??????? commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
>>>>
>>>> Jens, please drop this commit. It breaks the build:
>>>
>>> Dropped - please actually build your patches, or make it clear that
>>> they were not built at all. None of these 2 patches were any good.
>>
>> Is it tools/testing/selftests/net/io_uring_zerocopy_tx.c that doesn't build?
> 
> Honestly not sure, but saw a few reports come in. Here's the one from
> linux-next:
> 
> https://lore.kernel.org/all/20221116123556.79a7bbd8@canb.auug.org.au/

Yes, but the output is pretty useless as it doesn't show what
.c file and what command is failing.

>> and needs a '#define HAVE_LINUX_TIME_TYPES_H 1'

Just guessing, but adding this into the commit has a chance to work...

--- a/tools/testing/selftests/net/io_uring_zerocopy_tx.c
+++ b/tools/testing/selftests/net/io_uring_zerocopy_tx.c
@@ -15,6 +15,7 @@
  #include <arpa/inet.h>
  #include <linux/errqueue.h>
  #include <linux/if_packet.h>
+#define HAVE_LINUX_TIME_TYPES_H 1
  #include <linux/io_uring.h>
  #include <linux/ipv6.h>
  #include <linux/socket.h>

>> BTW, the original commit I posted was here:
>> https://lore.kernel.org/io-uring/c7782923deeb4016f2ac2334bc558921e8d91a67.1666605446.git.metze@samba.org/
>>
>> What's the magic to compile tools/testing/selftests/net/io_uring_zerocopy_tx.c ?
> 
> Some variant of make kselftests-foo?
> 
>> My naive tries both fail (even without my patch):
> 
> Mine does too, in various other tests. Stephen?

Pavel, as you created that file, do you remember how you build it?

metze
Stefan Metzmacher Nov. 16, 2022, 8:18 p.m. UTC | #8
Hi Jens,

>> and needs a '#define HAVE_LINUX_TIME_TYPES_H 1'
>>
>> BTW, the original commit I posted was here:
>> https://lore.kernel.org/io-uring/c7782923deeb4016f2ac2334bc558921e8d91a67.1666605446.git.metze@samba.org/

I'll push a better version soon, it inverts the ifdef logic like this:

--- a/include/uapi/linux/io_uring.h
+++ b/include/uapi/linux/io_uring.h
@@ -10,7 +10,15 @@

  #include <linux/fs.h>
  #include <linux/types.h>
+/*
+ * this file is shared with liburing and that has to autodetect
+ * if linux/time_types.h is available or not, it can
+ * define UAPI_LINUX_IO_URING_H_SKIP_LINUX_TIME_TYPES_H
+ * if linux/time_types.h is not available
+ */
+#ifndef UAPI_LINUX_IO_URING_H_SKIP_LINUX_TIME_TYPES_H
  #include <linux/time_types.h>
+#endif

It also means that projects without liburing usage are not affected.
And developers only have to care if they want to build on legacy systems
without time_types.h

Once that's accepted into the kernel I'll adjust the logic in liburing

Does that sound like a plan?

metze
Pavel Begunkov Nov. 16, 2022, 8:31 p.m. UTC | #9
On 11/16/22 20:03, Stefan Metzmacher wrote:
> Am 16.11.22 um 20:46 schrieb Jens Axboe:
>> On 11/16/22 7:22 AM, Stefan Metzmacher wrote:
>>> Am 16.11.22 um 14:50 schrieb Jens Axboe:
>>>> On 11/15/22 11:34 PM, Ammar Faizi wrote:
>>>>> On 11/16/22 6:14 AM, Jens Axboe wrote:
>>>>>> On Wed, 16 Nov 2022 04:29:51 +0700, Ammar Faizi wrote:
>>>>>>> From: Ammar Faizi <ammarfaizi2@gnuweeb.org>
>>>>>>>
>>>>>>> Hi Jens,
>>>>>>>
>>>>>>> io_uring uapi updates:
>>>>>>>
>>>>>>> 1) Don't force linux/time_types.h for userspace. Linux's io_uring.h is
>>>>>>> ???? synced 1:1 into liburing's io_uring.h. liburing has a configure
>>>>>>> ???? check to detect the need for linux/time_types.h (Stefan).
>>>>>>>
>>>>>>> [...]
>>>>>>
>>>>>> Applied, thanks!
>>>>>>
>>>>>> [1/2] io_uring: uapi: Don't force linux/time_types.h for userspace
>>>>>> ??????? commit: 958bfdd734b6074ba88ee3abc69d0053e26b7b9c
>>>>>
>>>>> Jens, please drop this commit. It breaks the build:
>>>>
>>>> Dropped - please actually build your patches, or make it clear that
>>>> they were not built at all. None of these 2 patches were any good.
>>>
>>> Is it tools/testing/selftests/net/io_uring_zerocopy_tx.c that doesn't build?
>>
>> Honestly not sure, but saw a few reports come in. Here's the one from
>> linux-next:
>>
>> https://lore.kernel.org/all/20221116123556.79a7bbd8@canb.auug.org.au/
> 
> Yes, but the output is pretty useless as it doesn't show what
> .c file and what command is failing.
> 
>>> and needs a '#define HAVE_LINUX_TIME_TYPES_H 1'
> 
> Just guessing, but adding this into the commit has a chance to work...
> 
> --- a/tools/testing/selftests/net/io_uring_zerocopy_tx.c
> +++ b/tools/testing/selftests/net/io_uring_zerocopy_tx.c
> @@ -15,6 +15,7 @@
>   #include <arpa/inet.h>
>   #include <linux/errqueue.h>
>   #include <linux/if_packet.h>
> +#define HAVE_LINUX_TIME_TYPES_H 1
>   #include <linux/io_uring.h>
>   #include <linux/ipv6.h>
>   #include <linux/socket.h>
> 
>>> BTW, the original commit I posted was here:
>>> https://lore.kernel.org/io-uring/c7782923deeb4016f2ac2334bc558921e8d91a67.1666605446.git.metze@samba.org/
>>>
>>> What's the magic to compile tools/testing/selftests/net/io_uring_zerocopy_tx.c ?
>>
>> Some variant of make kselftests-foo?
>>
>>> My naive tries both fail (even without my patch):
>>
>> Mine does too, in various other tests. Stephen?
> 
> Pavel, as you created that file, do you remember how you build it?

make headers_install
make -C tools/testing/selftests/net/


IIRC, it uses system uapi headers and apparently yours don't have
IORING_CQE_F_NOTIF, etc. And I don't think it uses the right Makefile,
so -C executes it from the selftest/net folder.