axboe-liburing 2.15.2

Low-level io_uring interface, transliterated from Jens Axboe's liburing.
Documentation
Query io_uring capabilities and feature
support

# DESCRIPTION

The [io_uring_register_query] 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:

``` c
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], [io_uring_setup]