@@ -132,6 +132,16 @@ struct io_uring {
unsigned pad2;
};
+struct io_uring_zcrx_rq {
+ __u32 *khead;
+ __u32 *ktail;
+ __u32 rq_tail;
+ unsigned ring_entries;
+
+ struct io_uring_zcrx_rqe *rqes;
+ void *ring_ptr;
+};
+
/*
* Library interface
*/
@@ -265,6 +275,8 @@ int io_uring_register_file_alloc_range(struct io_uring *ring,
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_register_ifq(struct io_uring *ring,
+ struct io_uring_zcrx_ifq_reg *reg);
int io_uring_register_clock(struct io_uring *ring,
struct io_uring_clock_register *arg);
@@ -227,4 +227,6 @@ LIBURING_2.9 {
} LIBURING_2.8;
LIBURING_2.10 {
+ global:
+ io_uring_register_ifq;
} LIBURING_2.9;
@@ -113,4 +113,6 @@ LIBURING_2.9 {
} LIBURING_2.8;
LIBURING_2.10 {
+ global:
+ io_uring_register_ifq;
} LIBURING_2.9;
@@ -422,6 +422,12 @@ int io_uring_clone_buffers(struct io_uring *dst, struct io_uring *src)
return io_uring_clone_buffers_offset(dst, src, 0, 0, 0, 0);
}
+int io_uring_register_ifq(struct io_uring *ring,
+ struct io_uring_zcrx_ifq_reg *reg)
+{
+ return do_register(ring, IORING_REGISTER_ZCRX_IFQ, reg, 1);
+}
+
int io_uring_resize_rings(struct io_uring *ring, struct io_uring_params *p)
{
unsigned sq_head, sq_tail;
Add basic support for zcrx with a thin wrapper around IORING_REGISTER_ZCRX_IFQ and a struct for the refill queue. Signed-off-by: David Wei <dw@davidwei.uk> --- src/include/liburing.h | 12 ++++++++++++ src/liburing-ffi.map | 2 ++ src/liburing.map | 2 ++ src/register.c | 6 ++++++ 4 files changed, 22 insertions(+)