Dongsheng Yang | 5c22807 | 2014-01-27 17:15:37 -0500 | [diff] [blame] | 1 | #ifndef _SCHED_PRIO_H |
| 2 | #define _SCHED_PRIO_H |
| 3 | |
Dongsheng Yang | 3ee237d | 2014-02-11 15:34:46 +0800 | [diff] [blame] | 4 | #define MAX_NICE 19 |
| 5 | #define MIN_NICE -20 |
| 6 | #define NICE_WIDTH (MAX_NICE - MIN_NICE + 1) |
| 7 | |
Dongsheng Yang | 5c22807 | 2014-01-27 17:15:37 -0500 | [diff] [blame] | 8 | /* |
| 9 | * Priority of a process goes from 0..MAX_PRIO-1, valid RT |
| 10 | * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH |
| 11 | * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority |
| 12 | * values are inverted: lower p->prio value means higher priority. |
| 13 | * |
| 14 | * The MAX_USER_RT_PRIO value allows the actual maximum |
| 15 | * RT priority to be separate from the value exported to |
| 16 | * user-space. This allows kernel threads to set their |
| 17 | * priority to a value higher than any user task. Note: |
| 18 | * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO. |
| 19 | */ |
| 20 | |
| 21 | #define MAX_USER_RT_PRIO 100 |
| 22 | #define MAX_RT_PRIO MAX_USER_RT_PRIO |
| 23 | |
Dongsheng Yang | 3ee237d | 2014-02-11 15:34:46 +0800 | [diff] [blame] | 24 | #define MAX_PRIO (MAX_RT_PRIO + NICE_WIDTH) |
| 25 | #define DEFAULT_PRIO (MAX_RT_PRIO + NICE_WIDTH / 2) |
Dongsheng Yang | 5c22807 | 2014-01-27 17:15:37 -0500 | [diff] [blame] | 26 | |
Dongsheng Yang | 6b6350f | 2014-01-27 17:15:38 -0500 | [diff] [blame] | 27 | /* |
| 28 | * Convert user-nice values [ -20 ... 0 ... 19 ] |
| 29 | * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ], |
| 30 | * and back. |
| 31 | */ |
Dongsheng Yang | 7e298d6 | 2014-02-11 15:34:45 +0800 | [diff] [blame] | 32 | #define NICE_TO_PRIO(nice) ((nice) + DEFAULT_PRIO) |
| 33 | #define PRIO_TO_NICE(prio) ((prio) - DEFAULT_PRIO) |
Dongsheng Yang | 6b6350f | 2014-01-27 17:15:38 -0500 | [diff] [blame] | 34 | |
| 35 | /* |
| 36 | * 'User priority' is the nice value converted to something we |
| 37 | * can work with better when scaling various scheduler parameters, |
| 38 | * it's a [ 0 ... 39 ] range. |
| 39 | */ |
| 40 | #define USER_PRIO(p) ((p)-MAX_RT_PRIO) |
| 41 | #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) |
| 42 | #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) |
| 43 | |
Dongsheng Yang | 7aa2c01 | 2014-05-08 18:33:49 +0900 | [diff] [blame] | 44 | /* |
| 45 | * Convert nice value [19,-20] to rlimit style value [1,40]. |
| 46 | */ |
| 47 | static inline long nice_to_rlimit(long nice) |
| 48 | { |
| 49 | return (MAX_NICE - nice + 1); |
| 50 | } |
| 51 | |
| 52 | /* |
| 53 | * Convert rlimit style value [1,40] to nice value [-20, 19]. |
| 54 | */ |
| 55 | static inline long rlimit_to_nice(long prio) |
| 56 | { |
| 57 | return (MAX_NICE - prio + 1); |
| 58 | } |
| 59 | |
Dongsheng Yang | 5c22807 | 2014-01-27 17:15:37 -0500 | [diff] [blame] | 60 | #endif /* _SCHED_PRIO_H */ |