polyphony 0.98 → 0.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -1
- data/.rubocop.yml +3 -3
- data/.yardopts +30 -0
- data/CHANGELOG.md +11 -0
- data/LICENSE +1 -1
- data/README.md +63 -29
- data/Rakefile +1 -5
- data/TODO.md +0 -4
- data/docs/{main-concepts/concurrency.md → concurrency.md} +2 -9
- data/docs/{main-concepts/design-principles.md → design-principles.md} +3 -9
- data/docs/{main-concepts/exception-handling.md → exception-handling.md} +2 -9
- data/docs/{main-concepts/extending.md → extending.md} +2 -9
- data/docs/faq.md +3 -16
- data/docs/{main-concepts/fiber-scheduling.md → fiber-scheduling.md} +1 -9
- data/docs/link_rewriter.rb +16 -0
- data/docs/{getting-started/overview.md → overview.md} +1 -30
- data/docs/{getting-started/tutorial.md → tutorial.md} +3 -28
- data/docs/{_posts/2020-07-26-polyphony-0.44.md → whats-new.md} +3 -1
- data/examples/adapters/redis_client.rb +3 -2
- data/examples/io/echo_server.rb +1 -1
- data/examples/io/echo_server_plain_ruby.rb +26 -0
- data/examples/io/https_server_sni_2.rb +14 -8
- data/ext/polyphony/backend_io_uring.c +154 -9
- data/ext/polyphony/backend_io_uring_context.c +21 -12
- data/ext/polyphony/backend_io_uring_context.h +12 -7
- data/ext/polyphony/backend_libev.c +1 -1
- data/ext/polyphony/extconf.rb +25 -8
- data/ext/polyphony/fiber.c +79 -2
- data/ext/polyphony/io_extensions.c +53 -0
- data/ext/polyphony/libev.h +0 -2
- data/ext/polyphony/pipe.c +42 -2
- data/ext/polyphony/polyphony.c +345 -31
- data/ext/polyphony/polyphony.h +9 -2
- data/ext/polyphony/queue.c +181 -0
- data/ext/polyphony/ring_buffer.c +0 -1
- data/ext/polyphony/runqueue.c +8 -1
- data/ext/polyphony/runqueue_ring_buffer.c +13 -0
- data/ext/polyphony/runqueue_ring_buffer.h +2 -1
- data/ext/polyphony/socket_extensions.c +6 -0
- data/ext/polyphony/thread.c +34 -2
- data/lib/polyphony/adapters/process.rb +11 -1
- data/lib/polyphony/adapters/sequel.rb +1 -1
- data/lib/polyphony/core/channel.rb +2 -0
- data/lib/polyphony/core/debug.rb +1 -1
- data/lib/polyphony/core/global_api.rb +25 -24
- data/lib/polyphony/core/resource_pool.rb +7 -6
- data/lib/polyphony/core/sync.rb +55 -2
- data/lib/polyphony/core/thread_pool.rb +3 -3
- data/lib/polyphony/core/timer.rb +8 -8
- data/lib/polyphony/extensions/exception.rb +2 -0
- data/lib/polyphony/extensions/fiber.rb +15 -13
- data/lib/polyphony/extensions/io.rb +161 -16
- data/lib/polyphony/extensions/kernel.rb +20 -2
- data/lib/polyphony/extensions/openssl.rb +101 -12
- data/lib/polyphony/extensions/pipe.rb +103 -7
- data/lib/polyphony/extensions/process.rb +13 -1
- data/lib/polyphony/extensions/socket.rb +93 -27
- data/lib/polyphony/extensions/thread.rb +9 -1
- data/lib/polyphony/extensions/timeout.rb +1 -1
- data/lib/polyphony/version.rb +2 -1
- data/lib/polyphony.rb +27 -7
- data/polyphony.gemspec +1 -8
- data/test/stress.rb +1 -1
- data/test/test_global_api.rb +45 -7
- data/test/test_io.rb +6 -7
- data/test/test_socket.rb +157 -0
- data/test/test_sync.rb +42 -1
- data/test/test_timer.rb +5 -5
- data/vendor/liburing/.github/workflows/build.yml +7 -16
- data/vendor/liburing/.gitignore +5 -0
- data/vendor/liburing/CHANGELOG +23 -1
- data/vendor/liburing/Makefile +4 -3
- data/vendor/liburing/Makefile.common +1 -0
- data/vendor/liburing/README +48 -0
- data/vendor/liburing/configure +76 -6
- data/vendor/liburing/debian/changelog +11 -0
- data/vendor/liburing/debian/control +7 -16
- data/vendor/liburing/debian/liburing-dev.manpages +3 -6
- data/vendor/liburing/debian/liburing2.install +1 -0
- data/vendor/liburing/debian/liburing2.symbols +56 -0
- data/vendor/liburing/debian/rules +15 -68
- data/vendor/liburing/examples/Makefile +4 -0
- data/vendor/liburing/examples/io_uring-close-test.c +123 -0
- data/vendor/liburing/examples/io_uring-udp.c +1 -1
- data/vendor/liburing/examples/send-zerocopy.c +315 -56
- data/vendor/liburing/examples/ucontext-cp.c +2 -17
- data/vendor/liburing/liburing-ffi.pc.in +12 -0
- data/vendor/liburing/liburing.pc.in +1 -1
- data/vendor/liburing/liburing.spec +1 -1
- data/vendor/liburing/make-debs.sh +3 -3
- data/vendor/liburing/man/IO_URING_CHECK_VERSION.3 +1 -0
- data/vendor/liburing/man/IO_URING_VERSION_MAJOR.3 +1 -0
- data/vendor/liburing/man/IO_URING_VERSION_MINOR.3 +1 -0
- data/vendor/liburing/man/io_uring_buf_ring_add.3 +6 -6
- data/vendor/liburing/man/io_uring_check_version.3 +72 -0
- data/vendor/liburing/man/io_uring_close_ring_fd.3 +43 -0
- data/vendor/liburing/man/io_uring_major_version.3 +1 -0
- data/vendor/liburing/man/io_uring_minor_version.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_accept.3 +1 -1
- data/vendor/liburing/man/io_uring_prep_fgetxattr.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_fsetxattr.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_getxattr.3 +61 -0
- data/vendor/liburing/man/io_uring_prep_link_timeout.3 +94 -0
- data/vendor/liburing/man/io_uring_prep_msg_ring.3 +22 -2
- data/vendor/liburing/man/io_uring_prep_msg_ring_cqe_flags.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_poll_add.3 +1 -1
- data/vendor/liburing/man/io_uring_prep_provide_buffers.3 +18 -9
- data/vendor/liburing/man/io_uring_prep_readv.3 +3 -3
- data/vendor/liburing/man/io_uring_prep_readv2.3 +3 -3
- data/vendor/liburing/man/io_uring_prep_recv.3 +5 -5
- data/vendor/liburing/man/io_uring_prep_recvmsg.3 +4 -4
- data/vendor/liburing/man/io_uring_prep_send.3 +9 -0
- data/vendor/liburing/man/io_uring_prep_send_set_addr.3 +38 -0
- data/vendor/liburing/man/io_uring_prep_send_zc.3 +39 -7
- data/vendor/liburing/man/io_uring_prep_send_zc_fixed.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_sendmsg.3 +20 -0
- data/vendor/liburing/man/io_uring_prep_sendmsg_zc.3 +1 -0
- data/vendor/liburing/man/io_uring_prep_setxattr.3 +64 -0
- data/vendor/liburing/man/io_uring_prep_splice.3 +40 -0
- data/vendor/liburing/man/io_uring_prep_writev.3 +2 -2
- data/vendor/liburing/man/io_uring_prep_writev2.3 +2 -2
- data/vendor/liburing/man/io_uring_recvmsg_out.3 +13 -9
- data/vendor/liburing/man/io_uring_register.2 +15 -9
- data/vendor/liburing/man/io_uring_register_buf_ring.3 +4 -4
- data/vendor/liburing/man/io_uring_register_buffers.3 +49 -6
- data/vendor/liburing/man/io_uring_register_buffers_sparse.3 +1 -0
- data/vendor/liburing/man/io_uring_register_buffers_tags.3 +1 -0
- data/vendor/liburing/man/io_uring_register_buffers_update_tag.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files.3 +60 -5
- data/vendor/liburing/man/io_uring_register_files_tags.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files_update.3 +1 -0
- data/vendor/liburing/man/io_uring_register_files_update_tag.3 +1 -0
- data/vendor/liburing/man/io_uring_setup.2 +31 -2
- data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +1 -1
- data/vendor/liburing/src/Makefile +25 -3
- data/vendor/liburing/src/ffi.c +15 -0
- data/vendor/liburing/src/include/liburing/io_uring.h +30 -7
- data/vendor/liburing/src/include/liburing.h +190 -148
- data/vendor/liburing/src/int_flags.h +1 -0
- data/vendor/liburing/src/lib.h +5 -16
- data/vendor/liburing/src/liburing-ffi.map +172 -0
- data/vendor/liburing/src/liburing.map +11 -0
- data/vendor/liburing/src/nolibc.c +9 -2
- data/vendor/liburing/src/queue.c +2 -2
- data/vendor/liburing/src/register.c +66 -96
- data/vendor/liburing/src/setup.c +5 -4
- data/vendor/liburing/src/version.c +21 -0
- data/vendor/liburing/test/232c93d07b74.c +3 -3
- data/vendor/liburing/test/35fa71a030ca.c +3 -3
- data/vendor/liburing/test/500f9fbadef8.c +2 -0
- data/vendor/liburing/test/917257daa0fe.c +1 -1
- data/vendor/liburing/test/Makefile +27 -7
- data/vendor/liburing/test/a0908ae19763.c +2 -2
- data/vendor/liburing/test/a4c0b3decb33.c +2 -2
- data/vendor/liburing/test/accept-link.c +4 -4
- data/vendor/liburing/test/accept-reuse.c +5 -7
- data/vendor/liburing/test/accept.c +34 -31
- data/vendor/liburing/test/b19062a56726.c +1 -1
- data/vendor/liburing/test/buf-ring.c +58 -4
- data/vendor/liburing/test/ce593a6c480a.c +2 -2
- data/vendor/liburing/test/close-opath.c +2 -1
- data/vendor/liburing/test/connect.c +8 -0
- data/vendor/liburing/test/cq-overflow.c +14 -8
- data/vendor/liburing/test/d4ae271dfaae.c +1 -1
- data/vendor/liburing/test/defer-taskrun.c +64 -9
- data/vendor/liburing/test/defer.c +1 -1
- data/vendor/liburing/test/double-poll-crash.c +3 -3
- data/vendor/liburing/test/eeed8b54e0df.c +8 -3
- data/vendor/liburing/test/eploop.c +74 -0
- data/vendor/liburing/test/eventfd-ring.c +1 -1
- data/vendor/liburing/test/eventfd.c +1 -1
- data/vendor/liburing/test/evloop.c +73 -0
- data/vendor/liburing/test/exit-no-cleanup.c +1 -1
- data/vendor/liburing/test/fadvise.c +1 -1
- data/vendor/liburing/test/fc2a85cb02ef.c +3 -3
- data/vendor/liburing/test/fd-pass.c +35 -16
- data/vendor/liburing/test/file-register.c +61 -0
- data/vendor/liburing/test/file-verify.c +2 -2
- data/vendor/liburing/test/files-exit-hang-timeout.c +2 -2
- data/vendor/liburing/test/fixed-link.c +1 -1
- data/vendor/liburing/test/fsnotify.c +118 -0
- data/vendor/liburing/test/hardlink.c +1 -1
- data/vendor/liburing/test/helpers.c +54 -2
- data/vendor/liburing/test/helpers.h +4 -0
- data/vendor/liburing/test/io-cancel.c +3 -1
- data/vendor/liburing/test/io_uring_passthrough.c +39 -8
- data/vendor/liburing/test/io_uring_setup.c +3 -80
- data/vendor/liburing/test/iopoll-overflow.c +118 -0
- data/vendor/liburing/test/iopoll.c +90 -4
- data/vendor/liburing/test/lfs-openat-write.c +7 -9
- data/vendor/liburing/test/lfs-openat.c +6 -8
- data/vendor/liburing/test/link_drain.c +31 -5
- data/vendor/liburing/test/madvise.c +1 -1
- data/vendor/liburing/test/msg-ring-flags.c +192 -0
- data/vendor/liburing/test/msg-ring-overflow.c +159 -0
- data/vendor/liburing/test/msg-ring.c +173 -13
- data/vendor/liburing/test/multicqes_drain.c +22 -19
- data/vendor/liburing/test/nvme.h +4 -3
- data/vendor/liburing/test/pipe-bug.c +95 -0
- data/vendor/liburing/test/poll-link.c +3 -3
- data/vendor/liburing/test/poll-many.c +41 -19
- data/vendor/liburing/test/poll-mshot-overflow.c +105 -2
- data/vendor/liburing/test/poll-race-mshot.c +292 -0
- data/vendor/liburing/test/poll-race.c +105 -0
- data/vendor/liburing/test/poll.c +244 -26
- data/vendor/liburing/test/pollfree.c +5 -5
- data/vendor/liburing/test/read-before-exit.c +20 -3
- data/vendor/liburing/test/read-write.c +2 -0
- data/vendor/liburing/test/recv-multishot.c +96 -3
- data/vendor/liburing/test/reg-reg-ring.c +90 -0
- data/vendor/liburing/test/rename.c +1 -1
- data/vendor/liburing/test/ring-leak.c +0 -1
- data/vendor/liburing/test/ring-leak2.c +1 -1
- data/vendor/liburing/test/ringbuf-read.c +10 -6
- data/vendor/liburing/test/send-zerocopy.c +273 -103
- data/vendor/liburing/test/send_recv.c +7 -4
- data/vendor/liburing/test/sendmsg_fs_cve.c +2 -2
- data/vendor/liburing/test/single-issuer.c +7 -9
- data/vendor/liburing/test/skip-cqe.c +3 -4
- data/vendor/liburing/test/socket.c +0 -1
- data/vendor/liburing/test/sq-poll-dup.c +10 -3
- data/vendor/liburing/test/sq-poll-kthread.c +1 -1
- data/vendor/liburing/test/sq-poll-share.c +3 -2
- data/vendor/liburing/test/sqpoll-cancel-hang.c +17 -6
- data/vendor/liburing/test/sqpoll-disable-exit.c +4 -4
- data/vendor/liburing/test/symlink.c +2 -1
- data/vendor/liburing/test/test.h +2 -1
- data/vendor/liburing/test/timeout-new.c +11 -7
- data/vendor/liburing/test/timeout.c +1 -2
- data/vendor/liburing/test/unlink.c +1 -1
- data/vendor/liburing/test/version.c +25 -0
- data/vendor/liburing/test/wakeup-hang.c +1 -1
- data/vendor/liburing/test/xattr.c +8 -4
- metadata +57 -44
- data/docs/_config.yml +0 -64
- data/docs/_includes/head.html +0 -40
- data/docs/_includes/title.html +0 -1
- data/docs/_sass/custom/custom.scss +0 -10
- data/docs/_sass/overrides.scss +0 -0
- data/docs/api-reference/exception.md +0 -31
- data/docs/api-reference/fiber.md +0 -425
- data/docs/api-reference/index.md +0 -9
- data/docs/api-reference/io.md +0 -36
- data/docs/api-reference/object.md +0 -99
- data/docs/api-reference/polyphony-baseexception.md +0 -33
- data/docs/api-reference/polyphony-cancel.md +0 -26
- data/docs/api-reference/polyphony-moveon.md +0 -24
- data/docs/api-reference/polyphony-net.md +0 -20
- data/docs/api-reference/polyphony-process.md +0 -28
- data/docs/api-reference/polyphony-resourcepool.md +0 -59
- data/docs/api-reference/polyphony-restart.md +0 -18
- data/docs/api-reference/polyphony-terminate.md +0 -18
- data/docs/api-reference/polyphony-threadpool.md +0 -67
- data/docs/api-reference/polyphony-throttler.md +0 -77
- data/docs/api-reference/polyphony.md +0 -36
- data/docs/api-reference/thread.md +0 -88
- data/docs/favicon.ico +0 -0
- data/docs/getting-started/index.md +0 -10
- data/docs/getting-started/installing.md +0 -34
- data/vendor/liburing/debian/compat +0 -1
- data/vendor/liburing/debian/liburing1-udeb.install +0 -1
- data/vendor/liburing/debian/liburing1.install +0 -1
- data/vendor/liburing/debian/liburing1.symbols +0 -32
- /data/{docs/assets/img → assets}/echo-fibers.svg +0 -0
- /data/{docs → assets}/polyphony-logo.png +0 -0
- /data/{docs/assets/img → assets}/sleeping-fiber.svg +0 -0
data/vendor/liburing/src/lib.h
CHANGED
|
@@ -37,25 +37,14 @@
|
|
|
37
37
|
#define __hot __attribute__((__hot__))
|
|
38
38
|
#define __cold __attribute__((__cold__))
|
|
39
39
|
|
|
40
|
+
#ifdef CONFIG_NOLIBC
|
|
41
|
+
void *__uring_memset(void *s, int c, size_t n);
|
|
40
42
|
void *__uring_malloc(size_t len);
|
|
41
43
|
void __uring_free(void *p);
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
return __uring_malloc(len);
|
|
47
|
-
#else
|
|
48
|
-
return malloc(len);
|
|
49
|
-
#endif
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
static inline void uring_free(void *ptr)
|
|
53
|
-
{
|
|
54
|
-
#ifdef CONFIG_NOLIBC
|
|
55
|
-
__uring_free(ptr);
|
|
56
|
-
#else
|
|
57
|
-
free(ptr);
|
|
45
|
+
#define malloc(LEN) __uring_malloc(LEN)
|
|
46
|
+
#define free(PTR) __uring_free(PTR)
|
|
47
|
+
#define memset(PTR, C, LEN) __uring_memset(PTR, C, LEN)
|
|
58
48
|
#endif
|
|
59
|
-
}
|
|
60
49
|
|
|
61
50
|
#endif /* #ifndef LIBURING_LIB_H */
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
LIBURING_2.4 {
|
|
2
|
+
global:
|
|
3
|
+
io_uring_get_probe;
|
|
4
|
+
io_uring_get_probe_ring;
|
|
5
|
+
io_uring_free_probe;
|
|
6
|
+
io_uring_get_sqe;
|
|
7
|
+
io_uring_peek_batch_cqe;
|
|
8
|
+
io_uring_queue_exit;
|
|
9
|
+
io_uring_queue_init;
|
|
10
|
+
io_uring_queue_init_params;
|
|
11
|
+
io_uring_queue_mmap;
|
|
12
|
+
io_uring_register_buffers;
|
|
13
|
+
io_uring_register_eventfd;
|
|
14
|
+
io_uring_register_eventfd_async;
|
|
15
|
+
io_uring_register_files;
|
|
16
|
+
io_uring_register_files_update;
|
|
17
|
+
io_uring_register_personality;
|
|
18
|
+
io_uring_register_probe;
|
|
19
|
+
io_uring_ring_dontfork;
|
|
20
|
+
io_uring_submit;
|
|
21
|
+
io_uring_submit_and_wait;
|
|
22
|
+
io_uring_unregister_buffers;
|
|
23
|
+
io_uring_unregister_eventfd;
|
|
24
|
+
io_uring_unregister_files;
|
|
25
|
+
io_uring_unregister_personality;
|
|
26
|
+
io_uring_wait_cqe_timeout;
|
|
27
|
+
io_uring_wait_cqes;
|
|
28
|
+
|
|
29
|
+
__io_uring_get_cqe;
|
|
30
|
+
__io_uring_sqring_wait;
|
|
31
|
+
|
|
32
|
+
io_uring_mlock_size_params;
|
|
33
|
+
io_uring_mlock_size;
|
|
34
|
+
io_uring_register_buffers_tags;
|
|
35
|
+
io_uring_register_buffers_update_tag;
|
|
36
|
+
io_uring_register_files_tags;
|
|
37
|
+
io_uring_register_files_update_tag;
|
|
38
|
+
io_uring_register_iowq_aff;
|
|
39
|
+
io_uring_unregister_iowq_aff;
|
|
40
|
+
io_uring_register_iowq_max_workers;
|
|
41
|
+
|
|
42
|
+
io_uring_submit_and_wait_timeout;
|
|
43
|
+
io_uring_register_ring_fd;
|
|
44
|
+
io_uring_unregister_ring_fd;
|
|
45
|
+
io_uring_register_files_sparse;
|
|
46
|
+
io_uring_register_buffers_sparse;
|
|
47
|
+
io_uring_register_buf_ring;
|
|
48
|
+
io_uring_unregister_buf_ring;
|
|
49
|
+
io_uring_close_ring_fd;
|
|
50
|
+
|
|
51
|
+
io_uring_register_sync_cancel;
|
|
52
|
+
io_uring_register_file_alloc_range;
|
|
53
|
+
io_uring_enter;
|
|
54
|
+
io_uring_enter2;
|
|
55
|
+
io_uring_setup;
|
|
56
|
+
io_uring_register;
|
|
57
|
+
io_uring_get_events;
|
|
58
|
+
io_uring_submit_and_get_events;
|
|
59
|
+
|
|
60
|
+
io_uring_major_version;
|
|
61
|
+
io_uring_minor_version;
|
|
62
|
+
io_uring_check_version;
|
|
63
|
+
|
|
64
|
+
io_uring_peek_cqe;
|
|
65
|
+
io_uring_prep_timeout_update;
|
|
66
|
+
io_uring_buf_ring_init;
|
|
67
|
+
io_uring_prep_mkdirat;
|
|
68
|
+
io_uring_prep_recv_multishot;
|
|
69
|
+
io_uring_cq_advance;
|
|
70
|
+
io_uring_prep_multishot_accept;
|
|
71
|
+
io_uring_prep_fallocate;
|
|
72
|
+
io_uring_prep_link_timeout;
|
|
73
|
+
io_uring_prep_fsync;
|
|
74
|
+
io_uring_prep_openat_direct;
|
|
75
|
+
io_uring_prep_multishot_accept_direct;
|
|
76
|
+
io_uring_opcode_supported;
|
|
77
|
+
io_uring_prep_madvise;
|
|
78
|
+
io_uring_prep_send_set_addr;
|
|
79
|
+
io_uring_recvmsg_payload_length;
|
|
80
|
+
io_uring_prep_readv2;
|
|
81
|
+
io_uring_prep_msg_ring;
|
|
82
|
+
io_uring_prep_rename;
|
|
83
|
+
io_uring_prep_fadvise;
|
|
84
|
+
io_uring_prep_send_zc;
|
|
85
|
+
io_uring_buf_ring_advance;
|
|
86
|
+
io_uring_cqe_get_data;
|
|
87
|
+
io_uring_prep_symlinkat;
|
|
88
|
+
io_uring_prep_writev;
|
|
89
|
+
io_uring_cq_eventfd_toggle;
|
|
90
|
+
io_uring_prep_provide_buffers;
|
|
91
|
+
io_uring_cq_has_overflow;
|
|
92
|
+
io_uring_prep_cancel_fd;
|
|
93
|
+
io_uring_prep_socket;
|
|
94
|
+
io_uring_prep_close_direct;
|
|
95
|
+
io_uring_recvmsg_name;
|
|
96
|
+
io_uring_prep_timeout_remove;
|
|
97
|
+
io_uring_sqring_wait;
|
|
98
|
+
io_uring_cq_eventfd_enabled;
|
|
99
|
+
io_uring_prep_remove_buffers;
|
|
100
|
+
io_uring_prep_tee;
|
|
101
|
+
io_uring_prep_accept_direct;
|
|
102
|
+
io_uring_prep_nop;
|
|
103
|
+
io_uring_prep_getxattr;
|
|
104
|
+
io_uring_prep_link;
|
|
105
|
+
io_uring_prep_cancel;
|
|
106
|
+
io_uring_prep_readv;
|
|
107
|
+
io_uring_prep_connect;
|
|
108
|
+
io_uring_cq_ready;
|
|
109
|
+
io_uring_enable_rings;
|
|
110
|
+
io_uring_prep_shutdown;
|
|
111
|
+
io_uring_prep_openat;
|
|
112
|
+
io_uring_sq_space_left;
|
|
113
|
+
io_uring_recvmsg_payload;
|
|
114
|
+
io_uring_prep_send;
|
|
115
|
+
io_uring_buf_ring_add;
|
|
116
|
+
io_uring_prep_send_zc_fixed;
|
|
117
|
+
io_uring_prep_epoll_ctl;
|
|
118
|
+
io_uring_recvmsg_cmsg_firsthdr;
|
|
119
|
+
io_uring_prep_socket_direct;
|
|
120
|
+
io_uring_buf_ring_cq_advance;
|
|
121
|
+
io_uring_prep_mkdir;
|
|
122
|
+
io_uring_wait_cqe_nr;
|
|
123
|
+
io_uring_prep_unlink;
|
|
124
|
+
io_uring_prep_writev2;
|
|
125
|
+
io_uring_prep_openat2_direct;
|
|
126
|
+
io_uring_sqe_set_flags;
|
|
127
|
+
io_uring_sqe_set_data;
|
|
128
|
+
io_uring_prep_accept;
|
|
129
|
+
io_uring_prep_poll_update;
|
|
130
|
+
io_uring_prep_splice;
|
|
131
|
+
io_uring_prep_poll_multishot;
|
|
132
|
+
io_uring_prep_symlink;
|
|
133
|
+
io_uring_sqe_set_data64;
|
|
134
|
+
io_uring_prep_cancel64;
|
|
135
|
+
io_uring_prep_fsetxattr;
|
|
136
|
+
io_uring_prep_recvmsg_multishot;
|
|
137
|
+
io_uring_cqe_seen;
|
|
138
|
+
io_uring_prep_sendmsg_zc;
|
|
139
|
+
io_uring_prep_read;
|
|
140
|
+
io_uring_prep_statx;
|
|
141
|
+
io_uring_prep_sendmsg;
|
|
142
|
+
io_uring_prep_unlinkat;
|
|
143
|
+
io_uring_prep_setxattr;
|
|
144
|
+
io_uring_cqe_get_data64;
|
|
145
|
+
io_uring_prep_renameat;
|
|
146
|
+
io_uring_prep_poll_remove;
|
|
147
|
+
io_uring_prep_close;
|
|
148
|
+
io_uring_sq_ready;
|
|
149
|
+
io_uring_prep_files_update;
|
|
150
|
+
io_uring_wait_cqe;
|
|
151
|
+
io_uring_prep_fgetxattr;
|
|
152
|
+
io_uring_prep_socket_direct_alloc;
|
|
153
|
+
io_uring_prep_sync_file_range;
|
|
154
|
+
io_uring_prep_read_fixed;
|
|
155
|
+
io_uring_prep_openat2;
|
|
156
|
+
io_uring_prep_recvmsg;
|
|
157
|
+
io_uring_recvmsg_cmsg_nexthdr;
|
|
158
|
+
io_uring_recvmsg_validate;
|
|
159
|
+
io_uring_prep_rw;
|
|
160
|
+
io_uring_prep_timeout;
|
|
161
|
+
io_uring_prep_linkat;
|
|
162
|
+
io_uring_prep_write_fixed;
|
|
163
|
+
io_uring_prep_poll_add;
|
|
164
|
+
io_uring_buf_ring_mask;
|
|
165
|
+
io_uring_register_restrictions;
|
|
166
|
+
io_uring_prep_write;
|
|
167
|
+
io_uring_prep_recv;
|
|
168
|
+
io_uring_prep_msg_ring_cqe_flags;
|
|
169
|
+
io_uring_prep_msg_ring_fd;
|
|
170
|
+
local:
|
|
171
|
+
*;
|
|
172
|
+
};
|
|
@@ -67,3 +67,14 @@ LIBURING_2.3 {
|
|
|
67
67
|
io_uring_get_events;
|
|
68
68
|
io_uring_submit_and_get_events;
|
|
69
69
|
} LIBURING_2.2;
|
|
70
|
+
|
|
71
|
+
LIBURING_2.4 {
|
|
72
|
+
global:
|
|
73
|
+
io_uring_major_version;
|
|
74
|
+
io_uring_minor_version;
|
|
75
|
+
io_uring_check_version;
|
|
76
|
+
|
|
77
|
+
io_uring_close_ring_fd;
|
|
78
|
+
io_uring_enable_rings;
|
|
79
|
+
io_uring_register_restrictions;
|
|
80
|
+
} LIBURING_2.3;
|
|
@@ -7,14 +7,21 @@
|
|
|
7
7
|
#include "lib.h"
|
|
8
8
|
#include "syscall.h"
|
|
9
9
|
|
|
10
|
-
void *
|
|
10
|
+
void *__uring_memset(void *s, int c, size_t n)
|
|
11
11
|
{
|
|
12
12
|
size_t i;
|
|
13
13
|
unsigned char *p = s;
|
|
14
14
|
|
|
15
|
-
for (i = 0; i < n; i++)
|
|
15
|
+
for (i = 0; i < n; i++) {
|
|
16
16
|
p[i] = (unsigned char) c;
|
|
17
17
|
|
|
18
|
+
/*
|
|
19
|
+
* An empty inline ASM to avoid auto-vectorization
|
|
20
|
+
* because it's too bloated for liburing.
|
|
21
|
+
*/
|
|
22
|
+
__asm__ volatile ("");
|
|
23
|
+
}
|
|
24
|
+
|
|
18
25
|
return s;
|
|
19
26
|
}
|
|
20
27
|
|
data/vendor/liburing/src/queue.c
CHANGED
|
@@ -81,7 +81,7 @@ static int _io_uring_get_cqe(struct io_uring *ring,
|
|
|
81
81
|
}
|
|
82
82
|
if (!cqe && !data->wait_nr && !data->submit) {
|
|
83
83
|
/*
|
|
84
|
-
* If we already looped once, we already
|
|
84
|
+
* If we already looped once, we already entered
|
|
85
85
|
* the kernel. Since there's nothing to submit or
|
|
86
86
|
* wait for, don't keep retrying.
|
|
87
87
|
*/
|
|
@@ -201,7 +201,7 @@ again:
|
|
|
201
201
|
* Sync internal state with kernel ring state on the SQ side. Returns the
|
|
202
202
|
* number of pending items in the SQ ring, for the shared ring.
|
|
203
203
|
*/
|
|
204
|
-
unsigned __io_uring_flush_sq(struct io_uring *ring)
|
|
204
|
+
static unsigned __io_uring_flush_sq(struct io_uring *ring)
|
|
205
205
|
{
|
|
206
206
|
struct io_uring_sq *sq = &ring->sq;
|
|
207
207
|
unsigned tail = sq->sqe_tail;
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
#include "liburing/compat.h"
|
|
9
9
|
#include "liburing/io_uring.h"
|
|
10
10
|
|
|
11
|
+
static inline int do_register(struct io_uring *ring, unsigned int opcode,
|
|
12
|
+
const void *arg, unsigned int nr_args)
|
|
13
|
+
{
|
|
14
|
+
if (ring->int_flags & INT_FLAG_REG_REG_RING) {
|
|
15
|
+
opcode |= IORING_REGISTER_USE_REGISTERED_RING;
|
|
16
|
+
return __sys_io_uring_register(ring->enter_ring_fd, opcode, arg, nr_args);
|
|
17
|
+
}
|
|
18
|
+
return __sys_io_uring_register(ring->ring_fd, opcode, arg, nr_args);
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
int io_uring_register_buffers_update_tag(struct io_uring *ring, unsigned off,
|
|
12
22
|
const struct iovec *iovecs,
|
|
13
23
|
const __u64 *tags,
|
|
@@ -20,8 +30,7 @@ int io_uring_register_buffers_update_tag(struct io_uring *ring, unsigned off,
|
|
|
20
30
|
.nr = nr,
|
|
21
31
|
};
|
|
22
32
|
|
|
23
|
-
return
|
|
24
|
-
sizeof(up));
|
|
33
|
+
return do_register(ring, IORING_REGISTER_BUFFERS_UPDATE, &up, sizeof(up));
|
|
25
34
|
}
|
|
26
35
|
|
|
27
36
|
int io_uring_register_buffers_tags(struct io_uring *ring,
|
|
@@ -35,9 +44,7 @@ int io_uring_register_buffers_tags(struct io_uring *ring,
|
|
|
35
44
|
.tags = (unsigned long)tags,
|
|
36
45
|
};
|
|
37
46
|
|
|
38
|
-
return
|
|
39
|
-
IORING_REGISTER_BUFFERS2, ®,
|
|
40
|
-
sizeof(reg));
|
|
47
|
+
return do_register(ring, IORING_REGISTER_BUFFERS2, ®, sizeof(reg));
|
|
41
48
|
}
|
|
42
49
|
|
|
43
50
|
int io_uring_register_buffers_sparse(struct io_uring *ring, unsigned nr)
|
|
@@ -47,27 +54,18 @@ int io_uring_register_buffers_sparse(struct io_uring *ring, unsigned nr)
|
|
|
47
54
|
.nr = nr,
|
|
48
55
|
};
|
|
49
56
|
|
|
50
|
-
return
|
|
51
|
-
®, sizeof(reg));
|
|
57
|
+
return do_register(ring, IORING_REGISTER_BUFFERS2, ®, sizeof(reg));
|
|
52
58
|
}
|
|
53
59
|
|
|
54
60
|
int io_uring_register_buffers(struct io_uring *ring, const struct iovec *iovecs,
|
|
55
61
|
unsigned nr_iovecs)
|
|
56
62
|
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_BUFFERS,
|
|
60
|
-
iovecs, nr_iovecs);
|
|
61
|
-
return (ret < 0) ? ret : 0;
|
|
63
|
+
return do_register(ring, IORING_REGISTER_BUFFERS, iovecs, nr_iovecs);
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
int io_uring_unregister_buffers(struct io_uring *ring)
|
|
65
67
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_BUFFERS,
|
|
69
|
-
NULL, 0);
|
|
70
|
-
return (ret < 0) ? ret : 0;
|
|
68
|
+
return do_register(ring, IORING_UNREGISTER_BUFFERS, NULL, 0);
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
int io_uring_register_files_update_tag(struct io_uring *ring, unsigned off,
|
|
@@ -81,9 +79,7 @@ int io_uring_register_files_update_tag(struct io_uring *ring, unsigned off,
|
|
|
81
79
|
.nr = nr_files,
|
|
82
80
|
};
|
|
83
81
|
|
|
84
|
-
return
|
|
85
|
-
IORING_REGISTER_FILES_UPDATE2, &up,
|
|
86
|
-
sizeof(up));
|
|
82
|
+
return do_register(ring, IORING_REGISTER_FILES_UPDATE2, &up, sizeof(up));
|
|
87
83
|
}
|
|
88
84
|
|
|
89
85
|
/*
|
|
@@ -101,9 +97,7 @@ int io_uring_register_files_update(struct io_uring *ring, unsigned off,
|
|
|
101
97
|
.fds = (unsigned long) files,
|
|
102
98
|
};
|
|
103
99
|
|
|
104
|
-
return
|
|
105
|
-
IORING_REGISTER_FILES_UPDATE, &up,
|
|
106
|
-
nr_files);
|
|
100
|
+
return do_register(ring, IORING_REGISTER_FILES_UPDATE, &up, nr_files);
|
|
107
101
|
}
|
|
108
102
|
|
|
109
103
|
static int increase_rlimit_nofile(unsigned nr)
|
|
@@ -132,9 +126,7 @@ int io_uring_register_files_sparse(struct io_uring *ring, unsigned nr)
|
|
|
132
126
|
int ret, did_increase = 0;
|
|
133
127
|
|
|
134
128
|
do {
|
|
135
|
-
ret =
|
|
136
|
-
IORING_REGISTER_FILES2, ®,
|
|
137
|
-
sizeof(reg));
|
|
129
|
+
ret = do_register(ring, IORING_REGISTER_FILES2, ®, sizeof(reg));
|
|
138
130
|
if (ret >= 0)
|
|
139
131
|
break;
|
|
140
132
|
if (ret == -EMFILE && !did_increase) {
|
|
@@ -159,9 +151,7 @@ int io_uring_register_files_tags(struct io_uring *ring, const int *files,
|
|
|
159
151
|
int ret, did_increase = 0;
|
|
160
152
|
|
|
161
153
|
do {
|
|
162
|
-
ret =
|
|
163
|
-
IORING_REGISTER_FILES2, ®,
|
|
164
|
-
sizeof(reg));
|
|
154
|
+
ret = do_register(ring, IORING_REGISTER_FILES2, ®, sizeof(reg));
|
|
165
155
|
if (ret >= 0)
|
|
166
156
|
break;
|
|
167
157
|
if (ret == -EMFILE && !did_increase) {
|
|
@@ -181,9 +171,7 @@ int io_uring_register_files(struct io_uring *ring, const int *files,
|
|
|
181
171
|
int ret, did_increase = 0;
|
|
182
172
|
|
|
183
173
|
do {
|
|
184
|
-
ret =
|
|
185
|
-
IORING_REGISTER_FILES, files,
|
|
186
|
-
nr_files);
|
|
174
|
+
ret = do_register(ring, IORING_REGISTER_FILES, files, nr_files);
|
|
187
175
|
if (ret >= 0)
|
|
188
176
|
break;
|
|
189
177
|
if (ret == -EMFILE && !did_increase) {
|
|
@@ -199,79 +187,50 @@ int io_uring_register_files(struct io_uring *ring, const int *files,
|
|
|
199
187
|
|
|
200
188
|
int io_uring_unregister_files(struct io_uring *ring)
|
|
201
189
|
{
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_FILES,
|
|
205
|
-
NULL, 0);
|
|
206
|
-
return (ret < 0) ? ret : 0;
|
|
190
|
+
return do_register(ring, IORING_UNREGISTER_FILES, NULL, 0);
|
|
207
191
|
}
|
|
208
192
|
|
|
209
193
|
int io_uring_register_eventfd(struct io_uring *ring, int event_fd)
|
|
210
194
|
{
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_EVENTFD,
|
|
214
|
-
&event_fd, 1);
|
|
215
|
-
return (ret < 0) ? ret : 0;
|
|
195
|
+
return do_register(ring, IORING_REGISTER_EVENTFD, &event_fd, 1);
|
|
216
196
|
}
|
|
217
197
|
|
|
218
198
|
int io_uring_unregister_eventfd(struct io_uring *ring)
|
|
219
199
|
{
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_EVENTFD,
|
|
223
|
-
NULL, 0);
|
|
224
|
-
return (ret < 0) ? ret : 0;
|
|
200
|
+
return do_register(ring, IORING_UNREGISTER_EVENTFD, NULL, 0);
|
|
225
201
|
}
|
|
226
202
|
|
|
227
203
|
int io_uring_register_eventfd_async(struct io_uring *ring, int event_fd)
|
|
228
204
|
{
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
ret = __sys_io_uring_register(ring->ring_fd,
|
|
232
|
-
IORING_REGISTER_EVENTFD_ASYNC, &event_fd,
|
|
233
|
-
1);
|
|
234
|
-
return (ret < 0) ? ret : 0;
|
|
205
|
+
return do_register(ring, IORING_REGISTER_EVENTFD_ASYNC, &event_fd, 1);
|
|
235
206
|
}
|
|
236
207
|
|
|
237
208
|
int io_uring_register_probe(struct io_uring *ring, struct io_uring_probe *p,
|
|
238
209
|
unsigned int nr_ops)
|
|
239
210
|
{
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_PROBE, p,
|
|
243
|
-
nr_ops);
|
|
244
|
-
return (ret < 0) ? ret : 0;
|
|
211
|
+
return do_register(ring, IORING_REGISTER_PROBE, p, nr_ops);
|
|
245
212
|
}
|
|
246
213
|
|
|
247
214
|
int io_uring_register_personality(struct io_uring *ring)
|
|
248
215
|
{
|
|
249
|
-
return
|
|
250
|
-
IORING_REGISTER_PERSONALITY, NULL, 0);
|
|
216
|
+
return do_register(ring, IORING_REGISTER_PERSONALITY, NULL, 0);
|
|
251
217
|
}
|
|
252
218
|
|
|
253
219
|
int io_uring_unregister_personality(struct io_uring *ring, int id)
|
|
254
220
|
{
|
|
255
|
-
return
|
|
256
|
-
IORING_UNREGISTER_PERSONALITY, NULL, id);
|
|
221
|
+
return do_register(ring, IORING_UNREGISTER_PERSONALITY, NULL, id);
|
|
257
222
|
}
|
|
258
223
|
|
|
259
224
|
int io_uring_register_restrictions(struct io_uring *ring,
|
|
260
225
|
struct io_uring_restriction *res,
|
|
261
226
|
unsigned int nr_res)
|
|
262
227
|
{
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
ret = __sys_io_uring_register(ring->ring_fd,
|
|
266
|
-
IORING_REGISTER_RESTRICTIONS, res,
|
|
267
|
-
nr_res);
|
|
268
|
-
return (ret < 0) ? ret : 0;
|
|
228
|
+
return do_register(ring, IORING_REGISTER_RESTRICTIONS, res, nr_res);
|
|
269
229
|
}
|
|
270
230
|
|
|
271
231
|
int io_uring_enable_rings(struct io_uring *ring)
|
|
272
232
|
{
|
|
273
|
-
return
|
|
274
|
-
IORING_REGISTER_ENABLE_RINGS, NULL, 0);
|
|
233
|
+
return do_register(ring, IORING_REGISTER_ENABLE_RINGS, NULL, 0);
|
|
275
234
|
}
|
|
276
235
|
|
|
277
236
|
int io_uring_register_iowq_aff(struct io_uring *ring, size_t cpusz,
|
|
@@ -280,21 +239,17 @@ int io_uring_register_iowq_aff(struct io_uring *ring, size_t cpusz,
|
|
|
280
239
|
if (cpusz >= (1U << 31))
|
|
281
240
|
return -EINVAL;
|
|
282
241
|
|
|
283
|
-
return
|
|
284
|
-
mask, (int) cpusz);
|
|
242
|
+
return do_register(ring, IORING_REGISTER_IOWQ_AFF, mask, (int) cpusz);
|
|
285
243
|
}
|
|
286
244
|
|
|
287
245
|
int io_uring_unregister_iowq_aff(struct io_uring *ring)
|
|
288
246
|
{
|
|
289
|
-
return
|
|
290
|
-
IORING_UNREGISTER_IOWQ_AFF, NULL, 0);
|
|
247
|
+
return do_register(ring, IORING_UNREGISTER_IOWQ_AFF, NULL, 0);
|
|
291
248
|
}
|
|
292
249
|
|
|
293
250
|
int io_uring_register_iowq_max_workers(struct io_uring *ring, unsigned int *val)
|
|
294
251
|
{
|
|
295
|
-
return
|
|
296
|
-
IORING_REGISTER_IOWQ_MAX_WORKERS, val,
|
|
297
|
-
2);
|
|
252
|
+
return do_register(ring, IORING_REGISTER_IOWQ_MAX_WORKERS, val, 2);
|
|
298
253
|
}
|
|
299
254
|
|
|
300
255
|
int io_uring_register_ring_fd(struct io_uring *ring)
|
|
@@ -305,11 +260,16 @@ int io_uring_register_ring_fd(struct io_uring *ring)
|
|
|
305
260
|
};
|
|
306
261
|
int ret;
|
|
307
262
|
|
|
308
|
-
|
|
309
|
-
|
|
263
|
+
if (ring->int_flags & INT_FLAG_REG_RING)
|
|
264
|
+
return -EEXIST;
|
|
265
|
+
|
|
266
|
+
ret = do_register(ring, IORING_REGISTER_RING_FDS, &up, 1);
|
|
310
267
|
if (ret == 1) {
|
|
311
268
|
ring->enter_ring_fd = up.offset;
|
|
312
269
|
ring->int_flags |= INT_FLAG_REG_RING;
|
|
270
|
+
if (ring->features & IORING_FEAT_REG_REG_RING) {
|
|
271
|
+
ring->int_flags |= INT_FLAG_REG_REG_RING;
|
|
272
|
+
}
|
|
313
273
|
}
|
|
314
274
|
return ret;
|
|
315
275
|
}
|
|
@@ -322,48 +282,58 @@ int io_uring_unregister_ring_fd(struct io_uring *ring)
|
|
|
322
282
|
};
|
|
323
283
|
int ret;
|
|
324
284
|
|
|
325
|
-
|
|
326
|
-
|
|
285
|
+
if (!(ring->int_flags & INT_FLAG_REG_RING))
|
|
286
|
+
return -EINVAL;
|
|
287
|
+
|
|
288
|
+
ret = do_register(ring, IORING_UNREGISTER_RING_FDS, &up, 1);
|
|
327
289
|
if (ret == 1) {
|
|
328
290
|
ring->enter_ring_fd = ring->ring_fd;
|
|
329
|
-
ring->int_flags &= ~INT_FLAG_REG_RING;
|
|
291
|
+
ring->int_flags &= ~(INT_FLAG_REG_RING | INT_FLAG_REG_REG_RING);
|
|
330
292
|
}
|
|
331
293
|
return ret;
|
|
332
294
|
}
|
|
333
295
|
|
|
296
|
+
int io_uring_close_ring_fd(struct io_uring *ring)
|
|
297
|
+
{
|
|
298
|
+
if (!(ring->features & IORING_FEAT_REG_REG_RING))
|
|
299
|
+
return -EOPNOTSUPP;
|
|
300
|
+
if (!(ring->int_flags & INT_FLAG_REG_RING))
|
|
301
|
+
return -EINVAL;
|
|
302
|
+
if (ring->ring_fd == -1)
|
|
303
|
+
return -EBADF;
|
|
304
|
+
|
|
305
|
+
__sys_close(ring->ring_fd);
|
|
306
|
+
ring->ring_fd = -1;
|
|
307
|
+
return 1;
|
|
308
|
+
}
|
|
309
|
+
|
|
334
310
|
int io_uring_register_buf_ring(struct io_uring *ring,
|
|
335
311
|
struct io_uring_buf_reg *reg,
|
|
336
312
|
unsigned int __maybe_unused flags)
|
|
337
313
|
{
|
|
338
|
-
return
|
|
339
|
-
reg, 1);
|
|
314
|
+
return do_register(ring, IORING_REGISTER_PBUF_RING, reg, 1);
|
|
340
315
|
}
|
|
341
316
|
|
|
342
317
|
int io_uring_unregister_buf_ring(struct io_uring *ring, int bgid)
|
|
343
318
|
{
|
|
344
319
|
struct io_uring_buf_reg reg = { .bgid = bgid };
|
|
345
320
|
|
|
346
|
-
return
|
|
347
|
-
IORING_UNREGISTER_PBUF_RING, ®, 1);
|
|
321
|
+
return do_register(ring, IORING_UNREGISTER_PBUF_RING, ®, 1);
|
|
348
322
|
}
|
|
349
323
|
|
|
350
324
|
int io_uring_register_sync_cancel(struct io_uring *ring,
|
|
351
325
|
struct io_uring_sync_cancel_reg *reg)
|
|
352
326
|
{
|
|
353
|
-
return
|
|
354
|
-
IORING_REGISTER_SYNC_CANCEL, reg, 1);
|
|
327
|
+
return do_register(ring, IORING_REGISTER_SYNC_CANCEL, reg, 1);
|
|
355
328
|
}
|
|
356
329
|
|
|
357
330
|
int io_uring_register_file_alloc_range(struct io_uring *ring,
|
|
358
331
|
unsigned off, unsigned len)
|
|
359
332
|
{
|
|
360
|
-
struct io_uring_file_index_range range
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
range.len = len;
|
|
333
|
+
struct io_uring_file_index_range range = {
|
|
334
|
+
.off = off,
|
|
335
|
+
.len = len
|
|
336
|
+
};
|
|
365
337
|
|
|
366
|
-
return
|
|
367
|
-
IORING_REGISTER_FILE_ALLOC_RANGE, &range,
|
|
368
|
-
0);
|
|
338
|
+
return do_register(ring, IORING_REGISTER_FILE_ALLOC_RANGE, &range, 0);
|
|
369
339
|
}
|
data/vendor/liburing/src/setup.c
CHANGED
|
@@ -205,7 +205,8 @@ __cold void io_uring_queue_exit(struct io_uring *ring)
|
|
|
205
205
|
*/
|
|
206
206
|
if (ring->int_flags & INT_FLAG_REG_RING)
|
|
207
207
|
io_uring_unregister_ring_fd(ring);
|
|
208
|
-
|
|
208
|
+
if (ring->ring_fd != -1)
|
|
209
|
+
__sys_close(ring->ring_fd);
|
|
209
210
|
}
|
|
210
211
|
|
|
211
212
|
__cold struct io_uring_probe *io_uring_get_probe_ring(struct io_uring *ring)
|
|
@@ -215,7 +216,7 @@ __cold struct io_uring_probe *io_uring_get_probe_ring(struct io_uring *ring)
|
|
|
215
216
|
int r;
|
|
216
217
|
|
|
217
218
|
len = sizeof(*probe) + 256 * sizeof(struct io_uring_probe_op);
|
|
218
|
-
probe =
|
|
219
|
+
probe = malloc(len);
|
|
219
220
|
if (!probe)
|
|
220
221
|
return NULL;
|
|
221
222
|
memset(probe, 0, len);
|
|
@@ -224,7 +225,7 @@ __cold struct io_uring_probe *io_uring_get_probe_ring(struct io_uring *ring)
|
|
|
224
225
|
if (r >= 0)
|
|
225
226
|
return probe;
|
|
226
227
|
|
|
227
|
-
|
|
228
|
+
free(probe);
|
|
228
229
|
return NULL;
|
|
229
230
|
}
|
|
230
231
|
|
|
@@ -245,7 +246,7 @@ __cold struct io_uring_probe *io_uring_get_probe(void)
|
|
|
245
246
|
|
|
246
247
|
__cold void io_uring_free_probe(struct io_uring_probe *probe)
|
|
247
248
|
{
|
|
248
|
-
|
|
249
|
+
free(probe);
|
|
249
250
|
}
|
|
250
251
|
|
|
251
252
|
static inline int __fls(unsigned long x)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
|
|
3
|
+
#include "liburing.h"
|
|
4
|
+
#include "liburing/io_uring_version.h"
|
|
5
|
+
|
|
6
|
+
int io_uring_major_version(void)
|
|
7
|
+
{
|
|
8
|
+
return IO_URING_VERSION_MAJOR;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
int io_uring_minor_version(void)
|
|
12
|
+
{
|
|
13
|
+
return IO_URING_VERSION_MINOR;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
bool io_uring_check_version(int major, int minor)
|
|
17
|
+
{
|
|
18
|
+
return major > io_uring_major_version() ||
|
|
19
|
+
(major == io_uring_major_version() &&
|
|
20
|
+
minor >= io_uring_minor_version());
|
|
21
|
+
}
|
|
@@ -33,9 +33,9 @@ struct params {
|
|
|
33
33
|
__be16 bind_port;
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
-
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
37
|
-
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
|
38
|
-
int rcv_ready = 0;
|
|
36
|
+
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
37
|
+
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
|
38
|
+
static int rcv_ready = 0;
|
|
39
39
|
|
|
40
40
|
static void set_rcv_ready(void)
|
|
41
41
|
{
|
|
@@ -176,7 +176,7 @@ static void kill_and_wait(int pid, int* status)
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
#define SYZ_HAVE_SETUP_TEST 1
|
|
179
|
-
static void setup_test()
|
|
179
|
+
static void setup_test(void)
|
|
180
180
|
{
|
|
181
181
|
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
|
|
182
182
|
setpgrp();
|
|
@@ -262,7 +262,7 @@ static void loop(void)
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
-
uint64_t r[1] = {0xffffffffffffffff};
|
|
265
|
+
static uint64_t r[1] = {0xffffffffffffffff};
|
|
266
266
|
|
|
267
267
|
void execute_call(int call)
|
|
268
268
|
{
|
|
@@ -320,7 +320,7 @@ int main(int argc, char *argv[])
|
|
|
320
320
|
if (argc > 1)
|
|
321
321
|
return T_EXIT_SKIP;
|
|
322
322
|
signal(SIGINT, sig_int);
|
|
323
|
-
mmap((void *) 0x20000000, 0x1000000, 3,
|
|
323
|
+
mmap((void *) 0x20000000, 0x1000000, 3, MAP_ANON|MAP_PRIVATE, -1, 0);
|
|
324
324
|
signal(SIGALRM, sig_int);
|
|
325
325
|
alarm(5);
|
|
326
326
|
|