allow to use nice values to set group weights Signed-off-by: Peter Zijlstra --- kernel/sched.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) Index: linux-2.6/kernel/sched.c =================================================================== --- linux-2.6.orig/kernel/sched.c +++ linux-2.6/kernel/sched.c @@ -8558,6 +8558,17 @@ static inline void unregister_fair_sched { list_del_rcu(&tg->cfs_rq[cpu]->leaf_cfs_rq_list); } + +static int cpu_nice_write(struct cgroup *cgrp, struct cftype *cftype, + s64 niceval) +{ + return sched_group_set_nice(cgroup_tg(cgrp), niceval); +} + +static s64 cpu_nice_read(struct cgroup *cgrp, struct cftype *cftype) +{ + return sched_group_nice(cgroup_tg(cgrp)); +} #else /* !CONFG_FAIR_GROUP_SCHED */ static inline void free_fair_sched_group(struct task_group *tg) { @@ -8867,6 +8878,29 @@ unsigned long sched_group_weight(struct { return tg->weight; } + +static int sched_group_set_nice(struct task_group *tg, int nice) +{ + unsigned int prio = nice + 20; + + if (prio > ARRAY_SIZE(prio_to_weight)) + return -EINVAL; + + sched_group_set_weight(tg, prio_to_weight[prio]); + return 0; +} + +static int sched_group_nice(struct task_group *tg) +{ + unsigned long weight = sched_group_weight(tg); + int prio; + + for (prio = 0; prio < ARRAY_SIZE(prio_to_weight); prio++) + if (prio_to_weight[prio] <= weight) + break; + + return prio - 20; +} #endif #ifdef CONFIG_RT_GROUP_SCHED @@ -9233,6 +9267,11 @@ static struct cftype cpu_files[] = { .read_u64 = cpu_weight_read_u64, .write_u64 = cpu_weight_write_u64, }, + { + .name = "nice", + .read_s64 = cpu_nice_read, + .write_s64 = cpu_nice_write, + }, #endif #ifdef CONFIG_RT_GROUP_SCHED { -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/