aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/liburing/src/include/liburing.h
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2024-06-09 11:55:21 +0300
committerthegeorg <thegeorg@yandex-team.com>2024-06-09 12:07:55 +0300
commitafd4899380eea1c70e2a68714b5da1c9919ccdbd (patch)
treecd5120708784139bc6a0f8881da1ed8389a065b3 /contrib/libs/liburing/src/include/liburing.h
parenta83bd2dd3c21e38c6c0807ec5e679497ab567f24 (diff)
downloadydb-afd4899380eea1c70e2a68714b5da1c9919ccdbd.tar.gz
Update contrib/libs/liburing to 2.6
3b51a9fb14de805208d11f1c077c78bb5d487e0f
Diffstat (limited to 'contrib/libs/liburing/src/include/liburing.h')
-rw-r--r--contrib/libs/liburing/src/include/liburing.h146
1 files changed, 126 insertions, 20 deletions
diff --git a/contrib/libs/liburing/src/include/liburing.h b/contrib/libs/liburing/src/include/liburing.h
index e6dc9a792f..7d04aec13a 100644
--- a/contrib/libs/liburing/src/include/liburing.h
+++ b/contrib/libs/liburing/src/include/liburing.h
@@ -2,14 +2,6 @@
#ifndef LIB_URING_H
#define LIB_URING_H
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 500 /* Required for glibc to expose sigset_t */
-#endif
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE /* Required for musl to expose cpu_set_t */
-#endif
-
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/uio.h>
@@ -21,6 +13,7 @@
#include <fcntl.h>
#include <sched.h>
#include <linux/swab.h>
+#include <sys/wait.h>
#include "liburing/compat.h"
#include "liburing/io_uring.h"
#include "liburing/io_uring_version.h"
@@ -164,6 +157,9 @@ IOURINGINLINE int io_uring_opcode_supported(const struct io_uring_probe *p,
return (p->ops[op].flags & IO_URING_OP_SUPPORTED) != 0;
}
+int io_uring_queue_init_mem(unsigned entries, struct io_uring *ring,
+ struct io_uring_params *p,
+ void *buf, size_t buf_size);
int io_uring_queue_init_params(unsigned entries, struct io_uring *ring,
struct io_uring_params *p);
int io_uring_queue_init(unsigned entries, struct io_uring *ring,
@@ -235,12 +231,16 @@ int io_uring_close_ring_fd(struct io_uring *ring);
int io_uring_register_buf_ring(struct io_uring *ring,
struct io_uring_buf_reg *reg, unsigned int flags);
int io_uring_unregister_buf_ring(struct io_uring *ring, int bgid);
+int io_uring_buf_ring_head(struct io_uring *ring, int buf_group, uint16_t *head);
int io_uring_register_sync_cancel(struct io_uring *ring,
struct io_uring_sync_cancel_reg *reg);
int io_uring_register_file_alloc_range(struct io_uring *ring,
unsigned off, unsigned len);
+int io_uring_register_napi(struct io_uring *ring, struct io_uring_napi *napi);
+int io_uring_unregister_napi(struct io_uring *ring, struct io_uring_napi *napi);
+
int io_uring_get_events(struct io_uring *ring);
int io_uring_submit_and_get_events(struct io_uring *ring);
@@ -375,17 +375,10 @@ IOURINGINLINE void __io_uring_set_target_fixed_file(struct io_uring_sqe *sqe,
sqe->file_index = file_index + 1;
}
-IOURINGINLINE void io_uring_prep_rw(int op, struct io_uring_sqe *sqe, int fd,
- const void *addr, unsigned len,
- __u64 offset)
+IOURINGINLINE void io_uring_initialize_sqe(struct io_uring_sqe *sqe)
{
- sqe->opcode = (__u8) op;
sqe->flags = 0;
sqe->ioprio = 0;
- sqe->fd = fd;
- sqe->off = offset;
- sqe->addr = (unsigned long) addr;
- sqe->len = len;
sqe->rw_flags = 0;
sqe->buf_index = 0;
sqe->personality = 0;
@@ -394,6 +387,17 @@ IOURINGINLINE void io_uring_prep_rw(int op, struct io_uring_sqe *sqe, int fd,
sqe->__pad2[0] = 0;
}
+IOURINGINLINE void io_uring_prep_rw(int op, struct io_uring_sqe *sqe, int fd,
+ const void *addr, unsigned len,
+ __u64 offset)
+{
+ sqe->opcode = (__u8) op;
+ sqe->fd = fd;
+ sqe->off = offset;
+ sqe->addr = (unsigned long) addr;
+ sqe->len = len;
+}
+
/*
* io_uring_prep_splice() - Either @fd_in or @fd_out must be a pipe.
*
@@ -720,6 +724,15 @@ IOURINGINLINE void io_uring_prep_read(struct io_uring_sqe *sqe, int fd,
io_uring_prep_rw(IORING_OP_READ, sqe, fd, buf, nbytes, offset);
}
+IOURINGINLINE void io_uring_prep_read_multishot(struct io_uring_sqe *sqe,
+ int fd, unsigned nbytes,
+ __u64 offset, int buf_group)
+{
+ io_uring_prep_rw(IORING_OP_READ_MULTISHOT, sqe, fd, NULL, nbytes,
+ offset);
+ sqe->buf_group = buf_group;
+}
+
IOURINGINLINE void io_uring_prep_write(struct io_uring_sqe *sqe, int fd,
const void *buf, unsigned nbytes,
__u64 offset)
@@ -1126,12 +1139,88 @@ IOURINGINLINE void io_uring_prep_socket_direct_alloc(struct io_uring_sqe *sqe,
}
/*
+ * Prepare commands for sockets
+ */
+IOURINGINLINE void io_uring_prep_cmd_sock(struct io_uring_sqe *sqe,
+ int cmd_op,
+ int fd,
+ int level,
+ int optname,
+ void *optval,
+ int optlen)
+{
+ io_uring_prep_rw(IORING_OP_URING_CMD, sqe, fd, NULL, 0, 0);
+ sqe->optval = (unsigned long) (uintptr_t) optval;
+ sqe->optname = optname;
+ sqe->optlen = optlen;
+ sqe->cmd_op = cmd_op;
+ sqe->level = level;
+}
+
+IOURINGINLINE void io_uring_prep_waitid(struct io_uring_sqe *sqe,
+ idtype_t idtype,
+ id_t id,
+ siginfo_t *infop,
+ int options, unsigned int flags)
+{
+ io_uring_prep_rw(IORING_OP_WAITID, sqe, id, NULL, (unsigned) idtype, 0);
+ sqe->waitid_flags = flags;
+ sqe->file_index = options;
+ sqe->addr2 = (unsigned long) infop;
+}
+
+IOURINGINLINE void io_uring_prep_futex_wake(struct io_uring_sqe *sqe,
+ uint32_t *futex, uint64_t val,
+ uint64_t mask, uint32_t futex_flags,
+ unsigned int flags)
+{
+ io_uring_prep_rw(IORING_OP_FUTEX_WAKE, sqe, futex_flags, futex, 0, val);
+ sqe->futex_flags = flags;
+ sqe->addr3 = mask;
+}
+
+IOURINGINLINE void io_uring_prep_futex_wait(struct io_uring_sqe *sqe,
+ uint32_t *futex, uint64_t val,
+ uint64_t mask, uint32_t futex_flags,
+ unsigned int flags)
+{
+ io_uring_prep_rw(IORING_OP_FUTEX_WAIT, sqe, futex_flags, futex, 0, val);
+ sqe->futex_flags = flags;
+ sqe->addr3 = mask;
+}
+
+struct futex_waitv;
+IOURINGINLINE void io_uring_prep_futex_waitv(struct io_uring_sqe *sqe,
+ struct futex_waitv *futex,
+ uint32_t nr_futex,
+ unsigned int flags)
+{
+ io_uring_prep_rw(IORING_OP_FUTEX_WAITV, sqe, 0, futex, nr_futex, 0);
+ sqe->futex_flags = flags;
+}
+
+IOURINGINLINE void io_uring_prep_fixed_fd_install(struct io_uring_sqe *sqe,
+ int fd,
+ unsigned int flags)
+{
+ io_uring_prep_rw(IORING_OP_FIXED_FD_INSTALL, sqe, fd, NULL, 0, 0);
+ sqe->flags = IOSQE_FIXED_FILE;
+ sqe->install_fd_flags = flags;
+}
+
+IOURINGINLINE void io_uring_prep_ftruncate(struct io_uring_sqe *sqe,
+ int fd, loff_t len)
+{
+ io_uring_prep_rw(IORING_OP_FTRUNCATE, sqe, fd, 0, 0, len);
+}
+
+/*
* Returns number of unconsumed (if SQPOLL) or unsubmitted entries exist in
* the SQ ring
*/
IOURINGINLINE unsigned io_uring_sq_ready(const struct io_uring *ring)
{
- unsigned khead = *ring->sq.khead;
+ unsigned khead;
/*
* Without a barrier, we could miss an update and think the SQ wasn't
@@ -1140,6 +1229,8 @@ IOURINGINLINE unsigned io_uring_sq_ready(const struct io_uring *ring)
*/
if (ring->flags & IORING_SETUP_SQPOLL)
khead = io_uring_smp_load_acquire(ring->sq.khead);
+ else
+ khead = *ring->sq.khead;
/* always use real head, to avoid losing sync for short submit */
return ring->sq.sqe_tail - khead;
@@ -1326,7 +1417,7 @@ IOURINGINLINE struct io_uring_sqe *_io_uring_get_sqe(struct io_uring *ring)
if (ring->flags & IORING_SETUP_SQE128)
shift = 1;
if (!(ring->flags & IORING_SETUP_SQPOLL))
- head = IO_URING_READ_ONCE(*sq->khead);
+ head = *sq->khead;
else
head = io_uring_smp_load_acquire(sq->khead);
@@ -1335,6 +1426,7 @@ IOURINGINLINE struct io_uring_sqe *_io_uring_get_sqe(struct io_uring *ring)
sqe = &sq->sqes[(sq->sqe_tail & sq->ring_mask) << shift];
sq->sqe_tail = next;
+ io_uring_initialize_sqe(sqe);
return sqe;
}
@@ -1386,7 +1478,7 @@ IOURINGINLINE void __io_uring_buf_ring_cq_advance(struct io_uring *ring,
struct io_uring_buf_ring *br,
int cq_count, int buf_count)
{
- br->tail += buf_count;
+ io_uring_buf_ring_advance(br, buf_count);
io_uring_cq_advance(ring, cq_count);
}
@@ -1404,6 +1496,20 @@ IOURINGINLINE void io_uring_buf_ring_cq_advance(struct io_uring *ring,
__io_uring_buf_ring_cq_advance(ring, br, count, count);
}
+IOURINGINLINE int io_uring_buf_ring_available(struct io_uring *ring,
+ struct io_uring_buf_ring *br,
+ unsigned short bgid)
+{
+ uint16_t head;
+ int ret;
+
+ ret = io_uring_buf_ring_head(ring, bgid, &head);
+ if (ret)
+ return ret;
+
+ return (uint16_t) (br->tail - head);
+}
+
#ifndef LIBURING_INTERNAL
IOURINGINLINE struct io_uring_sqe *io_uring_get_sqe(struct io_uring *ring)
{
@@ -1432,7 +1538,7 @@ bool io_uring_check_version(int major, int minor);
#define IO_URING_CHECK_VERSION(major,minor) \
(major > IO_URING_VERSION_MAJOR || \
(major == IO_URING_VERSION_MAJOR && \
- minor >= IO_URING_VERSION_MINOR))
+ minor > IO_URING_VERSION_MINOR))
#ifdef __cplusplus
}