@nxtedition/rocksdb 5.2.36 → 5.2.39
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.
- package/binding.cc +66 -91
- package/deps/liburing/liburing/COPYING +502 -0
- package/deps/liburing/liburing/COPYING.GPL +339 -0
- package/deps/liburing/liburing/LICENSE +7 -0
- package/deps/liburing/liburing/Makefile +84 -0
- package/deps/liburing/liburing/Makefile.quiet +11 -0
- package/deps/liburing/liburing/README +46 -0
- package/deps/liburing/liburing/configure +420 -0
- package/deps/liburing/liburing/debian/README.Debian +7 -0
- package/deps/liburing/liburing/debian/changelog +27 -0
- package/deps/liburing/liburing/debian/compat +1 -0
- package/deps/liburing/liburing/debian/control +48 -0
- package/deps/liburing/liburing/debian/copyright +49 -0
- package/deps/liburing/liburing/debian/liburing-dev.install +4 -0
- package/deps/liburing/liburing/debian/liburing-dev.manpages +6 -0
- package/deps/liburing/liburing/debian/liburing1-udeb.install +1 -0
- package/deps/liburing/liburing/debian/liburing1.install +1 -0
- package/deps/liburing/liburing/debian/liburing1.symbols +32 -0
- package/deps/liburing/liburing/debian/patches/series +1 -0
- package/deps/liburing/liburing/debian/rules +81 -0
- package/deps/liburing/liburing/debian/source/format +1 -0
- package/deps/liburing/liburing/debian/source/local-options +2 -0
- package/deps/liburing/liburing/debian/source/options +1 -0
- package/deps/liburing/liburing/debian/watch +3 -0
- package/deps/liburing/liburing/examples/Makefile +29 -0
- package/deps/liburing/liburing/examples/io_uring-cp.c +279 -0
- package/deps/liburing/liburing/examples/io_uring-test.c +112 -0
- package/deps/liburing/liburing/examples/link-cp.c +193 -0
- package/deps/liburing/liburing/examples/ucontext-cp.c +273 -0
- package/deps/liburing/liburing/liburing.pc.in +12 -0
- package/deps/liburing/liburing/liburing.spec +66 -0
- package/deps/liburing/liburing/make-debs.sh +53 -0
- package/deps/liburing/liburing/man/io_uring.7 +736 -0
- package/deps/liburing/liburing/man/io_uring_enter.2 +1403 -0
- package/deps/liburing/liburing/man/io_uring_get_sqe.3 +37 -0
- package/deps/liburing/liburing/man/io_uring_queue_exit.3 +27 -0
- package/deps/liburing/liburing/man/io_uring_queue_init.3 +44 -0
- package/deps/liburing/liburing/man/io_uring_register.2 +605 -0
- package/deps/liburing/liburing/man/io_uring_setup.2 +515 -0
- package/deps/liburing/liburing/src/Makefile +76 -0
- package/deps/liburing/liburing/src/include/liburing/barrier.h +73 -0
- package/deps/liburing/liburing/src/include/liburing/io_uring.h +422 -0
- package/deps/liburing/liburing/src/include/liburing.h +775 -0
- package/deps/liburing/liburing/src/liburing.map +46 -0
- package/deps/liburing/liburing/src/queue.c +403 -0
- package/deps/liburing/liburing/src/register.c +299 -0
- package/deps/liburing/liburing/src/setup.c +356 -0
- package/deps/liburing/liburing/src/syscall.c +73 -0
- package/deps/liburing/liburing/src/syscall.h +20 -0
- package/deps/liburing/liburing/test/232c93d07b74-test.c +305 -0
- package/deps/liburing/liburing/test/35fa71a030ca-test.c +329 -0
- package/deps/liburing/liburing/test/500f9fbadef8-test.c +89 -0
- package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +93 -0
- package/deps/liburing/liburing/test/8a9973408177-test.c +106 -0
- package/deps/liburing/liburing/test/917257daa0fe-test.c +53 -0
- package/deps/liburing/liburing/test/Makefile +312 -0
- package/deps/liburing/liburing/test/a0908ae19763-test.c +58 -0
- package/deps/liburing/liburing/test/a4c0b3decb33-test.c +180 -0
- package/deps/liburing/liburing/test/accept-link.c +251 -0
- package/deps/liburing/liburing/test/accept-reuse.c +164 -0
- package/deps/liburing/liburing/test/accept-test.c +79 -0
- package/deps/liburing/liburing/test/accept.c +476 -0
- package/deps/liburing/liburing/test/across-fork.c +283 -0
- package/deps/liburing/liburing/test/b19062a56726-test.c +53 -0
- package/deps/liburing/liburing/test/b5837bd5311d-test.c +77 -0
- package/deps/liburing/liburing/test/ce593a6c480a-test.c +135 -0
- package/deps/liburing/liburing/test/close-opath.c +122 -0
- package/deps/liburing/liburing/test/config +10 -0
- package/deps/liburing/liburing/test/connect.c +398 -0
- package/deps/liburing/liburing/test/cq-full.c +96 -0
- package/deps/liburing/liburing/test/cq-overflow.c +294 -0
- package/deps/liburing/liburing/test/cq-peek-batch.c +102 -0
- package/deps/liburing/liburing/test/cq-ready.c +94 -0
- package/deps/liburing/liburing/test/cq-size.c +58 -0
- package/deps/liburing/liburing/test/d4ae271dfaae-test.c +96 -0
- package/deps/liburing/liburing/test/d77a67ed5f27-test.c +65 -0
- package/deps/liburing/liburing/test/defer.c +307 -0
- package/deps/liburing/liburing/test/double-poll-crash.c +186 -0
- package/deps/liburing/liburing/test/eeed8b54e0df-test.c +114 -0
- package/deps/liburing/liburing/test/empty-eownerdead.c +42 -0
- package/deps/liburing/liburing/test/eventfd-disable.c +151 -0
- package/deps/liburing/liburing/test/eventfd-ring.c +97 -0
- package/deps/liburing/liburing/test/eventfd.c +112 -0
- package/deps/liburing/liburing/test/fadvise.c +202 -0
- package/deps/liburing/liburing/test/fallocate.c +249 -0
- package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +138 -0
- package/deps/liburing/liburing/test/file-register.c +843 -0
- package/deps/liburing/liburing/test/file-update.c +173 -0
- package/deps/liburing/liburing/test/files-exit-hang-poll.c +128 -0
- package/deps/liburing/liburing/test/files-exit-hang-timeout.c +134 -0
- package/deps/liburing/liburing/test/fixed-link.c +90 -0
- package/deps/liburing/liburing/test/fsync.c +224 -0
- package/deps/liburing/liburing/test/hardlink.c +136 -0
- package/deps/liburing/liburing/test/helpers.c +135 -0
- package/deps/liburing/liburing/test/helpers.h +67 -0
- package/deps/liburing/liburing/test/io-cancel.c +537 -0
- package/deps/liburing/liburing/test/io_uring_enter.c +296 -0
- package/deps/liburing/liburing/test/io_uring_register.c +664 -0
- package/deps/liburing/liburing/test/io_uring_setup.c +192 -0
- package/deps/liburing/liburing/test/iopoll.c +366 -0
- package/deps/liburing/liburing/test/lfs-openat-write.c +117 -0
- package/deps/liburing/liburing/test/lfs-openat.c +273 -0
- package/deps/liburing/liburing/test/link-timeout.c +1107 -0
- package/deps/liburing/liburing/test/link.c +496 -0
- package/deps/liburing/liburing/test/link_drain.c +229 -0
- package/deps/liburing/liburing/test/madvise.c +195 -0
- package/deps/liburing/liburing/test/mkdir.c +108 -0
- package/deps/liburing/liburing/test/multicqes_drain.c +383 -0
- package/deps/liburing/liburing/test/nop-all-sizes.c +107 -0
- package/deps/liburing/liburing/test/nop.c +115 -0
- package/deps/liburing/liburing/test/open-close.c +146 -0
- package/deps/liburing/liburing/test/openat2.c +240 -0
- package/deps/liburing/liburing/test/personality.c +204 -0
- package/deps/liburing/liburing/test/pipe-eof.c +81 -0
- package/deps/liburing/liburing/test/pipe-reuse.c +105 -0
- package/deps/liburing/liburing/test/poll-cancel-ton.c +139 -0
- package/deps/liburing/liburing/test/poll-cancel.c +135 -0
- package/deps/liburing/liburing/test/poll-link.c +227 -0
- package/deps/liburing/liburing/test/poll-many.c +208 -0
- package/deps/liburing/liburing/test/poll-mshot-update.c +273 -0
- package/deps/liburing/liburing/test/poll-ring.c +48 -0
- package/deps/liburing/liburing/test/poll-v-poll.c +353 -0
- package/deps/liburing/liburing/test/poll.c +109 -0
- package/deps/liburing/liburing/test/probe.c +137 -0
- package/deps/liburing/liburing/test/read-write.c +876 -0
- package/deps/liburing/liburing/test/register-restrictions.c +633 -0
- package/deps/liburing/liburing/test/rename.c +134 -0
- package/deps/liburing/liburing/test/ring-leak.c +173 -0
- package/deps/liburing/liburing/test/ring-leak2.c +249 -0
- package/deps/liburing/liburing/test/rsrc_tags.c +449 -0
- package/deps/liburing/liburing/test/runtests-loop.sh +16 -0
- package/deps/liburing/liburing/test/runtests.sh +170 -0
- package/deps/liburing/liburing/test/rw_merge_test.c +97 -0
- package/deps/liburing/liburing/test/self.c +91 -0
- package/deps/liburing/liburing/test/send_recv.c +291 -0
- package/deps/liburing/liburing/test/send_recvmsg.c +345 -0
- package/deps/liburing/liburing/test/sendmsg_fs_cve.c +198 -0
- package/deps/liburing/liburing/test/shared-wq.c +84 -0
- package/deps/liburing/liburing/test/short-read.c +75 -0
- package/deps/liburing/liburing/test/shutdown.c +163 -0
- package/deps/liburing/liburing/test/sigfd-deadlock.c +74 -0
- package/deps/liburing/liburing/test/socket-rw-eagain.c +156 -0
- package/deps/liburing/liburing/test/socket-rw.c +147 -0
- package/deps/liburing/liburing/test/splice.c +511 -0
- package/deps/liburing/liburing/test/sq-full-cpp.cc +45 -0
- package/deps/liburing/liburing/test/sq-full.c +45 -0
- package/deps/liburing/liburing/test/sq-poll-dup.c +200 -0
- package/deps/liburing/liburing/test/sq-poll-kthread.c +168 -0
- package/deps/liburing/liburing/test/sq-poll-share.c +137 -0
- package/deps/liburing/liburing/test/sq-space_left.c +159 -0
- package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +159 -0
- package/deps/liburing/liburing/test/sqpoll-disable-exit.c +195 -0
- package/deps/liburing/liburing/test/sqpoll-exit-hang.c +77 -0
- package/deps/liburing/liburing/test/sqpoll-sleep.c +68 -0
- package/deps/liburing/liburing/test/statx.c +172 -0
- package/deps/liburing/liburing/test/stdout.c +232 -0
- package/deps/liburing/liburing/test/submit-link-fail.c +154 -0
- package/deps/liburing/liburing/test/submit-reuse.c +239 -0
- package/deps/liburing/liburing/test/symlink.c +116 -0
- package/deps/liburing/liburing/test/teardowns.c +58 -0
- package/deps/liburing/liburing/test/thread-exit.c +131 -0
- package/deps/liburing/liburing/test/timeout-new.c +246 -0
- package/deps/liburing/liburing/test/timeout-overflow.c +204 -0
- package/deps/liburing/liburing/test/timeout.c +1354 -0
- package/deps/liburing/liburing/test/unlink.c +111 -0
- package/deps/liburing/liburing/test/wakeup-hang.c +162 -0
- package/deps/liburing/liburing.gyp +20 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +62 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -62
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +25 -11
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +74 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +13 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +4 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +22 -4
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +3 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +3 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -29
- package/deps/rocksdb/rocksdb.gyp +4 -3
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/prebuilds/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
#define _POSIX_C_SOURCE 200112L
|
|
3
|
+
|
|
4
|
+
#include <sys/types.h>
|
|
5
|
+
#include <sys/stat.h>
|
|
6
|
+
#include <sys/mman.h>
|
|
7
|
+
#include <unistd.h>
|
|
8
|
+
#include <errno.h>
|
|
9
|
+
#include <string.h>
|
|
10
|
+
|
|
11
|
+
#include "liburing/compat.h"
|
|
12
|
+
#include "liburing/io_uring.h"
|
|
13
|
+
#include "liburing.h"
|
|
14
|
+
|
|
15
|
+
#include "syscall.h"
|
|
16
|
+
|
|
17
|
+
int io_uring_register_buffers_update_tag(struct io_uring *ring, unsigned off,
|
|
18
|
+
const struct iovec *iovecs,
|
|
19
|
+
const __u64 *tags,
|
|
20
|
+
unsigned nr)
|
|
21
|
+
{
|
|
22
|
+
struct io_uring_rsrc_update2 up = {
|
|
23
|
+
.offset = off,
|
|
24
|
+
.data = (unsigned long)iovecs,
|
|
25
|
+
.tags = (unsigned long)tags,
|
|
26
|
+
.nr = nr,
|
|
27
|
+
};
|
|
28
|
+
int ret;
|
|
29
|
+
|
|
30
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
31
|
+
IORING_REGISTER_BUFFERS_UPDATE,
|
|
32
|
+
&up, sizeof(up));
|
|
33
|
+
return ret < 0 ? -errno : ret;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
int io_uring_register_buffers_tags(struct io_uring *ring,
|
|
37
|
+
const struct iovec *iovecs,
|
|
38
|
+
const __u64 *tags,
|
|
39
|
+
unsigned nr)
|
|
40
|
+
{
|
|
41
|
+
struct io_uring_rsrc_register reg = {
|
|
42
|
+
.nr = nr,
|
|
43
|
+
.data = (unsigned long)iovecs,
|
|
44
|
+
.tags = (unsigned long)tags,
|
|
45
|
+
};
|
|
46
|
+
int ret;
|
|
47
|
+
|
|
48
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_BUFFERS2,
|
|
49
|
+
®, sizeof(reg));
|
|
50
|
+
return ret < 0 ? -errno : ret;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
int io_uring_register_buffers(struct io_uring *ring, const struct iovec *iovecs,
|
|
54
|
+
unsigned nr_iovecs)
|
|
55
|
+
{
|
|
56
|
+
int ret;
|
|
57
|
+
|
|
58
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_BUFFERS,
|
|
59
|
+
iovecs, nr_iovecs);
|
|
60
|
+
if (ret < 0)
|
|
61
|
+
return -errno;
|
|
62
|
+
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
int io_uring_unregister_buffers(struct io_uring *ring)
|
|
67
|
+
{
|
|
68
|
+
int ret;
|
|
69
|
+
|
|
70
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_BUFFERS,
|
|
71
|
+
NULL, 0);
|
|
72
|
+
if (ret < 0)
|
|
73
|
+
return -errno;
|
|
74
|
+
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
int io_uring_register_files_update_tag(struct io_uring *ring, unsigned off,
|
|
79
|
+
const int *files, const __u64 *tags,
|
|
80
|
+
unsigned nr_files)
|
|
81
|
+
{
|
|
82
|
+
struct io_uring_rsrc_update2 up = {
|
|
83
|
+
.offset = off,
|
|
84
|
+
.data = (unsigned long)files,
|
|
85
|
+
.tags = (unsigned long)tags,
|
|
86
|
+
.nr = nr_files,
|
|
87
|
+
};
|
|
88
|
+
int ret;
|
|
89
|
+
|
|
90
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
91
|
+
IORING_REGISTER_FILES_UPDATE2,
|
|
92
|
+
&up, sizeof(up));
|
|
93
|
+
return ret < 0 ? -errno : ret;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/*
|
|
97
|
+
* Register an update for an existing file set. The updates will start at
|
|
98
|
+
* 'off' in the original array, and 'nr_files' is the number of files we'll
|
|
99
|
+
* update.
|
|
100
|
+
*
|
|
101
|
+
* Returns number of files updated on success, -ERROR on failure.
|
|
102
|
+
*/
|
|
103
|
+
int io_uring_register_files_update(struct io_uring *ring, unsigned off,
|
|
104
|
+
int *files, unsigned nr_files)
|
|
105
|
+
{
|
|
106
|
+
struct io_uring_files_update up = {
|
|
107
|
+
.offset = off,
|
|
108
|
+
.fds = (unsigned long) files,
|
|
109
|
+
};
|
|
110
|
+
int ret;
|
|
111
|
+
|
|
112
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
113
|
+
IORING_REGISTER_FILES_UPDATE, &up,
|
|
114
|
+
nr_files);
|
|
115
|
+
if (ret < 0)
|
|
116
|
+
return -errno;
|
|
117
|
+
|
|
118
|
+
return ret;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
int io_uring_register_files_tags(struct io_uring *ring,
|
|
123
|
+
const int *files, const __u64 *tags,
|
|
124
|
+
unsigned nr)
|
|
125
|
+
{
|
|
126
|
+
struct io_uring_rsrc_register reg = {
|
|
127
|
+
.nr = nr,
|
|
128
|
+
.data = (unsigned long)files,
|
|
129
|
+
.tags = (unsigned long)tags,
|
|
130
|
+
};
|
|
131
|
+
int ret;
|
|
132
|
+
|
|
133
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_FILES2,
|
|
134
|
+
®, sizeof(reg));
|
|
135
|
+
return ret < 0 ? -errno : ret;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
int io_uring_register_files(struct io_uring *ring, const int *files,
|
|
139
|
+
unsigned nr_files)
|
|
140
|
+
{
|
|
141
|
+
int ret;
|
|
142
|
+
|
|
143
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_FILES,
|
|
144
|
+
files, nr_files);
|
|
145
|
+
if (ret < 0)
|
|
146
|
+
return -errno;
|
|
147
|
+
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
int io_uring_unregister_files(struct io_uring *ring)
|
|
152
|
+
{
|
|
153
|
+
int ret;
|
|
154
|
+
|
|
155
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_FILES,
|
|
156
|
+
NULL, 0);
|
|
157
|
+
if (ret < 0)
|
|
158
|
+
return -errno;
|
|
159
|
+
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
int io_uring_register_eventfd(struct io_uring *ring, int event_fd)
|
|
164
|
+
{
|
|
165
|
+
int ret;
|
|
166
|
+
|
|
167
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_EVENTFD,
|
|
168
|
+
&event_fd, 1);
|
|
169
|
+
if (ret < 0)
|
|
170
|
+
return -errno;
|
|
171
|
+
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
int io_uring_unregister_eventfd(struct io_uring *ring)
|
|
176
|
+
{
|
|
177
|
+
int ret;
|
|
178
|
+
|
|
179
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_EVENTFD,
|
|
180
|
+
NULL, 0);
|
|
181
|
+
if (ret < 0)
|
|
182
|
+
return -errno;
|
|
183
|
+
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
int io_uring_register_eventfd_async(struct io_uring *ring, int event_fd)
|
|
188
|
+
{
|
|
189
|
+
int ret;
|
|
190
|
+
|
|
191
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_EVENTFD_ASYNC,
|
|
192
|
+
&event_fd, 1);
|
|
193
|
+
if (ret < 0)
|
|
194
|
+
return -errno;
|
|
195
|
+
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
int io_uring_register_probe(struct io_uring *ring, struct io_uring_probe *p,
|
|
200
|
+
unsigned int nr_ops)
|
|
201
|
+
{
|
|
202
|
+
int ret;
|
|
203
|
+
|
|
204
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_PROBE,
|
|
205
|
+
p, nr_ops);
|
|
206
|
+
if (ret < 0)
|
|
207
|
+
return -errno;
|
|
208
|
+
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
int io_uring_register_personality(struct io_uring *ring)
|
|
213
|
+
{
|
|
214
|
+
int ret;
|
|
215
|
+
|
|
216
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_PERSONALITY,
|
|
217
|
+
NULL, 0);
|
|
218
|
+
if (ret < 0)
|
|
219
|
+
return -errno;
|
|
220
|
+
|
|
221
|
+
return ret;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
int io_uring_unregister_personality(struct io_uring *ring, int id)
|
|
225
|
+
{
|
|
226
|
+
int ret;
|
|
227
|
+
|
|
228
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_UNREGISTER_PERSONALITY,
|
|
229
|
+
NULL, id);
|
|
230
|
+
if (ret < 0)
|
|
231
|
+
return -errno;
|
|
232
|
+
|
|
233
|
+
return ret;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
int io_uring_register_restrictions(struct io_uring *ring,
|
|
237
|
+
struct io_uring_restriction *res,
|
|
238
|
+
unsigned int nr_res)
|
|
239
|
+
{
|
|
240
|
+
int ret;
|
|
241
|
+
|
|
242
|
+
ret = __sys_io_uring_register(ring->ring_fd, IORING_REGISTER_RESTRICTIONS,
|
|
243
|
+
res, nr_res);
|
|
244
|
+
if (ret < 0)
|
|
245
|
+
return -errno;
|
|
246
|
+
|
|
247
|
+
return 0;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
int io_uring_enable_rings(struct io_uring *ring)
|
|
251
|
+
{
|
|
252
|
+
int ret;
|
|
253
|
+
|
|
254
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
255
|
+
IORING_REGISTER_ENABLE_RINGS, NULL, 0);
|
|
256
|
+
if (ret < 0)
|
|
257
|
+
return -errno;
|
|
258
|
+
|
|
259
|
+
return ret;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
int io_uring_register_iowq_aff(struct io_uring *ring, size_t cpusz,
|
|
263
|
+
const cpu_set_t *mask)
|
|
264
|
+
{
|
|
265
|
+
int ret;
|
|
266
|
+
|
|
267
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
268
|
+
IORING_REGISTER_IOWQ_AFF, mask, cpusz);
|
|
269
|
+
if (ret < 0)
|
|
270
|
+
return -errno;
|
|
271
|
+
|
|
272
|
+
return ret;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
int io_uring_unregister_iowq_aff(struct io_uring *ring)
|
|
276
|
+
{
|
|
277
|
+
int ret;
|
|
278
|
+
|
|
279
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
280
|
+
IORING_REGISTER_IOWQ_AFF, NULL, 0);
|
|
281
|
+
if (ret < 0)
|
|
282
|
+
return -errno;
|
|
283
|
+
|
|
284
|
+
return ret;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
int io_uring_register_iowq_max_workers(struct io_uring *ring, unsigned int *val)
|
|
288
|
+
{
|
|
289
|
+
int ret;
|
|
290
|
+
|
|
291
|
+
ret = __sys_io_uring_register(ring->ring_fd,
|
|
292
|
+
IORING_REGISTER_IOWQ_MAX_WORKERS,
|
|
293
|
+
val, 2);
|
|
294
|
+
if (ret < 0)
|
|
295
|
+
return -errno;
|
|
296
|
+
|
|
297
|
+
return ret;
|
|
298
|
+
|
|
299
|
+
}
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
#define _DEFAULT_SOURCE
|
|
3
|
+
|
|
4
|
+
#include <sys/types.h>
|
|
5
|
+
#include <sys/stat.h>
|
|
6
|
+
#include <sys/mman.h>
|
|
7
|
+
#include <unistd.h>
|
|
8
|
+
#include <errno.h>
|
|
9
|
+
#include <string.h>
|
|
10
|
+
#include <stdlib.h>
|
|
11
|
+
#include <signal.h>
|
|
12
|
+
|
|
13
|
+
#include "liburing/compat.h"
|
|
14
|
+
#include "liburing/io_uring.h"
|
|
15
|
+
#include "liburing.h"
|
|
16
|
+
|
|
17
|
+
#include "syscall.h"
|
|
18
|
+
|
|
19
|
+
static void io_uring_unmap_rings(struct io_uring_sq *sq, struct io_uring_cq *cq)
|
|
20
|
+
{
|
|
21
|
+
munmap(sq->ring_ptr, sq->ring_sz);
|
|
22
|
+
if (cq->ring_ptr && cq->ring_ptr != sq->ring_ptr)
|
|
23
|
+
munmap(cq->ring_ptr, cq->ring_sz);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static int io_uring_mmap(int fd, struct io_uring_params *p,
|
|
27
|
+
struct io_uring_sq *sq, struct io_uring_cq *cq)
|
|
28
|
+
{
|
|
29
|
+
size_t size;
|
|
30
|
+
int ret;
|
|
31
|
+
|
|
32
|
+
sq->ring_sz = p->sq_off.array + p->sq_entries * sizeof(unsigned);
|
|
33
|
+
cq->ring_sz = p->cq_off.cqes + p->cq_entries * sizeof(struct io_uring_cqe);
|
|
34
|
+
|
|
35
|
+
if (p->features & IORING_FEAT_SINGLE_MMAP) {
|
|
36
|
+
if (cq->ring_sz > sq->ring_sz)
|
|
37
|
+
sq->ring_sz = cq->ring_sz;
|
|
38
|
+
cq->ring_sz = sq->ring_sz;
|
|
39
|
+
}
|
|
40
|
+
sq->ring_ptr = mmap(0, sq->ring_sz, PROT_READ | PROT_WRITE,
|
|
41
|
+
MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_SQ_RING);
|
|
42
|
+
if (sq->ring_ptr == MAP_FAILED)
|
|
43
|
+
return -errno;
|
|
44
|
+
|
|
45
|
+
if (p->features & IORING_FEAT_SINGLE_MMAP) {
|
|
46
|
+
cq->ring_ptr = sq->ring_ptr;
|
|
47
|
+
} else {
|
|
48
|
+
cq->ring_ptr = mmap(0, cq->ring_sz, PROT_READ | PROT_WRITE,
|
|
49
|
+
MAP_SHARED | MAP_POPULATE, fd, IORING_OFF_CQ_RING);
|
|
50
|
+
if (cq->ring_ptr == MAP_FAILED) {
|
|
51
|
+
cq->ring_ptr = NULL;
|
|
52
|
+
ret = -errno;
|
|
53
|
+
goto err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
sq->khead = sq->ring_ptr + p->sq_off.head;
|
|
58
|
+
sq->ktail = sq->ring_ptr + p->sq_off.tail;
|
|
59
|
+
sq->kring_mask = sq->ring_ptr + p->sq_off.ring_mask;
|
|
60
|
+
sq->kring_entries = sq->ring_ptr + p->sq_off.ring_entries;
|
|
61
|
+
sq->kflags = sq->ring_ptr + p->sq_off.flags;
|
|
62
|
+
sq->kdropped = sq->ring_ptr + p->sq_off.dropped;
|
|
63
|
+
sq->array = sq->ring_ptr + p->sq_off.array;
|
|
64
|
+
|
|
65
|
+
size = p->sq_entries * sizeof(struct io_uring_sqe);
|
|
66
|
+
sq->sqes = mmap(0, size, PROT_READ | PROT_WRITE,
|
|
67
|
+
MAP_SHARED | MAP_POPULATE, fd,
|
|
68
|
+
IORING_OFF_SQES);
|
|
69
|
+
if (sq->sqes == MAP_FAILED) {
|
|
70
|
+
ret = -errno;
|
|
71
|
+
err:
|
|
72
|
+
io_uring_unmap_rings(sq, cq);
|
|
73
|
+
return ret;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
cq->khead = cq->ring_ptr + p->cq_off.head;
|
|
77
|
+
cq->ktail = cq->ring_ptr + p->cq_off.tail;
|
|
78
|
+
cq->kring_mask = cq->ring_ptr + p->cq_off.ring_mask;
|
|
79
|
+
cq->kring_entries = cq->ring_ptr + p->cq_off.ring_entries;
|
|
80
|
+
cq->koverflow = cq->ring_ptr + p->cq_off.overflow;
|
|
81
|
+
cq->cqes = cq->ring_ptr + p->cq_off.cqes;
|
|
82
|
+
if (p->cq_off.flags)
|
|
83
|
+
cq->kflags = cq->ring_ptr + p->cq_off.flags;
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* For users that want to specify sq_thread_cpu or sq_thread_idle, this
|
|
89
|
+
* interface is a convenient helper for mmap()ing the rings.
|
|
90
|
+
* Returns -errno on error, or zero on success. On success, 'ring'
|
|
91
|
+
* contains the necessary information to read/write to the rings.
|
|
92
|
+
*/
|
|
93
|
+
int io_uring_queue_mmap(int fd, struct io_uring_params *p, struct io_uring *ring)
|
|
94
|
+
{
|
|
95
|
+
int ret;
|
|
96
|
+
|
|
97
|
+
memset(ring, 0, sizeof(*ring));
|
|
98
|
+
ret = io_uring_mmap(fd, p, &ring->sq, &ring->cq);
|
|
99
|
+
if (!ret) {
|
|
100
|
+
ring->flags = p->flags;
|
|
101
|
+
ring->ring_fd = fd;
|
|
102
|
+
}
|
|
103
|
+
return ret;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* Ensure that the mmap'ed rings aren't available to a child after a fork(2).
|
|
108
|
+
* This uses madvise(..., MADV_DONTFORK) on the mmap'ed ranges.
|
|
109
|
+
*/
|
|
110
|
+
int io_uring_ring_dontfork(struct io_uring *ring)
|
|
111
|
+
{
|
|
112
|
+
size_t len;
|
|
113
|
+
int ret;
|
|
114
|
+
|
|
115
|
+
if (!ring->sq.ring_ptr || !ring->sq.sqes || !ring->cq.ring_ptr)
|
|
116
|
+
return -EINVAL;
|
|
117
|
+
|
|
118
|
+
len = *ring->sq.kring_entries * sizeof(struct io_uring_sqe);
|
|
119
|
+
ret = madvise(ring->sq.sqes, len, MADV_DONTFORK);
|
|
120
|
+
if (ret == -1)
|
|
121
|
+
return -errno;
|
|
122
|
+
|
|
123
|
+
len = ring->sq.ring_sz;
|
|
124
|
+
ret = madvise(ring->sq.ring_ptr, len, MADV_DONTFORK);
|
|
125
|
+
if (ret == -1)
|
|
126
|
+
return -errno;
|
|
127
|
+
|
|
128
|
+
if (ring->cq.ring_ptr != ring->sq.ring_ptr) {
|
|
129
|
+
len = ring->cq.ring_sz;
|
|
130
|
+
ret = madvise(ring->cq.ring_ptr, len, MADV_DONTFORK);
|
|
131
|
+
if (ret == -1)
|
|
132
|
+
return -errno;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
int io_uring_queue_init_params(unsigned entries, struct io_uring *ring,
|
|
139
|
+
struct io_uring_params *p)
|
|
140
|
+
{
|
|
141
|
+
int fd, ret;
|
|
142
|
+
|
|
143
|
+
fd = __sys_io_uring_setup(entries, p);
|
|
144
|
+
if (fd < 0)
|
|
145
|
+
return -errno;
|
|
146
|
+
|
|
147
|
+
ret = io_uring_queue_mmap(fd, p, ring);
|
|
148
|
+
if (ret) {
|
|
149
|
+
close(fd);
|
|
150
|
+
return ret;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
ring->features = p->features;
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
* Returns -errno on error, or zero on success. On success, 'ring'
|
|
159
|
+
* contains the necessary information to read/write to the rings.
|
|
160
|
+
*/
|
|
161
|
+
int io_uring_queue_init(unsigned entries, struct io_uring *ring, unsigned flags)
|
|
162
|
+
{
|
|
163
|
+
struct io_uring_params p;
|
|
164
|
+
|
|
165
|
+
memset(&p, 0, sizeof(p));
|
|
166
|
+
p.flags = flags;
|
|
167
|
+
|
|
168
|
+
return io_uring_queue_init_params(entries, ring, &p);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
void io_uring_queue_exit(struct io_uring *ring)
|
|
172
|
+
{
|
|
173
|
+
struct io_uring_sq *sq = &ring->sq;
|
|
174
|
+
struct io_uring_cq *cq = &ring->cq;
|
|
175
|
+
|
|
176
|
+
munmap(sq->sqes, *sq->kring_entries * sizeof(struct io_uring_sqe));
|
|
177
|
+
io_uring_unmap_rings(sq, cq);
|
|
178
|
+
close(ring->ring_fd);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
struct io_uring_probe *io_uring_get_probe_ring(struct io_uring *ring)
|
|
182
|
+
{
|
|
183
|
+
struct io_uring_probe *probe;
|
|
184
|
+
size_t len;
|
|
185
|
+
int r;
|
|
186
|
+
|
|
187
|
+
len = sizeof(*probe) + 256 * sizeof(struct io_uring_probe_op);
|
|
188
|
+
probe = malloc(len);
|
|
189
|
+
if (!probe)
|
|
190
|
+
return NULL;
|
|
191
|
+
memset(probe, 0, len);
|
|
192
|
+
|
|
193
|
+
r = io_uring_register_probe(ring, probe, 256);
|
|
194
|
+
if (r >= 0)
|
|
195
|
+
return probe;
|
|
196
|
+
|
|
197
|
+
free(probe);
|
|
198
|
+
return NULL;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
struct io_uring_probe *io_uring_get_probe(void)
|
|
202
|
+
{
|
|
203
|
+
struct io_uring ring;
|
|
204
|
+
struct io_uring_probe *probe;
|
|
205
|
+
int r;
|
|
206
|
+
|
|
207
|
+
r = io_uring_queue_init(2, &ring, 0);
|
|
208
|
+
if (r < 0)
|
|
209
|
+
return NULL;
|
|
210
|
+
|
|
211
|
+
probe = io_uring_get_probe_ring(&ring);
|
|
212
|
+
io_uring_queue_exit(&ring);
|
|
213
|
+
return probe;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
void io_uring_free_probe(struct io_uring_probe *probe)
|
|
217
|
+
{
|
|
218
|
+
free(probe);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
static int __fls(int x)
|
|
222
|
+
{
|
|
223
|
+
int r = 32;
|
|
224
|
+
|
|
225
|
+
if (!x)
|
|
226
|
+
return 0;
|
|
227
|
+
if (!(x & 0xffff0000u)) {
|
|
228
|
+
x <<= 16;
|
|
229
|
+
r -= 16;
|
|
230
|
+
}
|
|
231
|
+
if (!(x & 0xff000000u)) {
|
|
232
|
+
x <<= 8;
|
|
233
|
+
r -= 8;
|
|
234
|
+
}
|
|
235
|
+
if (!(x & 0xf0000000u)) {
|
|
236
|
+
x <<= 4;
|
|
237
|
+
r -= 4;
|
|
238
|
+
}
|
|
239
|
+
if (!(x & 0xc0000000u)) {
|
|
240
|
+
x <<= 2;
|
|
241
|
+
r -= 2;
|
|
242
|
+
}
|
|
243
|
+
if (!(x & 0x80000000u)) {
|
|
244
|
+
x <<= 1;
|
|
245
|
+
r -= 1;
|
|
246
|
+
}
|
|
247
|
+
return r;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
static unsigned roundup_pow2(unsigned depth)
|
|
251
|
+
{
|
|
252
|
+
return 1UL << __fls(depth - 1);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
static size_t npages(size_t size, unsigned page_size)
|
|
256
|
+
{
|
|
257
|
+
size--;
|
|
258
|
+
size /= page_size;
|
|
259
|
+
return __fls(size);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
#define KRING_SIZE 320
|
|
263
|
+
|
|
264
|
+
static size_t rings_size(unsigned entries, unsigned cq_entries, unsigned page_size)
|
|
265
|
+
{
|
|
266
|
+
size_t pages, sq_size, cq_size;
|
|
267
|
+
|
|
268
|
+
cq_size = KRING_SIZE;
|
|
269
|
+
cq_size += cq_entries * sizeof(struct io_uring_cqe);
|
|
270
|
+
cq_size = (cq_size + 63) & ~63UL;
|
|
271
|
+
pages = (size_t) 1 << npages(cq_size, page_size);
|
|
272
|
+
|
|
273
|
+
sq_size = sizeof(struct io_uring_sqe) * entries;
|
|
274
|
+
pages += (size_t) 1 << npages(sq_size, page_size);
|
|
275
|
+
return pages * page_size;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
#define KERN_MAX_ENTRIES 32768
|
|
279
|
+
#define KERN_MAX_CQ_ENTRIES (2 * KERN_MAX_ENTRIES)
|
|
280
|
+
|
|
281
|
+
/*
|
|
282
|
+
* Return the required ulimit -l memlock memory required for a given ring
|
|
283
|
+
* setup, in bytes. May return -errno on error. On newer (5.12+) kernels,
|
|
284
|
+
* io_uring no longer requires any memlock memory, and hence this function
|
|
285
|
+
* will return 0 for that case. On older (5.11 and prior) kernels, this will
|
|
286
|
+
* return the required memory so that the caller can ensure that enough space
|
|
287
|
+
* is available before setting up a ring with the specified parameters.
|
|
288
|
+
*/
|
|
289
|
+
ssize_t io_uring_mlock_size_params(unsigned entries, struct io_uring_params *p)
|
|
290
|
+
{
|
|
291
|
+
struct io_uring_params lp = { };
|
|
292
|
+
struct io_uring ring;
|
|
293
|
+
unsigned cq_entries;
|
|
294
|
+
long page_size;
|
|
295
|
+
ssize_t ret;
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* We only really use this inited ring to see if the kernel is newer
|
|
299
|
+
* or not. Newer kernels don't require memlocked memory. If we fail,
|
|
300
|
+
* it's most likely because it's an older kernel and we have no
|
|
301
|
+
* available memlock space. Just continue on, lp.features will still
|
|
302
|
+
* be zeroed at this point and we'll do the right thing.
|
|
303
|
+
*/
|
|
304
|
+
ret = io_uring_queue_init_params(entries, &ring, &lp);
|
|
305
|
+
if (!ret)
|
|
306
|
+
io_uring_queue_exit(&ring);
|
|
307
|
+
|
|
308
|
+
/*
|
|
309
|
+
* Native workers imply using cgroup memory accounting, and hence no
|
|
310
|
+
* memlock memory is needed for the ring allocations.
|
|
311
|
+
*/
|
|
312
|
+
if (lp.features & IORING_FEAT_NATIVE_WORKERS)
|
|
313
|
+
return 0;
|
|
314
|
+
|
|
315
|
+
if (!entries)
|
|
316
|
+
return -EINVAL;
|
|
317
|
+
if (entries > KERN_MAX_ENTRIES) {
|
|
318
|
+
if (!(p->flags & IORING_SETUP_CLAMP))
|
|
319
|
+
return -EINVAL;
|
|
320
|
+
entries = KERN_MAX_ENTRIES;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
entries = roundup_pow2(entries);
|
|
324
|
+
if (p->flags & IORING_SETUP_CQSIZE) {
|
|
325
|
+
if (!p->cq_entries)
|
|
326
|
+
return -EINVAL;
|
|
327
|
+
cq_entries = p->cq_entries;
|
|
328
|
+
if (cq_entries > KERN_MAX_CQ_ENTRIES) {
|
|
329
|
+
if (!(p->flags & IORING_SETUP_CLAMP))
|
|
330
|
+
return -EINVAL;
|
|
331
|
+
cq_entries = KERN_MAX_CQ_ENTRIES;
|
|
332
|
+
}
|
|
333
|
+
cq_entries = roundup_pow2(cq_entries);
|
|
334
|
+
if (cq_entries < entries)
|
|
335
|
+
return -EINVAL;
|
|
336
|
+
} else {
|
|
337
|
+
cq_entries = 2 * entries;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
page_size = sysconf(_SC_PAGESIZE);
|
|
341
|
+
if (page_size < 0)
|
|
342
|
+
page_size = 4096;
|
|
343
|
+
|
|
344
|
+
return rings_size(entries, cq_entries, page_size);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/*
|
|
348
|
+
* Return required ulimit -l memory space for a given ring setup. See
|
|
349
|
+
* @io_uring_mlock_size_params().
|
|
350
|
+
*/
|
|
351
|
+
ssize_t io_uring_mlock_size(unsigned entries, unsigned flags)
|
|
352
|
+
{
|
|
353
|
+
struct io_uring_params p = { .flags = flags, };
|
|
354
|
+
|
|
355
|
+
return io_uring_mlock_size_params(entries, &p);
|
|
356
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
#define _DEFAULT_SOURCE
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Will go away once libc support is there
|
|
6
|
+
*/
|
|
7
|
+
#include <unistd.h>
|
|
8
|
+
#include <sys/syscall.h>
|
|
9
|
+
#include <sys/uio.h>
|
|
10
|
+
#include "liburing/compat.h"
|
|
11
|
+
#include "liburing/io_uring.h"
|
|
12
|
+
#include "syscall.h"
|
|
13
|
+
|
|
14
|
+
#ifdef __alpha__
|
|
15
|
+
/*
|
|
16
|
+
* alpha and mips are exception, other architectures have
|
|
17
|
+
* common numbers for new system calls.
|
|
18
|
+
*/
|
|
19
|
+
# ifndef __NR_io_uring_setup
|
|
20
|
+
# define __NR_io_uring_setup 535
|
|
21
|
+
# endif
|
|
22
|
+
# ifndef __NR_io_uring_enter
|
|
23
|
+
# define __NR_io_uring_enter 536
|
|
24
|
+
# endif
|
|
25
|
+
# ifndef __NR_io_uring_register
|
|
26
|
+
# define __NR_io_uring_register 537
|
|
27
|
+
# endif
|
|
28
|
+
#elif defined __mips__
|
|
29
|
+
# ifndef __NR_io_uring_setup
|
|
30
|
+
# define __NR_io_uring_setup (__NR_Linux + 425)
|
|
31
|
+
# endif
|
|
32
|
+
# ifndef __NR_io_uring_enter
|
|
33
|
+
# define __NR_io_uring_enter (__NR_Linux + 426)
|
|
34
|
+
# endif
|
|
35
|
+
# ifndef __NR_io_uring_register
|
|
36
|
+
# define __NR_io_uring_register (__NR_Linux + 427)
|
|
37
|
+
# endif
|
|
38
|
+
#else /* !__alpha__ and !__mips__ */
|
|
39
|
+
# ifndef __NR_io_uring_setup
|
|
40
|
+
# define __NR_io_uring_setup 425
|
|
41
|
+
# endif
|
|
42
|
+
# ifndef __NR_io_uring_enter
|
|
43
|
+
# define __NR_io_uring_enter 426
|
|
44
|
+
# endif
|
|
45
|
+
# ifndef __NR_io_uring_register
|
|
46
|
+
# define __NR_io_uring_register 427
|
|
47
|
+
# endif
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
int __sys_io_uring_register(int fd, unsigned opcode, const void *arg,
|
|
51
|
+
unsigned nr_args)
|
|
52
|
+
{
|
|
53
|
+
return syscall(__NR_io_uring_register, fd, opcode, arg, nr_args);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
int __sys_io_uring_setup(unsigned entries, struct io_uring_params *p)
|
|
57
|
+
{
|
|
58
|
+
return syscall(__NR_io_uring_setup, entries, p);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
int __sys_io_uring_enter2(int fd, unsigned to_submit, unsigned min_complete,
|
|
62
|
+
unsigned flags, sigset_t *sig, int sz)
|
|
63
|
+
{
|
|
64
|
+
return syscall(__NR_io_uring_enter, fd, to_submit, min_complete,
|
|
65
|
+
flags, sig, sz);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
int __sys_io_uring_enter(int fd, unsigned to_submit, unsigned min_complete,
|
|
69
|
+
unsigned flags, sigset_t *sig)
|
|
70
|
+
{
|
|
71
|
+
return __sys_io_uring_enter2(fd, to_submit, min_complete, flags, sig,
|
|
72
|
+
_NSIG / 8);
|
|
73
|
+
}
|