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.
Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile.lock +1 -1
  4. data/ext/polyphony/io_extensions.c +2 -3
  5. data/lib/polyphony/version.rb +1 -1
  6. data/polyphony.gemspec +1 -1
  7. data/test/test_backend.rb +1 -1
  8. data/test/test_signal.rb +3 -3
  9. data/vendor/liburing/.github/pull_request_template.md +86 -0
  10. data/vendor/liburing/.github/workflows/build.yml +85 -0
  11. data/vendor/liburing/.github/workflows/shellcheck.yml +20 -0
  12. data/vendor/liburing/.gitignore +149 -0
  13. data/vendor/liburing/COPYING +502 -0
  14. data/vendor/liburing/COPYING.GPL +339 -0
  15. data/vendor/liburing/LICENSE +7 -0
  16. data/vendor/liburing/Makefile +82 -0
  17. data/vendor/liburing/Makefile.common +5 -0
  18. data/vendor/liburing/Makefile.quiet +11 -0
  19. data/vendor/liburing/README +46 -0
  20. data/vendor/liburing/configure +486 -0
  21. data/vendor/liburing/debian/README.Debian +7 -0
  22. data/vendor/liburing/debian/changelog +27 -0
  23. data/vendor/liburing/debian/compat +1 -0
  24. data/vendor/liburing/debian/control +48 -0
  25. data/vendor/liburing/debian/copyright +49 -0
  26. data/vendor/liburing/debian/liburing-dev.install +4 -0
  27. data/vendor/liburing/debian/liburing-dev.manpages +6 -0
  28. data/vendor/liburing/debian/liburing1-udeb.install +1 -0
  29. data/vendor/liburing/debian/liburing1.install +1 -0
  30. data/vendor/liburing/debian/liburing1.symbols +32 -0
  31. data/vendor/liburing/debian/patches/series +1 -0
  32. data/vendor/liburing/debian/rules +81 -0
  33. data/vendor/liburing/debian/source/format +1 -0
  34. data/vendor/liburing/debian/source/local-options +2 -0
  35. data/vendor/liburing/debian/source/options +1 -0
  36. data/vendor/liburing/debian/watch +3 -0
  37. data/vendor/liburing/examples/Makefile +38 -0
  38. data/vendor/liburing/examples/io_uring-cp.c +282 -0
  39. data/vendor/liburing/examples/io_uring-test.c +112 -0
  40. data/vendor/liburing/examples/link-cp.c +193 -0
  41. data/vendor/liburing/examples/ucontext-cp.c +273 -0
  42. data/vendor/liburing/liburing.pc.in +12 -0
  43. data/vendor/liburing/liburing.spec +66 -0
  44. data/vendor/liburing/make-debs.sh +53 -0
  45. data/vendor/liburing/man/io_uring.7 +754 -0
  46. data/vendor/liburing/man/io_uring_cq_advance.3 +35 -0
  47. data/vendor/liburing/man/io_uring_cq_ready.3 +25 -0
  48. data/vendor/liburing/man/io_uring_cqe_get_data.3 +34 -0
  49. data/vendor/liburing/man/io_uring_cqe_seen.3 +32 -0
  50. data/vendor/liburing/man/io_uring_enter.2 +1483 -0
  51. data/vendor/liburing/man/io_uring_free_probe.3 +24 -0
  52. data/vendor/liburing/man/io_uring_get_probe.3 +29 -0
  53. data/vendor/liburing/man/io_uring_get_sqe.3 +38 -0
  54. data/vendor/liburing/man/io_uring_opcode_supported.3 +29 -0
  55. data/vendor/liburing/man/io_uring_prep_msg_ring.3 +58 -0
  56. data/vendor/liburing/man/io_uring_prep_read.3 +50 -0
  57. data/vendor/liburing/man/io_uring_prep_read_fixed.3 +54 -0
  58. data/vendor/liburing/man/io_uring_prep_readv.3 +51 -0
  59. data/vendor/liburing/man/io_uring_prep_readv2.3 +79 -0
  60. data/vendor/liburing/man/io_uring_prep_write.3 +50 -0
  61. data/vendor/liburing/man/io_uring_prep_write_fixed.3 +54 -0
  62. data/vendor/liburing/man/io_uring_prep_writev.3 +51 -0
  63. data/vendor/liburing/man/io_uring_prep_writev2.3 +78 -0
  64. data/vendor/liburing/man/io_uring_queue_exit.3 +27 -0
  65. data/vendor/liburing/man/io_uring_queue_init.3 +44 -0
  66. data/vendor/liburing/man/io_uring_register.2 +688 -0
  67. data/vendor/liburing/man/io_uring_register_buffers.3 +41 -0
  68. data/vendor/liburing/man/io_uring_register_files.3 +35 -0
  69. data/vendor/liburing/man/io_uring_setup.2 +534 -0
  70. data/vendor/liburing/man/io_uring_sq_ready.3 +25 -0
  71. data/vendor/liburing/man/io_uring_sq_space_left.3 +25 -0
  72. data/vendor/liburing/man/io_uring_sqe_set_data.3 +30 -0
  73. data/vendor/liburing/man/io_uring_sqe_set_flags.3 +60 -0
  74. data/vendor/liburing/man/io_uring_sqring_wait.3 +30 -0
  75. data/vendor/liburing/man/io_uring_submit.3 +29 -0
  76. data/vendor/liburing/man/io_uring_submit_and_wait.3 +34 -0
  77. data/vendor/liburing/man/io_uring_submit_and_wait_timeout.3 +49 -0
  78. data/vendor/liburing/man/io_uring_unregister_buffers.3 +26 -0
  79. data/vendor/liburing/man/io_uring_unregister_files.3 +26 -0
  80. data/vendor/liburing/man/io_uring_wait_cqe.3 +33 -0
  81. data/vendor/liburing/man/io_uring_wait_cqe_nr.3 +36 -0
  82. data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +39 -0
  83. data/vendor/liburing/man/io_uring_wait_cqes.3 +46 -0
  84. data/vendor/liburing/src/Makefile +89 -0
  85. data/vendor/liburing/src/arch/aarch64/syscall.h +95 -0
  86. data/vendor/liburing/src/arch/generic/lib.h +21 -0
  87. data/vendor/liburing/src/arch/generic/syscall.h +87 -0
  88. data/vendor/liburing/src/arch/syscall-defs.h +67 -0
  89. data/vendor/liburing/src/arch/x86/lib.h +32 -0
  90. data/vendor/liburing/src/arch/x86/syscall.h +160 -0
  91. data/vendor/liburing/src/include/liburing/barrier.h +81 -0
  92. data/vendor/liburing/src/include/liburing/io_uring.h +442 -0
  93. data/vendor/liburing/src/include/liburing.h +921 -0
  94. data/vendor/liburing/src/int_flags.h +8 -0
  95. data/vendor/liburing/src/lib.h +57 -0
  96. data/vendor/liburing/src/liburing.map +53 -0
  97. data/vendor/liburing/src/nolibc.c +48 -0
  98. data/vendor/liburing/src/queue.c +403 -0
  99. data/vendor/liburing/src/register.c +293 -0
  100. data/vendor/liburing/src/setup.c +332 -0
  101. data/vendor/liburing/src/syscall.c +47 -0
  102. data/vendor/liburing/src/syscall.h +103 -0
  103. data/vendor/liburing/test/232c93d07b74-test.c +306 -0
  104. data/vendor/liburing/test/35fa71a030ca-test.c +329 -0
  105. data/vendor/liburing/test/500f9fbadef8-test.c +89 -0
  106. data/vendor/liburing/test/7ad0e4b2f83c-test.c +93 -0
  107. data/vendor/liburing/test/8a9973408177-test.c +106 -0
  108. data/vendor/liburing/test/917257daa0fe-test.c +53 -0
  109. data/vendor/liburing/test/Makefile +244 -0
  110. data/vendor/liburing/test/a0908ae19763-test.c +58 -0
  111. data/vendor/liburing/test/a4c0b3decb33-test.c +180 -0
  112. data/vendor/liburing/test/accept-link.c +254 -0
  113. data/vendor/liburing/test/accept-reuse.c +164 -0
  114. data/vendor/liburing/test/accept-test.c +79 -0
  115. data/vendor/liburing/test/accept.c +477 -0
  116. data/vendor/liburing/test/across-fork.c +283 -0
  117. data/vendor/liburing/test/b19062a56726-test.c +53 -0
  118. data/vendor/liburing/test/b5837bd5311d-test.c +77 -0
  119. data/vendor/liburing/test/ce593a6c480a-test.c +136 -0
  120. data/vendor/liburing/test/close-opath.c +122 -0
  121. data/vendor/liburing/test/config +10 -0
  122. data/vendor/liburing/test/connect.c +398 -0
  123. data/vendor/liburing/test/cq-full.c +96 -0
  124. data/vendor/liburing/test/cq-overflow.c +294 -0
  125. data/vendor/liburing/test/cq-peek-batch.c +102 -0
  126. data/vendor/liburing/test/cq-ready.c +94 -0
  127. data/vendor/liburing/test/cq-size.c +64 -0
  128. data/vendor/liburing/test/d4ae271dfaae-test.c +96 -0
  129. data/vendor/liburing/test/d77a67ed5f27-test.c +65 -0
  130. data/vendor/liburing/test/defer.c +307 -0
  131. data/vendor/liburing/test/double-poll-crash.c +185 -0
  132. data/vendor/liburing/test/drop-submit.c +92 -0
  133. data/vendor/liburing/test/eeed8b54e0df-test.c +114 -0
  134. data/vendor/liburing/test/empty-eownerdead.c +45 -0
  135. data/vendor/liburing/test/eventfd-disable.c +151 -0
  136. data/vendor/liburing/test/eventfd-reg.c +76 -0
  137. data/vendor/liburing/test/eventfd-ring.c +97 -0
  138. data/vendor/liburing/test/eventfd.c +112 -0
  139. data/vendor/liburing/test/exec-target.c +6 -0
  140. data/vendor/liburing/test/exit-no-cleanup.c +117 -0
  141. data/vendor/liburing/test/fadvise.c +202 -0
  142. data/vendor/liburing/test/fallocate.c +249 -0
  143. data/vendor/liburing/test/fc2a85cb02ef-test.c +131 -0
  144. data/vendor/liburing/test/file-register.c +858 -0
  145. data/vendor/liburing/test/file-update.c +173 -0
  146. data/vendor/liburing/test/file-verify.c +629 -0
  147. data/vendor/liburing/test/files-exit-hang-poll.c +128 -0
  148. data/vendor/liburing/test/files-exit-hang-timeout.c +134 -0
  149. data/vendor/liburing/test/fixed-link.c +90 -0
  150. data/vendor/liburing/test/fpos.c +252 -0
  151. data/vendor/liburing/test/fsync.c +224 -0
  152. data/vendor/liburing/test/hardlink.c +136 -0
  153. data/vendor/liburing/test/helpers.c +135 -0
  154. data/vendor/liburing/test/helpers.h +67 -0
  155. data/vendor/liburing/test/io-cancel.c +550 -0
  156. data/vendor/liburing/test/io_uring_enter.c +296 -0
  157. data/vendor/liburing/test/io_uring_register.c +676 -0
  158. data/vendor/liburing/test/io_uring_setup.c +192 -0
  159. data/vendor/liburing/test/iopoll.c +372 -0
  160. data/vendor/liburing/test/lfs-openat-write.c +119 -0
  161. data/vendor/liburing/test/lfs-openat.c +275 -0
  162. data/vendor/liburing/test/link-timeout.c +1107 -0
  163. data/vendor/liburing/test/link.c +496 -0
  164. data/vendor/liburing/test/link_drain.c +229 -0
  165. data/vendor/liburing/test/madvise.c +195 -0
  166. data/vendor/liburing/test/mkdir.c +108 -0
  167. data/vendor/liburing/test/msg-ring.c +234 -0
  168. data/vendor/liburing/test/multicqes_drain.c +387 -0
  169. data/vendor/liburing/test/nop-all-sizes.c +99 -0
  170. data/vendor/liburing/test/nop.c +115 -0
  171. data/vendor/liburing/test/open-close.c +261 -0
  172. data/vendor/liburing/test/openat2.c +308 -0
  173. data/vendor/liburing/test/personality.c +204 -0
  174. data/vendor/liburing/test/pipe-eof.c +83 -0
  175. data/vendor/liburing/test/pipe-reuse.c +105 -0
  176. data/vendor/liburing/test/poll-cancel-ton.c +135 -0
  177. data/vendor/liburing/test/poll-cancel.c +228 -0
  178. data/vendor/liburing/test/poll-link.c +230 -0
  179. data/vendor/liburing/test/poll-many.c +208 -0
  180. data/vendor/liburing/test/poll-mshot-update.c +273 -0
  181. data/vendor/liburing/test/poll-ring.c +48 -0
  182. data/vendor/liburing/test/poll-v-poll.c +353 -0
  183. data/vendor/liburing/test/poll.c +109 -0
  184. data/vendor/liburing/test/pollfree.c +426 -0
  185. data/vendor/liburing/test/probe.c +135 -0
  186. data/vendor/liburing/test/read-write.c +876 -0
  187. data/vendor/liburing/test/register-restrictions.c +633 -0
  188. data/vendor/liburing/test/rename.c +135 -0
  189. data/vendor/liburing/test/ring-leak.c +173 -0
  190. data/vendor/liburing/test/ring-leak2.c +249 -0
  191. data/vendor/liburing/test/rsrc_tags.c +449 -0
  192. data/vendor/liburing/test/runtests-loop.sh +16 -0
  193. data/vendor/liburing/test/runtests.sh +170 -0
  194. data/vendor/liburing/test/rw_merge_test.c +97 -0
  195. data/vendor/liburing/test/self.c +91 -0
  196. data/vendor/liburing/test/send_recv.c +286 -0
  197. data/vendor/liburing/test/send_recvmsg.c +345 -0
  198. data/vendor/liburing/test/sendmsg_fs_cve.c +200 -0
  199. data/vendor/liburing/test/shared-wq.c +84 -0
  200. data/vendor/liburing/test/short-read.c +75 -0
  201. data/vendor/liburing/test/shutdown.c +165 -0
  202. data/vendor/liburing/test/sigfd-deadlock.c +74 -0
  203. data/vendor/liburing/test/skip-cqe.c +429 -0
  204. data/vendor/liburing/test/socket-rw-eagain.c +158 -0
  205. data/vendor/liburing/test/socket-rw-offset.c +157 -0
  206. data/vendor/liburing/test/socket-rw.c +145 -0
  207. data/vendor/liburing/test/splice.c +512 -0
  208. data/vendor/liburing/test/sq-full-cpp.cc +45 -0
  209. data/vendor/liburing/test/sq-full.c +45 -0
  210. data/vendor/liburing/test/sq-poll-dup.c +204 -0
  211. data/vendor/liburing/test/sq-poll-kthread.c +169 -0
  212. data/vendor/liburing/test/sq-poll-share.c +137 -0
  213. data/vendor/liburing/test/sq-space_left.c +159 -0
  214. data/vendor/liburing/test/sqpoll-cancel-hang.c +157 -0
  215. data/vendor/liburing/test/sqpoll-disable-exit.c +196 -0
  216. data/vendor/liburing/test/sqpoll-exit-hang.c +78 -0
  217. data/vendor/liburing/test/sqpoll-sleep.c +69 -0
  218. data/vendor/liburing/test/statx.c +172 -0
  219. data/vendor/liburing/test/stdout.c +232 -0
  220. data/vendor/liburing/test/submit-link-fail.c +154 -0
  221. data/vendor/liburing/test/submit-reuse.c +239 -0
  222. data/vendor/liburing/test/symlink.c +116 -0
  223. data/vendor/liburing/test/teardowns.c +58 -0
  224. data/vendor/liburing/test/thread-exit.c +143 -0
  225. data/vendor/liburing/test/timeout-new.c +252 -0
  226. data/vendor/liburing/test/timeout-overflow.c +204 -0
  227. data/vendor/liburing/test/timeout.c +1523 -0
  228. data/vendor/liburing/test/unlink.c +112 -0
  229. data/vendor/liburing/test/wakeup-hang.c +162 -0
  230. 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 */