read_barrier();
if (*ring->flags & IORING_SQ_NEED_WAKEUP)
- io_uring_enter(ld, ld->queued, 0, 0);
+ io_uring_enter(ld, ld->queued, 0,
+ IORING_ENTER_SQ_WAKEUP);
ld->queued = 0;
return 0;
}
#include <linux/fs.h>
#include <linux/types.h>
+#define IORING_MAX_ENTRIES 4096
+
/*
* IO submission data structure (Submission Queue Entry)
*/
union {
__kernel_rwf_t rw_flags;
__u32 fsync_flags;
+ __u16 poll_events;
};
__u64 user_data; /* data to be passed back at completion time */
union {
#define IORING_OP_FSYNC 3
#define IORING_OP_READ_FIXED 4
#define IORING_OP_WRITE_FIXED 5
+#define IORING_OP_POLL_ADD 6
+#define IORING_OP_POLL_REMOVE 7
/*
* sqe->fsync_flags
* io_uring_enter(2) flags
*/
#define IORING_ENTER_GETEVENTS (1 << 0)
+#define IORING_ENTER_SQ_WAKEUP (1 << 1)
/*
* Passed in for io_uring_setup(2). Copied back with updated info on success
__u32 cq_entries;
__u32 flags;
__u16 sq_thread_cpu;
- __u16 resv[9];
+ __u16 sq_thread_idle;
+ __u16 resv[8];
struct io_sqring_offsets sq_off;
struct io_cqring_offsets cq_off;
};
if (to_wait)
flags = IORING_ENTER_GETEVENTS;
+ if (*ring->flags & IORING_SQ_NEED_WAKEUP)
+ flags |= IORING_ENTER_SQ_WAKEUP;
ret = io_uring_enter(s, to_submit, to_wait, flags);
s->calls++;
}