io_uring_register_query(3)

NAME
io_uring_register_query - query io_uring capabilities and feature support

SYNOPSIS
#include <liburing.h>

int io_uring_register_query(struct io_uring_query_hdr *query);

DESCRIPTION

The io_uring_register_query(3) function queries io_uring capabilities and feature support. It provides information about supported opcodes, flags, and subsystem-specific capabilities. The query argument must point to a struct io_uring_query_hdr structure that describes the query to perform:

    struct io_uring_query_hdr {
        __u64 next_entry;
        __u64 query_data;
        __u32 query_op;
        __u32 size;
        __s32 result;
        __u32 __resv[3];
    };

The next_entry field can be used to chain multiple queries together. It should point to the next struct io_uring_query_hdr structure, or be set to 0 for the last entry in the chain. The query_data field must point to a data structure appropriate for the query type specified in query_op. The query_op field specifies the type of query to perform and can be one of:

IO_URING_QUERY_OPCODES
    Returns information about supported opcodes and flags. The query_data field must point to a struct io_uring_query_opcode structure, which will be filled with information about supported request opcodes, register opcodes, feature flags, setup flags, enter flags, and SQE flags.

IO_URING_QUERY_ZCRX
    Returns information about zero-copy receive support. The query_data field must point to a struct io_uring_query_zcrx structure, which will be filled with information about supported zero-copy receive flags, features, and configuration details.

IO_URING_QUERY_SCQ
    Returns information about the SQ/CQ ring layout. The query_data field must point to a struct io_uring_query_scq structure, which will be filled with information about ring header size and alignment requirements.

The size field should be set to the size of the data structure pointed to by query_data. Upon return, the result field will contain 0 on success, or a negative error code on failure. The reserved __resv fields must be cleared to zero.

RETURN VALUE
Returns 0 on success. On error, a negative errno value is returned.

NOTES
This function is available since Linux kernel 6.15. Multiple queries can be efficiently performed in a single system call by chaining them together using the next_entry field.

SEE ALSO
io_uring_register(2), io_uring_setup(2)