diff options
author | Peter Williams <pwil3058@bigpond.net.au> | 2009-09-20 21:31:53 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-21 03:53:55 -0400 |
commit | 0d721ceadbeaa24d7f9dd41b3e5e29912327a7e1 (patch) | |
tree | 54c0c8dc201122483bdd7e8975103b07f6afd34b /kernel/sched_fair.c | |
parent | cb5fd13f1178dee4302646b2890d884c380160e1 (diff) |
sched: Simplify sys_sched_rr_get_interval() system call
By removing the need for it to know details of scheduling classes.
This allows PlugSched to define orthogonal scheduling classes.
Signed-off-by: Peter Williams <pwil3058@bigpond.net.au>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
LKML-Reference: <06d1b89ee15a0eef82d7.1253496713@mudlark.pw.nest>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r-- | kernel/sched_fair.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 566e3bb78ed9..cd73738f0d5f 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
@@ -1938,6 +1938,25 @@ static void moved_group_fair(struct task_struct *p) | |||
1938 | } | 1938 | } |
1939 | #endif | 1939 | #endif |
1940 | 1940 | ||
1941 | unsigned int get_rr_interval_fair(struct task_struct *task) | ||
1942 | { | ||
1943 | struct sched_entity *se = &task->se; | ||
1944 | unsigned long flags; | ||
1945 | struct rq *rq; | ||
1946 | unsigned int rr_interval = 0; | ||
1947 | |||
1948 | /* | ||
1949 | * Time slice is 0 for SCHED_OTHER tasks that are on an otherwise | ||
1950 | * idle runqueue: | ||
1951 | */ | ||
1952 | rq = task_rq_lock(task, &flags); | ||
1953 | if (rq->cfs.load.weight) | ||
1954 | rr_interval = NS_TO_JIFFIES(sched_slice(&rq->cfs, se)); | ||
1955 | task_rq_unlock(rq, &flags); | ||
1956 | |||
1957 | return rr_interval; | ||
1958 | } | ||
1959 | |||
1941 | /* | 1960 | /* |
1942 | * All the scheduling class methods: | 1961 | * All the scheduling class methods: |
1943 | */ | 1962 | */ |
@@ -1966,6 +1985,8 @@ static const struct sched_class fair_sched_class = { | |||
1966 | .prio_changed = prio_changed_fair, | 1985 | .prio_changed = prio_changed_fair, |
1967 | .switched_to = switched_to_fair, | 1986 | .switched_to = switched_to_fair, |
1968 | 1987 | ||
1988 | .get_rr_interval = get_rr_interval_fair, | ||
1989 | |||
1969 | #ifdef CONFIG_FAIR_GROUP_SCHED | 1990 | #ifdef CONFIG_FAIR_GROUP_SCHED |
1970 | .moved_group = moved_group_fair, | 1991 | .moved_group = moved_group_fair, |
1971 | #endif | 1992 | #endif |