| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- // SPDX-License-Identifier: GPL-2.0
- #ifndef IOU_WAIT_H
- #define IOU_WAIT_H
- #include <linux/io_uring_types.h>
- /*
- * No waiters. It's larger than any valid value of the tw counter
- * so that tests against ->cq_wait_nr would fail and skip wake_up().
- */
- #define IO_CQ_WAKE_INIT (-1U)
- /* Forced wake up if there is a waiter regardless of ->cq_wait_nr */
- #define IO_CQ_WAKE_FORCE (IO_CQ_WAKE_INIT >> 1)
- struct ext_arg {
- size_t argsz;
- struct timespec64 ts;
- const sigset_t __user *sig;
- ktime_t min_time;
- bool ts_set;
- bool iowait;
- };
- int io_cqring_wait(struct io_ring_ctx *ctx, int min_events, u32 flags,
- struct ext_arg *ext_arg);
- int io_run_task_work_sig(struct io_ring_ctx *ctx);
- void io_cqring_do_overflow_flush(struct io_ring_ctx *ctx);
- static inline unsigned int __io_cqring_events(struct io_ring_ctx *ctx)
- {
- struct io_rings *rings = io_get_rings(ctx);
- return ctx->cached_cq_tail - READ_ONCE(rings->cq.head);
- }
- static inline unsigned int __io_cqring_events_user(struct io_ring_ctx *ctx)
- {
- struct io_rings *rings = io_get_rings(ctx);
- return READ_ONCE(rings->cq.tail) - READ_ONCE(rings->cq.head);
- }
- /*
- * Reads the tail/head of the CQ ring while providing an acquire ordering,
- * see comment at top of io_uring.c.
- */
- static inline unsigned io_cqring_events(struct io_ring_ctx *ctx)
- {
- smp_rmb();
- return __io_cqring_events(ctx);
- }
- #endif
|