Branch data 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