syscall: Add io_uring syscall functions

We have:

  man 2 io_uring_setup;
  man 2 io_uring_enter;
  man 2 io_uring_register;

Those entries say that io_uring syscall functions are declared in
`<linux/io_uring.h>`. But they don't actually exist and never existed.
This is causing confusion for people who read the manpage. Let's just
implement them in liburing so they exist.

This also allows the user to invoke io_uring syscalls directly instead
of using the full liburing provided setup.

v2:
  - Use consistent argument types.
  - Separate syscall declarations in liburing.h with a blank line.
  - Remove unused include in syscall.c.

Link: https://github.com/axboe/liburing/pull/646#issuecomment-1229639532
Reviewed-by: Caleb Sander <csander@purestorage.com>
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Link: https://lore.kernel.org/r/20220830005122.885209-3-ammar.faizi@intel.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Ammar Faizi
2022-08-30 07:56:38 +07:00
committed by Jens Axboe
parent 00cf219628
commit 070d45fb33
4 changed files with 46 additions and 1 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ endif
all: $(all_targets)
liburing_srcs := setup.c queue.c register.c
liburing_srcs := setup.c queue.c register.c syscall.c
ifeq ($(CONFIG_NOLIBC),y)
liburing_srcs += nolibc.c
+12
View File
@@ -203,6 +203,18 @@ int io_uring_register_notifications(struct io_uring *ring, unsigned nr,
struct io_uring_notification_slot *slots);
int io_uring_unregister_notifications(struct io_uring *ring);
/*
* io_uring syscalls.
*/
int io_uring_enter(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags, sigset_t *sig);
int io_uring_enter2(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags,
sigset_t *sig, size_t sz);
int io_uring_setup(unsigned int entries, struct io_uring_params *p);
int io_uring_register(unsigned int fd, unsigned int opcode, const void *arg,
unsigned int nr_args);
/*
* Helper for the peek/wait single cqe functions. Exported because of that,
* but probably shouldn't be used directly in an application.
+4
View File
@@ -62,4 +62,8 @@ LIBURING_2.3 {
io_uring_register_file_alloc_range;
io_uring_register_notifications;
io_uring_unregister_notifications;
io_uring_enter;
io_uring_enter2;
io_uring_setup;
io_uring_register;
} LIBURING_2.2;
+29
View File
@@ -0,0 +1,29 @@
/* SPDX-License-Identifier: MIT */
#include "syscall.h"
#include <liburing.h>
int io_uring_enter(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags, sigset_t *sig)
{
return __sys_io_uring_enter(fd, to_submit, min_complete, flags, sig);
}
int io_uring_enter2(unsigned int fd, unsigned int to_submit,
unsigned int min_complete, unsigned int flags,
sigset_t *sig, size_t sz)
{
return __sys_io_uring_enter2(fd, to_submit, min_complete, flags, sig,
sz);
}
int io_uring_setup(unsigned int entries, struct io_uring_params *p)
{
return __sys_io_uring_setup(entries, p);
}
int io_uring_register(unsigned int fd, unsigned int opcode, const void *arg,
unsigned int nr_args)
{
return __sys_io_uring_register(fd, opcode, arg, nr_args);
}