/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ #ifndef _UAPI_LINUX_IOPRIO_H #define _UAPI_LINUX_IOPRIO_H #include <linux/stddef.h> #include <linux/types.h> /* * Gives us 8 prio classes with 13-bits of data for each class */ #define IOPRIO_CLASS_SHIFT … #define IOPRIO_NR_CLASSES … #define IOPRIO_CLASS_MASK … #define IOPRIO_PRIO_MASK … #define IOPRIO_PRIO_CLASS(ioprio) … #define IOPRIO_PRIO_DATA(ioprio) … /* * These are the io priority classes as implemented by the BFQ and mq-deadline * schedulers. RT is the realtime class, it always gets premium service. For * ATA disks supporting NCQ IO priority, RT class IOs will be processed using * high priority NCQ commands. BE is the best-effort scheduling class, the * default for any process. IDLE is the idle scheduling class, it is only * served when no one else is using the disk. */ enum { … }; /* * The RT and BE priority classes both support up to 8 priority levels that * can be specified using the lower 3-bits of the priority data. */ #define IOPRIO_LEVEL_NR_BITS … #define IOPRIO_NR_LEVELS … #define IOPRIO_LEVEL_MASK … #define IOPRIO_PRIO_LEVEL(ioprio) … #define IOPRIO_BE_NR … /* * Possible values for the "which" argument of the ioprio_get() and * ioprio_set() system calls (see "man ioprio_set"). */ enum { … }; /* * Fallback BE class priority level. */ #define IOPRIO_NORM … #define IOPRIO_BE_NORM … /* * The 10 bits between the priority class and the priority level are used to * optionally define I/O hints for any combination of I/O priority class and * level. Depending on the kernel configuration, I/O scheduler being used and * the target I/O device being used, hints can influence how I/Os are processed * without affecting the I/O scheduling ordering defined by the I/O priority * class and level. */ #define IOPRIO_HINT_SHIFT … #define IOPRIO_HINT_NR_BITS … #define IOPRIO_NR_HINTS … #define IOPRIO_HINT_MASK … #define IOPRIO_PRIO_HINT(ioprio) … /* * I/O hints. */ enum { … }; #define IOPRIO_BAD_VALUE(val, max) … /* * Return an I/O priority value based on a class, a level and a hint. */ static __always_inline __u16 ioprio_value(int prioclass, int priolevel, int priohint) { … } #define IOPRIO_PRIO_VALUE(prioclass, priolevel) … #define IOPRIO_PRIO_VALUE_HINT(prioclass, priolevel, priohint) … #endif /* _UAPI_LINUX_IOPRIO_H */