polyphony 0.85 → 0.86
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/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/ext/polyphony/io_extensions.c +2 -3
- data/lib/polyphony/version.rb +1 -1
- data/polyphony.gemspec +1 -1
- data/test/test_backend.rb +1 -1
- data/test/test_signal.rb +3 -3
- data/vendor/liburing/.github/pull_request_template.md +86 -0
- data/vendor/liburing/.github/workflows/build.yml +85 -0
- data/vendor/liburing/.github/workflows/shellcheck.yml +20 -0
- data/vendor/liburing/.gitignore +149 -0
- data/vendor/liburing/COPYING +502 -0
- data/vendor/liburing/COPYING.GPL +339 -0
- data/vendor/liburing/LICENSE +7 -0
- data/vendor/liburing/Makefile +82 -0
- data/vendor/liburing/Makefile.common +5 -0
- data/vendor/liburing/Makefile.quiet +11 -0
- data/vendor/liburing/README +46 -0
- data/vendor/liburing/configure +486 -0
- data/vendor/liburing/debian/README.Debian +7 -0
- data/vendor/liburing/debian/changelog +27 -0
- data/vendor/liburing/debian/compat +1 -0
- data/vendor/liburing/debian/control +48 -0
- data/vendor/liburing/debian/copyright +49 -0
- data/vendor/liburing/debian/liburing-dev.install +4 -0
- data/vendor/liburing/debian/liburing-dev.manpages +6 -0
- data/vendor/liburing/debian/liburing1-udeb.install +1 -0
- data/vendor/liburing/debian/liburing1.install +1 -0
- data/vendor/liburing/debian/liburing1.symbols +32 -0
- data/vendor/liburing/debian/patches/series +1 -0
- data/vendor/liburing/debian/rules +81 -0
- data/vendor/liburing/debian/source/format +1 -0
- data/vendor/liburing/debian/source/local-options +2 -0
- data/vendor/liburing/debian/source/options +1 -0
- data/vendor/liburing/debian/watch +3 -0
- data/vendor/liburing/examples/Makefile +38 -0
- data/vendor/liburing/examples/io_uring-cp.c +282 -0
- data/vendor/liburing/examples/io_uring-test.c +112 -0
- data/vendor/liburing/examples/link-cp.c +193 -0
- data/vendor/liburing/examples/ucontext-cp.c +273 -0
- data/vendor/liburing/liburing.pc.in +12 -0
- data/vendor/liburing/liburing.spec +66 -0
- data/vendor/liburing/make-debs.sh +53 -0
- data/vendor/liburing/man/io_uring.7 +754 -0
- data/vendor/liburing/man/io_uring_cq_advance.3 +35 -0
- data/vendor/liburing/man/io_uring_cq_ready.3 +25 -0
- data/vendor/liburing/man/io_uring_cqe_get_data.3 +34 -0
- data/vendor/liburing/man/io_uring_cqe_seen.3 +32 -0
- data/vendor/liburing/man/io_uring_enter.2 +1483 -0
- data/vendor/liburing/man/io_uring_free_probe.3 +24 -0
- data/vendor/liburing/man/io_uring_get_probe.3 +29 -0
- data/vendor/liburing/man/io_uring_get_sqe.3 +38 -0
- data/vendor/liburing/man/io_uring_opcode_supported.3 +29 -0
- data/vendor/liburing/man/io_uring_prep_msg_ring.3 +58 -0
- data/vendor/liburing/man/io_uring_prep_read.3 +50 -0
- data/vendor/liburing/man/io_uring_prep_read_fixed.3 +54 -0
- data/vendor/liburing/man/io_uring_prep_readv.3 +51 -0
- data/vendor/liburing/man/io_uring_prep_readv2.3 +79 -0
- data/vendor/liburing/man/io_uring_prep_write.3 +50 -0
- data/vendor/liburing/man/io_uring_prep_write_fixed.3 +54 -0
- data/vendor/liburing/man/io_uring_prep_writev.3 +51 -0
- data/vendor/liburing/man/io_uring_prep_writev2.3 +78 -0
- data/vendor/liburing/man/io_uring_queue_exit.3 +27 -0
- data/vendor/liburing/man/io_uring_queue_init.3 +44 -0
- data/vendor/liburing/man/io_uring_register.2 +688 -0
- data/vendor/liburing/man/io_uring_register_buffers.3 +41 -0
- data/vendor/liburing/man/io_uring_register_files.3 +35 -0
- data/vendor/liburing/man/io_uring_setup.2 +534 -0
- data/vendor/liburing/man/io_uring_sq_ready.3 +25 -0
- data/vendor/liburing/man/io_uring_sq_space_left.3 +25 -0
- data/vendor/liburing/man/io_uring_sqe_set_data.3 +30 -0
- data/vendor/liburing/man/io_uring_sqe_set_flags.3 +60 -0
- data/vendor/liburing/man/io_uring_sqring_wait.3 +30 -0
- data/vendor/liburing/man/io_uring_submit.3 +29 -0
- data/vendor/liburing/man/io_uring_submit_and_wait.3 +34 -0
- data/vendor/liburing/man/io_uring_submit_and_wait_timeout.3 +49 -0
- data/vendor/liburing/man/io_uring_unregister_buffers.3 +26 -0
- data/vendor/liburing/man/io_uring_unregister_files.3 +26 -0
- data/vendor/liburing/man/io_uring_wait_cqe.3 +33 -0
- data/vendor/liburing/man/io_uring_wait_cqe_nr.3 +36 -0
- data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +39 -0
- data/vendor/liburing/man/io_uring_wait_cqes.3 +46 -0
- data/vendor/liburing/src/Makefile +89 -0
- data/vendor/liburing/src/arch/aarch64/syscall.h +95 -0
- data/vendor/liburing/src/arch/generic/lib.h +21 -0
- data/vendor/liburing/src/arch/generic/syscall.h +87 -0
- data/vendor/liburing/src/arch/syscall-defs.h +67 -0
- data/vendor/liburing/src/arch/x86/lib.h +32 -0
- data/vendor/liburing/src/arch/x86/syscall.h +160 -0
- data/vendor/liburing/src/include/liburing/barrier.h +81 -0
- data/vendor/liburing/src/include/liburing/io_uring.h +442 -0
- data/vendor/liburing/src/include/liburing.h +921 -0
- data/vendor/liburing/src/int_flags.h +8 -0
- data/vendor/liburing/src/lib.h +57 -0
- data/vendor/liburing/src/liburing.map +53 -0
- data/vendor/liburing/src/nolibc.c +48 -0
- data/vendor/liburing/src/queue.c +403 -0
- data/vendor/liburing/src/register.c +293 -0
- data/vendor/liburing/src/setup.c +332 -0
- data/vendor/liburing/src/syscall.c +47 -0
- data/vendor/liburing/src/syscall.h +103 -0
- data/vendor/liburing/test/232c93d07b74-test.c +306 -0
- data/vendor/liburing/test/35fa71a030ca-test.c +329 -0
- data/vendor/liburing/test/500f9fbadef8-test.c +89 -0
- data/vendor/liburing/test/7ad0e4b2f83c-test.c +93 -0
- data/vendor/liburing/test/8a9973408177-test.c +106 -0
- data/vendor/liburing/test/917257daa0fe-test.c +53 -0
- data/vendor/liburing/test/Makefile +244 -0
- data/vendor/liburing/test/a0908ae19763-test.c +58 -0
- data/vendor/liburing/test/a4c0b3decb33-test.c +180 -0
- data/vendor/liburing/test/accept-link.c +254 -0
- data/vendor/liburing/test/accept-reuse.c +164 -0
- data/vendor/liburing/test/accept-test.c +79 -0
- data/vendor/liburing/test/accept.c +477 -0
- data/vendor/liburing/test/across-fork.c +283 -0
- data/vendor/liburing/test/b19062a56726-test.c +53 -0
- data/vendor/liburing/test/b5837bd5311d-test.c +77 -0
- data/vendor/liburing/test/ce593a6c480a-test.c +136 -0
- data/vendor/liburing/test/close-opath.c +122 -0
- data/vendor/liburing/test/config +10 -0
- data/vendor/liburing/test/connect.c +398 -0
- data/vendor/liburing/test/cq-full.c +96 -0
- data/vendor/liburing/test/cq-overflow.c +294 -0
- data/vendor/liburing/test/cq-peek-batch.c +102 -0
- data/vendor/liburing/test/cq-ready.c +94 -0
- data/vendor/liburing/test/cq-size.c +64 -0
- data/vendor/liburing/test/d4ae271dfaae-test.c +96 -0
- data/vendor/liburing/test/d77a67ed5f27-test.c +65 -0
- data/vendor/liburing/test/defer.c +307 -0
- data/vendor/liburing/test/double-poll-crash.c +185 -0
- data/vendor/liburing/test/drop-submit.c +92 -0
- data/vendor/liburing/test/eeed8b54e0df-test.c +114 -0
- data/vendor/liburing/test/empty-eownerdead.c +45 -0
- data/vendor/liburing/test/eventfd-disable.c +151 -0
- data/vendor/liburing/test/eventfd-reg.c +76 -0
- data/vendor/liburing/test/eventfd-ring.c +97 -0
- data/vendor/liburing/test/eventfd.c +112 -0
- data/vendor/liburing/test/exec-target.c +6 -0
- data/vendor/liburing/test/exit-no-cleanup.c +117 -0
- data/vendor/liburing/test/fadvise.c +202 -0
- data/vendor/liburing/test/fallocate.c +249 -0
- data/vendor/liburing/test/fc2a85cb02ef-test.c +131 -0
- data/vendor/liburing/test/file-register.c +858 -0
- data/vendor/liburing/test/file-update.c +173 -0
- data/vendor/liburing/test/file-verify.c +629 -0
- data/vendor/liburing/test/files-exit-hang-poll.c +128 -0
- data/vendor/liburing/test/files-exit-hang-timeout.c +134 -0
- data/vendor/liburing/test/fixed-link.c +90 -0
- data/vendor/liburing/test/fpos.c +252 -0
- data/vendor/liburing/test/fsync.c +224 -0
- data/vendor/liburing/test/hardlink.c +136 -0
- data/vendor/liburing/test/helpers.c +135 -0
- data/vendor/liburing/test/helpers.h +67 -0
- data/vendor/liburing/test/io-cancel.c +550 -0
- data/vendor/liburing/test/io_uring_enter.c +296 -0
- data/vendor/liburing/test/io_uring_register.c +676 -0
- data/vendor/liburing/test/io_uring_setup.c +192 -0
- data/vendor/liburing/test/iopoll.c +372 -0
- data/vendor/liburing/test/lfs-openat-write.c +119 -0
- data/vendor/liburing/test/lfs-openat.c +275 -0
- data/vendor/liburing/test/link-timeout.c +1107 -0
- data/vendor/liburing/test/link.c +496 -0
- data/vendor/liburing/test/link_drain.c +229 -0
- data/vendor/liburing/test/madvise.c +195 -0
- data/vendor/liburing/test/mkdir.c +108 -0
- data/vendor/liburing/test/msg-ring.c +234 -0
- data/vendor/liburing/test/multicqes_drain.c +387 -0
- data/vendor/liburing/test/nop-all-sizes.c +99 -0
- data/vendor/liburing/test/nop.c +115 -0
- data/vendor/liburing/test/open-close.c +261 -0
- data/vendor/liburing/test/openat2.c +308 -0
- data/vendor/liburing/test/personality.c +204 -0
- data/vendor/liburing/test/pipe-eof.c +83 -0
- data/vendor/liburing/test/pipe-reuse.c +105 -0
- data/vendor/liburing/test/poll-cancel-ton.c +135 -0
- data/vendor/liburing/test/poll-cancel.c +228 -0
- data/vendor/liburing/test/poll-link.c +230 -0
- data/vendor/liburing/test/poll-many.c +208 -0
- data/vendor/liburing/test/poll-mshot-update.c +273 -0
- data/vendor/liburing/test/poll-ring.c +48 -0
- data/vendor/liburing/test/poll-v-poll.c +353 -0
- data/vendor/liburing/test/poll.c +109 -0
- data/vendor/liburing/test/pollfree.c +426 -0
- data/vendor/liburing/test/probe.c +135 -0
- data/vendor/liburing/test/read-write.c +876 -0
- data/vendor/liburing/test/register-restrictions.c +633 -0
- data/vendor/liburing/test/rename.c +135 -0
- data/vendor/liburing/test/ring-leak.c +173 -0
- data/vendor/liburing/test/ring-leak2.c +249 -0
- data/vendor/liburing/test/rsrc_tags.c +449 -0
- data/vendor/liburing/test/runtests-loop.sh +16 -0
- data/vendor/liburing/test/runtests.sh +170 -0
- data/vendor/liburing/test/rw_merge_test.c +97 -0
- data/vendor/liburing/test/self.c +91 -0
- data/vendor/liburing/test/send_recv.c +286 -0
- data/vendor/liburing/test/send_recvmsg.c +345 -0
- data/vendor/liburing/test/sendmsg_fs_cve.c +200 -0
- data/vendor/liburing/test/shared-wq.c +84 -0
- data/vendor/liburing/test/short-read.c +75 -0
- data/vendor/liburing/test/shutdown.c +165 -0
- data/vendor/liburing/test/sigfd-deadlock.c +74 -0
- data/vendor/liburing/test/skip-cqe.c +429 -0
- data/vendor/liburing/test/socket-rw-eagain.c +158 -0
- data/vendor/liburing/test/socket-rw-offset.c +157 -0
- data/vendor/liburing/test/socket-rw.c +145 -0
- data/vendor/liburing/test/splice.c +512 -0
- data/vendor/liburing/test/sq-full-cpp.cc +45 -0
- data/vendor/liburing/test/sq-full.c +45 -0
- data/vendor/liburing/test/sq-poll-dup.c +204 -0
- data/vendor/liburing/test/sq-poll-kthread.c +169 -0
- data/vendor/liburing/test/sq-poll-share.c +137 -0
- data/vendor/liburing/test/sq-space_left.c +159 -0
- data/vendor/liburing/test/sqpoll-cancel-hang.c +157 -0
- data/vendor/liburing/test/sqpoll-disable-exit.c +196 -0
- data/vendor/liburing/test/sqpoll-exit-hang.c +78 -0
- data/vendor/liburing/test/sqpoll-sleep.c +69 -0
- data/vendor/liburing/test/statx.c +172 -0
- data/vendor/liburing/test/stdout.c +232 -0
- data/vendor/liburing/test/submit-link-fail.c +154 -0
- data/vendor/liburing/test/submit-reuse.c +239 -0
- data/vendor/liburing/test/symlink.c +116 -0
- data/vendor/liburing/test/teardowns.c +58 -0
- data/vendor/liburing/test/thread-exit.c +143 -0
- data/vendor/liburing/test/timeout-new.c +252 -0
- data/vendor/liburing/test/timeout-overflow.c +204 -0
- data/vendor/liburing/test/timeout.c +1523 -0
- data/vendor/liburing/test/unlink.c +112 -0
- data/vendor/liburing/test/wakeup-hang.c +162 -0
- metadata +223 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
.\" Copyright (C) 2022 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_sqe_set_flags "January 25, 2022" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_sqe_set_flags - set flags for submission queue entry
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "void io_uring_sqe_set_flags(struct io_uring_sqe *sqe,"
|
|
13
|
+
.BI " unsigned flags)"
|
|
14
|
+
.fi
|
|
15
|
+
.PP
|
|
16
|
+
.SH DESCRIPTION
|
|
17
|
+
.PP
|
|
18
|
+
The io_uring_sqe_set_flags() function allows the caller to change the
|
|
19
|
+
behavior of the submission queue entry by specifying flags. It enables the
|
|
20
|
+
.I flags
|
|
21
|
+
belonging to the
|
|
22
|
+
.I sqe
|
|
23
|
+
submission queue entry param.
|
|
24
|
+
|
|
25
|
+
.I flags
|
|
26
|
+
is a bit mask of 0 or more of the following values ORed together:
|
|
27
|
+
.TP
|
|
28
|
+
.B IOSQE_FIXED_FILE
|
|
29
|
+
The file descriptor in the SQE refers to the index of a previously registered
|
|
30
|
+
file or direct file descriptor, not a normal file descriptor.
|
|
31
|
+
.TP
|
|
32
|
+
.B IOSQE_ASYNC
|
|
33
|
+
Normal operation for io_uring is to try and issue an sqe as non-blocking first,
|
|
34
|
+
and if that fails, execute it in an async manner. To support more efficient
|
|
35
|
+
overlapped operation of requests that the application knows/assumes will
|
|
36
|
+
always (or most of the time) block, the application can ask for an sqe to be
|
|
37
|
+
issued async from the start.
|
|
38
|
+
.TP
|
|
39
|
+
.B IOSQE_IO_LINK
|
|
40
|
+
When this flag is specified, the SQE forms a link with the next SQE in the
|
|
41
|
+
submission ring. That next SQE will not be started before the previous request
|
|
42
|
+
completes. This, in effect, forms a chain of SQEs, which can be arbitrarily
|
|
43
|
+
long. The tail of the chain is denoted by the first SQE that does not have this
|
|
44
|
+
flag set. Chains are not supported across submission boundaries. Even if the
|
|
45
|
+
last SQE in a submission has this flag set, it will still terminate the current
|
|
46
|
+
chain. This flag has no effect on previous SQE submissions, nor does it impact
|
|
47
|
+
SQEs that are outside of the chain tail. This means that multiple chains can be
|
|
48
|
+
executing in parallel, or chains and individual SQEs. Only members inside the
|
|
49
|
+
chain are serialized. A chain of SQEs will be broken, if any request in that
|
|
50
|
+
chain ends in error.
|
|
51
|
+
.TP
|
|
52
|
+
.B IOSQE_IO_DRAIN
|
|
53
|
+
When this flag is specified, the SQE will not be started before previously
|
|
54
|
+
submitted SQEs have completed, and new SQEs will not be started before this
|
|
55
|
+
one completes.
|
|
56
|
+
|
|
57
|
+
.SH RETURN VALUE
|
|
58
|
+
None
|
|
59
|
+
.SH SEE ALSO
|
|
60
|
+
.BR io_uring_submit (3), io_uring_register(3)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.\" Copyright (C) 2022 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_sqring_wait "January 25, 2022" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_sqring_wait - wait for free space in the SQ ring
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "int io_uring_sqring_wait(struct io_uring *ring)"
|
|
13
|
+
.fi
|
|
14
|
+
.PP
|
|
15
|
+
.SH DESCRIPTION
|
|
16
|
+
.PP
|
|
17
|
+
The function io_uring_sqring_wait() allows the caller to wait for space
|
|
18
|
+
to free up in the SQ ring belonging to the
|
|
19
|
+
.I ring
|
|
20
|
+
param, which happens when the kernel side thread
|
|
21
|
+
has consumed one or more entries. If the SQ ring is currently non-full,
|
|
22
|
+
no action is taken.
|
|
23
|
+
|
|
24
|
+
This feature can only be used when SQPOLL is enabled.
|
|
25
|
+
|
|
26
|
+
.SH RETURN VALUE
|
|
27
|
+
On success it returns the free space. If the kernel does not support the
|
|
28
|
+
feature, -EINVAL is returned.
|
|
29
|
+
.SH SEE ALSO
|
|
30
|
+
.BR io_uring_submit (3), io_uring_wait_cqe (3), io_uring_wait_cqes (3)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_submit 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_submit - submit requests to the submission queue
|
|
8
|
+
.fi
|
|
9
|
+
.SH SYNOPSIS
|
|
10
|
+
.nf
|
|
11
|
+
.BR "#include <liburing.h>"
|
|
12
|
+
.PP
|
|
13
|
+
.BI "int io_uring_submit(struct io_uring *ring)"
|
|
14
|
+
.PP
|
|
15
|
+
.SH DESCRIPTION
|
|
16
|
+
.PP
|
|
17
|
+
The io_uring_submit() function submits the next events to the submission
|
|
18
|
+
queue belonging to the
|
|
19
|
+
.I ring.
|
|
20
|
+
|
|
21
|
+
After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
|
|
22
|
+
prepares the SQE, it can be submitted with io_uring_submit().
|
|
23
|
+
|
|
24
|
+
.SH RETURN VALUE
|
|
25
|
+
On success
|
|
26
|
+
.BR io_uring_submit (3)
|
|
27
|
+
returns the number of submitted submission queue entries. On failure it returns -errno.
|
|
28
|
+
.SH SEE ALSO
|
|
29
|
+
.BR io_uring_get_sqe (3), io_uring_submit_and_wait (3), io_uring_submit_and_wait_timeout (3)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_submit_and_wait 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_submit_and_wait - submit requests to the submission queue and wait for completion
|
|
8
|
+
.fi
|
|
9
|
+
.SH SYNOPSIS
|
|
10
|
+
.nf
|
|
11
|
+
.BR "#include <liburing.h>"
|
|
12
|
+
.PP
|
|
13
|
+
.BI "int io_uring_submit_and_wait(struct io_uring *ring,"
|
|
14
|
+
.fi
|
|
15
|
+
.BI " unsigned wait_nr)"
|
|
16
|
+
.PP
|
|
17
|
+
.SH DESCRIPTION
|
|
18
|
+
.PP
|
|
19
|
+
The io_uring_submit_and_wait() function submits the next events to the submission
|
|
20
|
+
queue belonging to the
|
|
21
|
+
.I ring
|
|
22
|
+
and waits for
|
|
23
|
+
.I wait_nr
|
|
24
|
+
completion events.
|
|
25
|
+
|
|
26
|
+
After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
|
|
27
|
+
prepares the SQE, it can be submitted with io_uring_submit_and_wait().
|
|
28
|
+
|
|
29
|
+
.SH RETURN VALUE
|
|
30
|
+
On success
|
|
31
|
+
.BR io_uring_submit_and_wait (3)
|
|
32
|
+
returns the number of submitted submission queue entries. On failure it returns -errno.
|
|
33
|
+
.SH SEE ALSO
|
|
34
|
+
.BR io_uring_get_sqe (3), io_uring_submit (3), io_uring_submit_and_wait_timeout (3)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_submit_and_wait_timeout 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_submit_and_wait_timeout - submit requests to the submission queue and
|
|
8
|
+
wait for the completion with timeout
|
|
9
|
+
.fi
|
|
10
|
+
.SH SYNOPSIS
|
|
11
|
+
.nf
|
|
12
|
+
.BR "#include <liburing.h>"
|
|
13
|
+
.PP
|
|
14
|
+
.BI "int io_uring_submit_and_wait_timeout(struct io_uring *ring,"
|
|
15
|
+
.fi
|
|
16
|
+
.BI " struct io_uring_cqe **cqe_ptr,"
|
|
17
|
+
.fi
|
|
18
|
+
.BI " unsigned wait_nr,"
|
|
19
|
+
.fi
|
|
20
|
+
.BI " struct __kernel_timespec *ts,"
|
|
21
|
+
.fi
|
|
22
|
+
.BI " sigset_t *sigmask)"
|
|
23
|
+
.PP
|
|
24
|
+
.SH DESCRIPTION
|
|
25
|
+
.PP
|
|
26
|
+
The io_uring_submit_and_wait_timeout() function submits the next events to the submission
|
|
27
|
+
queue belonging to the
|
|
28
|
+
.I ring
|
|
29
|
+
and waits for
|
|
30
|
+
.I wait_nr
|
|
31
|
+
completion events or until the timeout
|
|
32
|
+
.I ts
|
|
33
|
+
expires.The completion events are stored in the
|
|
34
|
+
.I cqe_ptr array.
|
|
35
|
+
The
|
|
36
|
+
.I sigmask
|
|
37
|
+
specifies the set of signals to block. The prevailing signal mask is restored
|
|
38
|
+
before returning.
|
|
39
|
+
|
|
40
|
+
After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
|
|
41
|
+
prepares the SQE, it can be submitted with io_uring_submit_and_wait_timeout().
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
.SH RETURN VALUE
|
|
45
|
+
On success
|
|
46
|
+
.BR io_uring_submit_and_wait_timeout (3)
|
|
47
|
+
returns the number of submitted submission queue entries. On failure it returns -errno.
|
|
48
|
+
.SH SEE ALSO
|
|
49
|
+
.BR io_uring_get_sqe (3), io_uring_submit (3), io_uring_submit_and_wait (3), io_uring_wait_cqe (3)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_unregister_buffers 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_unregister_buffers - unregister buffers for fixed buffer operations
|
|
8
|
+
.fi
|
|
9
|
+
.SH SYNOPSIS
|
|
10
|
+
.nf
|
|
11
|
+
.BR "#include <liburing.h>"
|
|
12
|
+
.PP
|
|
13
|
+
.BI "int io_uring_unregister_buffers(struct io_uring *ring)"
|
|
14
|
+
.PP
|
|
15
|
+
.SH DESCRIPTION
|
|
16
|
+
.PP
|
|
17
|
+
The io_uring_unregister_buffers() function unregisters
|
|
18
|
+
the fixed buffers previously registered to the
|
|
19
|
+
.I ring.
|
|
20
|
+
|
|
21
|
+
.SH RETURN VALUE
|
|
22
|
+
On success
|
|
23
|
+
.BR io_uring_unregister_buffers (3)
|
|
24
|
+
returns 0. On failure it returns -errno.
|
|
25
|
+
.SH SEE ALSO
|
|
26
|
+
.BR io_uring_register_buffers (3)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_unregister_files 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_unregister_files - unregister file descriptors
|
|
8
|
+
.fi
|
|
9
|
+
.SH SYNOPSIS
|
|
10
|
+
.nf
|
|
11
|
+
.BR "#include <liburing.h>"
|
|
12
|
+
.PP
|
|
13
|
+
.BI "int io_uring_unregister_files(struct io_uring *ring)"
|
|
14
|
+
.PP
|
|
15
|
+
.SH DESCRIPTION
|
|
16
|
+
.PP
|
|
17
|
+
The io_uring_unregister_files() function unregisters
|
|
18
|
+
the file descriptors previously registered to the
|
|
19
|
+
.I ring.
|
|
20
|
+
|
|
21
|
+
.SH RETURN VALUE
|
|
22
|
+
On success
|
|
23
|
+
.BR io_uring_unregister_files (3)
|
|
24
|
+
returns 0. On failure it returns -errno.
|
|
25
|
+
.SH SEE ALSO
|
|
26
|
+
.BR io_uring_register_files (3)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_wait_cqe 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_wait_cqe - wait for one io_uring completion event
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "int io_uring_wait_cqe(struct io_uring *ring,"
|
|
13
|
+
.BI " struct io_uring_cqe **cqe_ptr);"
|
|
14
|
+
.fi
|
|
15
|
+
.PP
|
|
16
|
+
.SH DESCRIPTION
|
|
17
|
+
.PP
|
|
18
|
+
The io_uring_wait_cqe() function returns an IO completion from the
|
|
19
|
+
queue belonging to the
|
|
20
|
+
.I ring
|
|
21
|
+
param, waiting for it if necessary. The
|
|
22
|
+
.I cqe_ptr
|
|
23
|
+
param is filled in on success.
|
|
24
|
+
|
|
25
|
+
After the caller has submitted a request with io_uring_submit(), he can retrieve
|
|
26
|
+
the completion with io_uring_wait_cqe().
|
|
27
|
+
|
|
28
|
+
.SH RETURN VALUE
|
|
29
|
+
On success
|
|
30
|
+
.BR io_uring_wait_cqe (3)
|
|
31
|
+
returns 0 and the cqe_ptr parm is filled in. On failure it returns -errno.
|
|
32
|
+
.SH SEE ALSO
|
|
33
|
+
.BR io_uring_submit (3), io_uring_wait_cqes(3)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_wait_cqe_nr 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_wait_cqe_nr - wait for one or more io_uring completion events
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "int io_uring_wait_cqe_nr(struct io_uring *ring,"
|
|
13
|
+
.BI " struct io_uring_cqe **cqe_ptr,"
|
|
14
|
+
.BI " unsigned wait_nr)"
|
|
15
|
+
.fi
|
|
16
|
+
.PP
|
|
17
|
+
.SH DESCRIPTION
|
|
18
|
+
.PP
|
|
19
|
+
The io_uring_wait_cqe_nr() function returns
|
|
20
|
+
.I wait_nr
|
|
21
|
+
IO completion events from the
|
|
22
|
+
queue belonging to the
|
|
23
|
+
.I ring
|
|
24
|
+
param, waiting for it if necessary. The
|
|
25
|
+
.I cqe_ptr
|
|
26
|
+
param is filled in on success.
|
|
27
|
+
|
|
28
|
+
After the caller has submitted a request with io_uring_submit(), he can retrieve
|
|
29
|
+
the completion with io_uring_wait_cqe_nr().
|
|
30
|
+
|
|
31
|
+
.SH RETURN VALUE
|
|
32
|
+
On success
|
|
33
|
+
.BR io_uring_wait_cqe_nr (3)
|
|
34
|
+
returns 0 and the cqe_ptr parm is filled in. On failure it returns -errno.
|
|
35
|
+
.SH SEE ALSO
|
|
36
|
+
.BR io_uring_submit (3), io_uring_wait_cqes (3)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_wait_cqe_timeout 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_wait_cqe_timeout - wait for one io_uring completion event with timeout
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "int io_uring_wait_cqe_timeout(struct io_uring *ring,"
|
|
13
|
+
.BI " struct io_uring_cqe **cqe_ptr,"
|
|
14
|
+
.BI " struct __kernel_timespec *ts)"
|
|
15
|
+
.PP
|
|
16
|
+
.SH DESCRIPTION
|
|
17
|
+
.PP
|
|
18
|
+
The io_uring_wait_cqe_timeout() function returns one IO completion from the
|
|
19
|
+
queue belonging to the
|
|
20
|
+
.I ring
|
|
21
|
+
param, waiting for it if necessary or until the timeout
|
|
22
|
+
.I ts
|
|
23
|
+
expires.
|
|
24
|
+
|
|
25
|
+
The
|
|
26
|
+
.I cqe_ptr
|
|
27
|
+
param is filled in on success.
|
|
28
|
+
|
|
29
|
+
If
|
|
30
|
+
.I ts
|
|
31
|
+
is specified, the application does not need to call io_uring_submit (3) before
|
|
32
|
+
calling io_uring_wait_cqes (3).
|
|
33
|
+
|
|
34
|
+
.SH RETURN VALUE
|
|
35
|
+
On success
|
|
36
|
+
.BR io_uring_wait_cqes (3)
|
|
37
|
+
returns 0 and the cqe_ptr parm is filled in. On failure it returns -errno.
|
|
38
|
+
.SH SEE ALSO
|
|
39
|
+
.BR io_uring_submit (3), io_uring_wait_cqe_timeout (3), io_uring_wait_cqe(3).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.\" Copyright (C) 2021 Stefan Roesch <shr@fb.com>
|
|
2
|
+
.\"
|
|
3
|
+
.\" SPDX-License-Identifier: LGPL-2.0-or-later
|
|
4
|
+
.\"
|
|
5
|
+
.TH io_uring_wait_cqes 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
|
|
6
|
+
.SH NAME
|
|
7
|
+
io_uring_wait_cqes - wait for one or more io_uring completion events
|
|
8
|
+
.SH SYNOPSIS
|
|
9
|
+
.nf
|
|
10
|
+
.BR "#include <liburing.h>"
|
|
11
|
+
.PP
|
|
12
|
+
.BI "int io_uring_wait_cqes(struct io_uring *ring,"
|
|
13
|
+
.BI " struct io_uring_cqe **cqe_ptr,"
|
|
14
|
+
.BI " unsigned wait_nr,"
|
|
15
|
+
.BI " struct __kernel_timespec *ts,"
|
|
16
|
+
.BI " sigset_t *sigmask)
|
|
17
|
+
.fi
|
|
18
|
+
.PP
|
|
19
|
+
.SH DESCRIPTION
|
|
20
|
+
.PP
|
|
21
|
+
The io_uring_wait_cqes() function returns
|
|
22
|
+
.I wait_nr
|
|
23
|
+
IO completions from the queue belonging to the
|
|
24
|
+
.I ring
|
|
25
|
+
param, waiting for it if necessary or until the timeout
|
|
26
|
+
.I ts
|
|
27
|
+
expires. The
|
|
28
|
+
.I sigmask
|
|
29
|
+
specifies the set of signals to block. The prevailing signal mask is restored
|
|
30
|
+
before returning.
|
|
31
|
+
|
|
32
|
+
The
|
|
33
|
+
.I cqe_ptr
|
|
34
|
+
param is filled in on success.
|
|
35
|
+
|
|
36
|
+
If
|
|
37
|
+
.I ts
|
|
38
|
+
is specified, the application does not need to call io_uring_submit (3) before
|
|
39
|
+
calling io_uring_wait_cqes (3).
|
|
40
|
+
|
|
41
|
+
.SH RETURN VALUE
|
|
42
|
+
On success
|
|
43
|
+
.BR io_uring_wait_cqes (3)
|
|
44
|
+
returns 0 and the cqe_ptr parm is filled in. On failure it returns -errno.
|
|
45
|
+
.SH SEE ALSO
|
|
46
|
+
.BR io_uring_submit (3), io_uring_wait_cqe_timeout (3), io_uring_wait_cqe(3).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
include ../Makefile.common
|
|
2
|
+
|
|
3
|
+
prefix ?= /usr
|
|
4
|
+
includedir ?= $(prefix)/include
|
|
5
|
+
libdir ?= $(prefix)/lib
|
|
6
|
+
libdevdir ?= $(prefix)/lib
|
|
7
|
+
|
|
8
|
+
CPPFLAGS ?=
|
|
9
|
+
override CPPFLAGS += -D_GNU_SOURCE \
|
|
10
|
+
-Iinclude/ -include ../config-host.h
|
|
11
|
+
CFLAGS ?= -g -O2 -Wall -Wextra -fno-stack-protector
|
|
12
|
+
override CFLAGS += -Wno-unused-parameter -Wno-sign-compare -DLIBURING_INTERNAL
|
|
13
|
+
SO_CFLAGS=-fPIC $(CFLAGS)
|
|
14
|
+
L_CFLAGS=$(CFLAGS)
|
|
15
|
+
LINK_FLAGS=
|
|
16
|
+
LINK_FLAGS+=$(LDFLAGS)
|
|
17
|
+
ENABLE_SHARED ?= 1
|
|
18
|
+
|
|
19
|
+
soname=liburing.so
|
|
20
|
+
libname=$(soname).$(VERSION)
|
|
21
|
+
all_targets += liburing.a
|
|
22
|
+
|
|
23
|
+
ifeq ($(ENABLE_SHARED),1)
|
|
24
|
+
all_targets += $(libname)
|
|
25
|
+
endif
|
|
26
|
+
|
|
27
|
+
include ../Makefile.quiet
|
|
28
|
+
|
|
29
|
+
ifneq ($(MAKECMDGOALS),clean)
|
|
30
|
+
include ../config-host.mak
|
|
31
|
+
endif
|
|
32
|
+
|
|
33
|
+
all: $(all_targets)
|
|
34
|
+
|
|
35
|
+
liburing_srcs := setup.c queue.c register.c
|
|
36
|
+
|
|
37
|
+
ifeq ($(CONFIG_NOLIBC),y)
|
|
38
|
+
liburing_srcs += nolibc.c
|
|
39
|
+
override CFLAGS += -nostdlib -nodefaultlibs -ffreestanding
|
|
40
|
+
override CPPFLAGS += -nostdlib -nodefaultlibs -ffreestanding
|
|
41
|
+
override LINK_FLAGS += -nostdlib -nodefaultlibs
|
|
42
|
+
else
|
|
43
|
+
liburing_srcs += syscall.c
|
|
44
|
+
endif
|
|
45
|
+
|
|
46
|
+
override CPPFLAGS += -MT "$@" -MMD -MP -MF "$@.d"
|
|
47
|
+
liburing_objs := $(patsubst %.c,%.ol,$(liburing_srcs))
|
|
48
|
+
liburing_sobjs := $(patsubst %.c,%.os,$(liburing_srcs))
|
|
49
|
+
|
|
50
|
+
%.os: %.c
|
|
51
|
+
$(QUIET_CC)$(CC) $(CPPFLAGS) $(SO_CFLAGS) -c -o $@ $<
|
|
52
|
+
|
|
53
|
+
%.ol: %.c
|
|
54
|
+
$(QUIET_CC)$(CC) $(CPPFLAGS) $(L_CFLAGS) -c -o $@ $<
|
|
55
|
+
|
|
56
|
+
# Include compiler generated dependency files.
|
|
57
|
+
-include $(liburing_objs:%=%.d)
|
|
58
|
+
-include $(liburing_sobjs:%=%.d)
|
|
59
|
+
|
|
60
|
+
AR ?= ar
|
|
61
|
+
RANLIB ?= ranlib
|
|
62
|
+
liburing.a: $(liburing_objs)
|
|
63
|
+
@rm -f liburing.a
|
|
64
|
+
$(QUIET_AR)$(AR) r liburing.a $^
|
|
65
|
+
$(QUIET_RANLIB)$(RANLIB) liburing.a
|
|
66
|
+
|
|
67
|
+
$(libname): $(liburing_sobjs) liburing.map
|
|
68
|
+
$(QUIET_CC)$(CC) $(SO_CFLAGS) -shared -Wl,--version-script=liburing.map -Wl,-soname=$(soname) -o $@ $(liburing_sobjs) $(LINK_FLAGS)
|
|
69
|
+
|
|
70
|
+
install: $(all_targets)
|
|
71
|
+
install -D -m 644 include/liburing/io_uring.h $(includedir)/liburing/io_uring.h
|
|
72
|
+
install -D -m 644 include/liburing.h $(includedir)/liburing.h
|
|
73
|
+
install -D -m 644 include/liburing/compat.h $(includedir)/liburing/compat.h
|
|
74
|
+
install -D -m 644 include/liburing/barrier.h $(includedir)/liburing/barrier.h
|
|
75
|
+
install -D -m 644 liburing.a $(libdevdir)/liburing.a
|
|
76
|
+
ifeq ($(ENABLE_SHARED),1)
|
|
77
|
+
install -D -m 755 $(libname) $(libdir)/$(libname)
|
|
78
|
+
ln -sf $(libname) $(libdir)/$(soname)
|
|
79
|
+
ln -sf $(relativelibdir)$(libname) $(libdevdir)/liburing.so
|
|
80
|
+
endif
|
|
81
|
+
|
|
82
|
+
clean:
|
|
83
|
+
@rm -f $(all_targets) $(liburing_objs) $(liburing_sobjs) $(soname).new
|
|
84
|
+
@rm -f *.so* *.a *.o *.d
|
|
85
|
+
@rm -f include/liburing/compat.h
|
|
86
|
+
|
|
87
|
+
@# When cleaning, we don't include ../config-host.mak,
|
|
88
|
+
@# so the nolibc objects are always skipped, clean them up!
|
|
89
|
+
@rm -f nolibc.ol nolibc.os
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
|
|
3
|
+
#ifndef __INTERNAL__LIBURING_SYSCALL_H
|
|
4
|
+
#error "This file should be included from src/syscall.h (liburing)"
|
|
5
|
+
#endif
|
|
6
|
+
|
|
7
|
+
#ifndef LIBURING_ARCH_AARCH64_SYSCALL_H
|
|
8
|
+
#define LIBURING_ARCH_AARCH64_SYSCALL_H
|
|
9
|
+
|
|
10
|
+
#if defined(__aarch64__)
|
|
11
|
+
|
|
12
|
+
#define __do_syscallN(...) ({ \
|
|
13
|
+
__asm__ volatile ( \
|
|
14
|
+
"svc 0" \
|
|
15
|
+
: "=r"(x0) \
|
|
16
|
+
: __VA_ARGS__ \
|
|
17
|
+
: "memory", "cc"); \
|
|
18
|
+
(long) x0; \
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
#define __do_syscall0(__n) ({ \
|
|
22
|
+
register long x8 __asm__("x8") = __n; \
|
|
23
|
+
register long x0 __asm__("x0"); \
|
|
24
|
+
\
|
|
25
|
+
__do_syscallN("r" (x8)); \
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
#define __do_syscall1(__n, __a) ({ \
|
|
29
|
+
register long x8 __asm__("x8") = __n; \
|
|
30
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
31
|
+
\
|
|
32
|
+
__do_syscallN("r" (x8), "0" (x0)); \
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
#define __do_syscall2(__n, __a, __b) ({ \
|
|
36
|
+
register long x8 __asm__("x8") = __n; \
|
|
37
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
38
|
+
register __typeof__(__b) x1 __asm__("x1") = __b; \
|
|
39
|
+
\
|
|
40
|
+
__do_syscallN("r" (x8), "0" (x0), "r" (x1)); \
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
#define __do_syscall3(__n, __a, __b, __c) ({ \
|
|
44
|
+
register long x8 __asm__("x8") = __n; \
|
|
45
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
46
|
+
register __typeof__(__b) x1 __asm__("x1") = __b; \
|
|
47
|
+
register __typeof__(__c) x2 __asm__("x2") = __c; \
|
|
48
|
+
\
|
|
49
|
+
__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2)); \
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
#define __do_syscall4(__n, __a, __b, __c, __d) ({ \
|
|
53
|
+
register long x8 __asm__("x8") = __n; \
|
|
54
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
55
|
+
register __typeof__(__b) x1 __asm__("x1") = __b; \
|
|
56
|
+
register __typeof__(__c) x2 __asm__("x2") = __c; \
|
|
57
|
+
register __typeof__(__d) x3 __asm__("x3") = __d; \
|
|
58
|
+
\
|
|
59
|
+
__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3));\
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
#define __do_syscall5(__n, __a, __b, __c, __d, __e) ({ \
|
|
63
|
+
register long x8 __asm__("x8") = __n; \
|
|
64
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
65
|
+
register __typeof__(__b) x1 __asm__("x1") = __b; \
|
|
66
|
+
register __typeof__(__c) x2 __asm__("x2") = __c; \
|
|
67
|
+
register __typeof__(__d) x3 __asm__("x3") = __d; \
|
|
68
|
+
register __typeof__(__e) x4 __asm__("x4") = __e; \
|
|
69
|
+
\
|
|
70
|
+
__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3), \
|
|
71
|
+
"r"(x4)); \
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
#define __do_syscall6(__n, __a, __b, __c, __d, __e, __f) ({ \
|
|
75
|
+
register long x8 __asm__("x8") = __n; \
|
|
76
|
+
register __typeof__(__a) x0 __asm__("x0") = __a; \
|
|
77
|
+
register __typeof__(__b) x1 __asm__("x1") = __b; \
|
|
78
|
+
register __typeof__(__c) x2 __asm__("x2") = __c; \
|
|
79
|
+
register __typeof__(__d) x3 __asm__("x3") = __d; \
|
|
80
|
+
register __typeof__(__e) x4 __asm__("x4") = __e; \
|
|
81
|
+
register __typeof__(__f) x5 __asm__("x5") = __f; \
|
|
82
|
+
\
|
|
83
|
+
__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3), \
|
|
84
|
+
"r" (x4), "r"(x5)); \
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
#include "../syscall-defs.h"
|
|
88
|
+
|
|
89
|
+
#else /* #if defined(__aarch64__) */
|
|
90
|
+
|
|
91
|
+
#include "../generic/syscall.h"
|
|
92
|
+
|
|
93
|
+
#endif /* #if defined(__aarch64__) */
|
|
94
|
+
|
|
95
|
+
#endif /* #ifndef LIBURING_ARCH_AARCH64_SYSCALL_H */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
|
|
3
|
+
#ifndef __INTERNAL__LIBURING_LIB_H
|
|
4
|
+
#error "This file should be included from src/lib.h (liburing)"
|
|
5
|
+
#endif
|
|
6
|
+
|
|
7
|
+
#ifndef LIBURING_ARCH_GENERIC_LIB_H
|
|
8
|
+
#define LIBURING_ARCH_GENERIC_LIB_H
|
|
9
|
+
|
|
10
|
+
static inline long get_page_size(void)
|
|
11
|
+
{
|
|
12
|
+
long page_size;
|
|
13
|
+
|
|
14
|
+
page_size = sysconf(_SC_PAGESIZE);
|
|
15
|
+
if (page_size < 0)
|
|
16
|
+
page_size = 4096;
|
|
17
|
+
|
|
18
|
+
return page_size;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
#endif /* #ifndef LIBURING_ARCH_GENERIC_LIB_H */
|