Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sched: Consolidate open coded implementations of nice level frobbing into nice_to_rlimit() and rlimit_to_nice()

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/a568a1e3cc8e78648f41b5035fa5e381d36274da.1399532322.git.yangds.fnst@cn.fujitsu.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Dongsheng Yang and committed by
Ingo Molnar
7aa2c016 a803f026

+21 -5
+1 -1
drivers/staging/android/binder.c
··· 436 436 set_user_nice(current, nice); 437 437 return; 438 438 } 439 - min_nice = 20 - current->signal->rlim[RLIMIT_NICE].rlim_cur; 439 + min_nice = rlimit_to_nice(current->signal->rlim[RLIMIT_NICE].rlim_cur); 440 440 binder_debug(BINDER_DEBUG_PRIORITY_CAP, 441 441 "%d: nice value %ld not allowed use %ld instead\n", 442 442 current->pid, nice, min_nice);
+16
include/linux/sched/prio.h
··· 41 41 #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) 42 42 #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) 43 43 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 + 44 60 #endif /* _SCHED_PRIO_H */
+1 -1
kernel/sched/core.c
··· 3033 3033 int can_nice(const struct task_struct *p, const int nice) 3034 3034 { 3035 3035 /* convert nice value [19,-20] to rlimit style value [1,40] */ 3036 - int nice_rlim = 20 - nice; 3036 + int nice_rlim = nice_to_rlimit(nice); 3037 3037 3038 3038 return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || 3039 3039 capable(CAP_SYS_NICE));
+3 -3
kernel/sys.c
··· 250 250 else 251 251 p = current; 252 252 if (p) { 253 - niceval = 20 - task_nice(p); 253 + niceval = nice_to_rlimit(task_nice(p)); 254 254 if (niceval > retval) 255 255 retval = niceval; 256 256 } ··· 261 261 else 262 262 pgrp = task_pgrp(current); 263 263 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) { 264 - niceval = 20 - task_nice(p); 264 + niceval = nice_to_rlimit(task_nice(p)); 265 265 if (niceval > retval) 266 266 retval = niceval; 267 267 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p); ··· 277 277 278 278 do_each_thread(g, p) { 279 279 if (uid_eq(task_uid(p), uid)) { 280 - niceval = 20 - task_nice(p); 280 + niceval = nice_to_rlimit(task_nice(p)); 281 281 if (niceval > retval) 282 282 retval = niceval; 283 283 }