Line data Source code
1 : #ifndef IOPRIO_H 2 : #define IOPRIO_H 3 : 4 : /* This is minimal version of Linux' linux/ioprio.h header file, which 5 : * is licensed GPL2 */ 6 : 7 : #include <sys/syscall.h> 8 : #include <unistd.h> 9 : 10 : /* 11 : * Gives us 8 prio classes with 13-bits of data for each class 12 : */ 13 : #define IOPRIO_BITS 16 14 : #define IOPRIO_N_CLASSES 8 15 : #define IOPRIO_CLASS_SHIFT 13 16 : #define IOPRIO_PRIO_MASK ((1UL << IOPRIO_CLASS_SHIFT) - 1) 17 : 18 : #define IOPRIO_PRIO_CLASS(mask) ((mask) >> IOPRIO_CLASS_SHIFT) 19 : #define IOPRIO_PRIO_DATA(mask) ((mask) & IOPRIO_PRIO_MASK) 20 : #define IOPRIO_PRIO_VALUE(class, data) (((class) << IOPRIO_CLASS_SHIFT) | data) 21 : 22 : #define ioprio_valid(mask) (IOPRIO_PRIO_CLASS((mask)) != IOPRIO_CLASS_NONE) 23 : 24 : /* 25 : * These are the io priority groups as implemented by CFQ. RT is the realtime 26 : * class, it always gets premium service. BE is the best-effort scheduling 27 : * class, the default for any process. IDLE is the idle scheduling class, it 28 : * is only served when no one else is using the disk. 29 : */ 30 : enum { 31 : IOPRIO_CLASS_NONE, 32 : IOPRIO_CLASS_RT, 33 : IOPRIO_CLASS_BE, 34 : IOPRIO_CLASS_IDLE, 35 : }; 36 : 37 : /* 38 : * 8 best effort priority levels are supported 39 : */ 40 : #define IOPRIO_BE_NR (8) 41 : 42 : enum { 43 : IOPRIO_WHO_PROCESS = 1, 44 : IOPRIO_WHO_PGRP, 45 : IOPRIO_WHO_USER, 46 : }; 47 : 48 0 : static inline int ioprio_set(int which, int who, int ioprio) { 49 0 : return syscall(__NR_ioprio_set, which, who, ioprio); 50 : } 51 : 52 0 : static inline int ioprio_get(int which, int who) { 53 0 : return syscall(__NR_ioprio_get, which, who); 54 : } 55 : 56 : #endif