Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _UAPI_LINUX_IOPRIO_H
3#define _UAPI_LINUX_IOPRIO_H
4
5/*
6 * Gives us 8 prio classes with 13-bits of data for each class
7 */
8#define IOPRIO_CLASS_SHIFT 13
9#define IOPRIO_CLASS_MASK 0x07
10#define IOPRIO_PRIO_MASK ((1UL << IOPRIO_CLASS_SHIFT) - 1)
11
12#define IOPRIO_PRIO_CLASS(ioprio) \
13 (((ioprio) >> IOPRIO_CLASS_SHIFT) & IOPRIO_CLASS_MASK)
14#define IOPRIO_PRIO_DATA(ioprio) ((ioprio) & IOPRIO_PRIO_MASK)
15#define IOPRIO_PRIO_VALUE(class, data) \
16 ((((class) & IOPRIO_CLASS_MASK) << IOPRIO_CLASS_SHIFT) | \
17 ((data) & IOPRIO_PRIO_MASK))
18
19/*
20 * These are the io priority groups as implemented by the BFQ and mq-deadline
21 * schedulers. RT is the realtime class, it always gets premium service. For
22 * ATA disks supporting NCQ IO priority, RT class IOs will be processed using
23 * high priority NCQ commands. BE is the best-effort scheduling class, the
24 * default for any process. IDLE is the idle scheduling class, it is only
25 * served when no one else is using the disk.
26 */
27enum {
28 IOPRIO_CLASS_NONE,
29 IOPRIO_CLASS_RT,
30 IOPRIO_CLASS_BE,
31 IOPRIO_CLASS_IDLE,
32};
33
34/*
35 * The RT and BE priority classes both support up to 8 priority levels.
36 */
37#define IOPRIO_NR_LEVELS 8
38#define IOPRIO_BE_NR IOPRIO_NR_LEVELS
39
40enum {
41 IOPRIO_WHO_PROCESS = 1,
42 IOPRIO_WHO_PGRP,
43 IOPRIO_WHO_USER,
44};
45
46/*
47 * Fallback BE priority level.
48 */
49#define IOPRIO_NORM 4
50#define IOPRIO_BE_NORM IOPRIO_NORM
51
52#endif /* _UAPI_LINUX_IOPRIO_H */