Messages in this thread Patch in this message | | | Date | Thu, 20 Nov 2008 11:48:54 +0530 | From | Bharata B Rao <> | Subject | [PATCH] sched: Don't allow priority switch to realtime when the task doesn't belong to init_task_group and when CONFIG_RT_GROUP_SCHED isn't set |
| |
Applies on 2.6.28-rc5.
With CONFIG_RT_GROUP_SCHED not set, don't allow a task's priority switch to realtime if the task isn't part of init_task_group.
A task belonging to a fair group could use sched_setscheduler/sched_setparam to become a realtime task. If such a task belongs to one of the child groups of init_task_group and if CONFIG_RT_GROUP_SCHED is not set, then it ends up getting queued in init_task_group's runqueue. So we have a situation where, a task belongs to one group (child) but ends in the runqueue of another group (init_task_group). This does not look correct.
Fix this by failing such priority change requests in sched_setscheduler() and sched_setparam().
Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> --- kernel/sched.c | 7 +++++++ 1 file changed, 7 insertions(+)
--- a/kernel/sched.c +++ b/kernel/sched.c @@ -5206,6 +5206,13 @@ recheck: if (rt_bandwidth_enabled() && rt_policy(policy) && task_group(p)->rt_bandwidth.rt_runtime == 0) return -EPERM; +#elif defined(CONFIG_FAIR_GROUP_SCHED) + /* + * If the task doesn't belong to init_task_group, don't + * allow priority switch to realtime. (!CONFIG_RT_GROUP_SCHED) + */ + if (rt_policy(policy) && (task_group(p) != &init_task_group)) + return -EPERM; #endif retval = security_task_setscheduler(p, policy, param); Regards, Bharata.
| |