io_uring/io_uring.h

Source file repositories/reference/linux-study-clean/io_uring/io_uring.h

File Facts

System
Linux kernel
Corpus path
io_uring/io_uring.h
Extension
.h
Size
16369 bytes
Lines
586
Domain
Kernel Services
Bucket
io_uring
Inferred role
Kernel Services: implementation source
Status
source implementation candidate

Why This File Exists

Shared kernel service surface used by multiple subsystems, including helpers, cryptography, virtualization support, and async I/O infrastructure.

Dependency Surface

Detected Declarations

Annotated Snippet

struct io_rings_layout {
	/* size of CQ + headers + SQ offset array */
	size_t rings_size;
	size_t sq_size;

	size_t sq_array_offset;
};

struct io_ctx_config {
	struct io_uring_params p;
	struct io_rings_layout layout;
	struct io_uring_params __user *uptr;
};

#define IORING_FEAT_FLAGS (IORING_FEAT_SINGLE_MMAP |\
			IORING_FEAT_NODROP |\
			IORING_FEAT_SUBMIT_STABLE |\
			IORING_FEAT_RW_CUR_POS |\
			IORING_FEAT_CUR_PERSONALITY |\
			IORING_FEAT_FAST_POLL |\
			IORING_FEAT_POLL_32BITS |\
			IORING_FEAT_SQPOLL_NONFIXED |\
			IORING_FEAT_EXT_ARG |\
			IORING_FEAT_NATIVE_WORKERS |\
			IORING_FEAT_RSRC_TAGS |\
			IORING_FEAT_CQE_SKIP |\
			IORING_FEAT_LINKED_FILE |\
			IORING_FEAT_REG_REG_RING |\
			IORING_FEAT_RECVSEND_BUNDLE |\
			IORING_FEAT_MIN_TIMEOUT |\
			IORING_FEAT_RW_ATTR |\
			IORING_FEAT_NO_IOWAIT)

#define IORING_SETUP_FLAGS (IORING_SETUP_IOPOLL |\
			IORING_SETUP_SQPOLL |\
			IORING_SETUP_SQ_AFF |\
			IORING_SETUP_CQSIZE |\
			IORING_SETUP_CLAMP |\
			IORING_SETUP_ATTACH_WQ |\
			IORING_SETUP_R_DISABLED |\
			IORING_SETUP_SUBMIT_ALL |\
			IORING_SETUP_COOP_TASKRUN |\
			IORING_SETUP_TASKRUN_FLAG |\
			IORING_SETUP_SQE128 |\
			IORING_SETUP_CQE32 |\
			IORING_SETUP_SINGLE_ISSUER |\
			IORING_SETUP_DEFER_TASKRUN |\
			IORING_SETUP_NO_MMAP |\
			IORING_SETUP_REGISTERED_FD_ONLY |\
			IORING_SETUP_NO_SQARRAY |\
			IORING_SETUP_HYBRID_IOPOLL |\
			IORING_SETUP_CQE_MIXED |\
			IORING_SETUP_SQE_MIXED |\
			IORING_SETUP_SQ_REWIND)

#define IORING_ENTER_FLAGS (IORING_ENTER_GETEVENTS |\
			IORING_ENTER_SQ_WAKEUP |\
			IORING_ENTER_SQ_WAIT |\
			IORING_ENTER_EXT_ARG |\
			IORING_ENTER_REGISTERED_RING |\
			IORING_ENTER_ABS_TIMER |\
			IORING_ENTER_EXT_ARG_REG |\
			IORING_ENTER_NO_IOWAIT)


#define SQE_VALID_FLAGS (IOSQE_FIXED_FILE |\
			IOSQE_IO_DRAIN |\
			IOSQE_IO_LINK |\
			IOSQE_IO_HARDLINK |\
			IOSQE_ASYNC |\
			IOSQE_BUFFER_SELECT |\
			IOSQE_CQE_SKIP_SUCCESS)

#define IO_REQ_LINK_FLAGS (REQ_F_LINK | REQ_F_HARDLINK)

/*
 * Complaint timeout for io_uring cancelation exits, and for io-wq exit
 * worker waiting.
 */
#define IO_URING_EXIT_WAIT_MAX	(HZ * 60 * 5)

enum {
	IOU_COMPLETE		= 0,

	IOU_ISSUE_SKIP_COMPLETE	= -EIOCBQUEUED,

	/*
	 * The request has more work to do and should be retried. io_uring will
	 * attempt to wait on the file for eligible opcodes, but otherwise
	 * it'll be handed to iowq for blocking execution. It works for normal

Annotation

Implementation Notes