Files
linux-legacy-genesi-2/kernel
Lennart Poettering 29d449ffbc sched: Introduce SCHED_RESET_ON_FORK scheduling policy flag
This patch introduces a new flag SCHED_RESET_ON_FORK which can be passed
to the kernel via sched_setscheduler(), ORed in the policy parameter. If
set this will make sure that when the process forks a) the scheduling
priority is reset to DEFAULT_PRIO if it was higher and b) the scheduling
policy is reset to SCHED_NORMAL if it was either SCHED_FIFO or SCHED_RR.

Why have this?

Currently, if a process is real-time scheduled this will 'leak' to all
its child processes. For security reasons it is often (always?) a good
idea to make sure that if a process acquires RT scheduling this is
confined to this process and only this process. More specifically this
makes the per-process resource limit RLIMIT_RTTIME useful for security
purposes, because it makes it impossible to use a fork bomb to
circumvent the per-process RLIMIT_RTTIME accounting.

This feature is also useful for tools like 'renice' which can then
change the nice level of a process without having this spill to all its
child processes.

Why expose this via sched_setscheduler() and not other syscalls such as
prctl() or sched_setparam()?

prctl() does not take a pid parameter. Due to that it would be
impossible to modify this flag for other processes than the current one.

The struct passed to sched_setparam() can unfortunately not be extended
without breaking compatibility, since sched_setparam() lacks a size
parameter.

How to use this from userspace? In your RT program simply replace this:

  sched_setscheduler(pid, SCHED_FIFO, &param);

by this:

  sched_setscheduler(pid, SCHED_FIFO|SCHED_RESET_ON_FORK, &param);

Signed-off-by: Lennart Poettering <lennart@poettering.net>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20090615152714.GA29092@tango.0pointer.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
(cherry picked from commit ca94c442535a44d508c99a77e54f21a59f4fc462)
2011-02-03 08:25:26 -06:00
..
2009-07-12 12:22:34 -07:00
2009-12-18 13:43:19 -08:00
2009-06-24 00:02:38 -04:00
2009-06-24 00:02:38 -04:00
2009-07-29 19:10:35 -07:00
2010-04-01 15:55:26 -07:00
2009-06-16 19:47:48 -07:00
2009-07-10 17:32:55 +02:00
2009-05-15 07:56:24 -05:00
2009-07-08 09:31:56 -07:00
2009-07-27 12:15:46 -07:00
2009-06-18 13:03:56 -07:00
2009-07-24 15:30:45 -04:00
2009-11-09 16:22:22 -08:00
2009-06-18 13:03:55 -07:00
2009-03-30 22:05:16 +10:30
2009-08-07 10:39:55 -07:00
2009-06-16 19:47:48 -07:00
2009-12-08 10:21:16 -08:00
2009-06-18 13:03:55 -07:00