Annotation of /trunk/kernel26-alx/patches-2.6.17-r7/0006-2.6.17-sched-range.patch
Parent Directory | Revision Log
Revision 199 -
(hide annotations)
(download)
Fri May 18 11:04:36 2007 UTC (17 years, 4 months ago) by niro
File size: 2708 byte(s)
Fri May 18 11:04:36 2007 UTC (17 years, 4 months ago) by niro
File size: 2708 byte(s)
-import
1 | niro | 199 | Add SCHED_RANGE and SCHED_RT wrappers for easy policy management. |
2 | |||
3 | Signed-off-by: Con Kolivas <kernel@kolivas.org> | ||
4 | |||
5 | include/linux/sched.h | 7 +++++++ | ||
6 | kernel/sched.c | 13 +++++-------- | ||
7 | 2 files changed, 12 insertions(+), 8 deletions(-) | ||
8 | |||
9 | Index: linux-ck-dev/include/linux/sched.h | ||
10 | =================================================================== | ||
11 | --- linux-ck-dev.orig/include/linux/sched.h 2006-06-18 15:23:21.000000000 +1000 | ||
12 | +++ linux-ck-dev/include/linux/sched.h 2006-06-18 15:23:35.000000000 +1000 | ||
13 | @@ -165,6 +165,13 @@ extern unsigned long weighted_cpuload(co | ||
14 | #define SCHED_RR 2 | ||
15 | #define SCHED_BATCH 3 | ||
16 | |||
17 | +#define SCHED_MIN 0 | ||
18 | +#define SCHED_MAX 3 | ||
19 | + | ||
20 | +#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) | ||
21 | +#define SCHED_RT(policy) ((policy) == SCHED_FIFO || \ | ||
22 | + (policy) == SCHED_RR) | ||
23 | + | ||
24 | struct sched_param { | ||
25 | int sched_priority; | ||
26 | }; | ||
27 | Index: linux-ck-dev/kernel/sched.c | ||
28 | =================================================================== | ||
29 | --- linux-ck-dev.orig/kernel/sched.c 2006-06-18 15:23:21.000000000 +1000 | ||
30 | +++ linux-ck-dev/kernel/sched.c 2006-06-18 15:23:35.000000000 +1000 | ||
31 | @@ -3548,7 +3548,7 @@ static void __setscheduler(struct task_s | ||
32 | BUG_ON(task_queued(p)); | ||
33 | p->policy = policy; | ||
34 | p->rt_priority = prio; | ||
35 | - if (policy != SCHED_NORMAL && policy != SCHED_BATCH) { | ||
36 | + if (SCHED_RT(policy)) { | ||
37 | p->prio = MAX_RT_PRIO-1 - p->rt_priority; | ||
38 | } else | ||
39 | p->prio = p->static_prio; | ||
40 | @@ -3574,8 +3574,7 @@ recheck: | ||
41 | /* double check policy once rq lock held */ | ||
42 | if (policy < 0) | ||
43 | policy = oldpolicy = p->policy; | ||
44 | - else if (policy != SCHED_FIFO && policy != SCHED_RR && | ||
45 | - policy != SCHED_NORMAL && policy != SCHED_BATCH) | ||
46 | + else if (!SCHED_RANGE(policy)) | ||
47 | return -EINVAL; | ||
48 | /* | ||
49 | * Valid priorities for SCHED_FIFO and SCHED_RR are | ||
50 | @@ -3586,8 +3585,7 @@ recheck: | ||
51 | (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) || | ||
52 | (!p->mm && param->sched_priority > MAX_RT_PRIO-1)) | ||
53 | return -EINVAL; | ||
54 | - if ((policy == SCHED_NORMAL || policy == SCHED_BATCH) | ||
55 | - != (param->sched_priority == 0)) | ||
56 | + if ((!SCHED_RT(policy)) != (param->sched_priority == 0)) | ||
57 | return -EINVAL; | ||
58 | |||
59 | /* | ||
60 | @@ -3598,12 +3596,11 @@ recheck: | ||
61 | * can't change policy, except between SCHED_NORMAL | ||
62 | * and SCHED_BATCH: | ||
63 | */ | ||
64 | - if (((policy != SCHED_NORMAL && p->policy != SCHED_BATCH) && | ||
65 | - (policy != SCHED_BATCH && p->policy != SCHED_NORMAL)) && | ||
66 | + if (SCHED_RT(policy) && policy != p->policy && | ||
67 | !p->signal->rlim[RLIMIT_RTPRIO].rlim_cur) | ||
68 | return -EPERM; | ||
69 | /* can't increase priority */ | ||
70 | - if ((policy != SCHED_NORMAL && policy != SCHED_BATCH) && | ||
71 | + if (SCHED_RT(policy) && | ||
72 | param->sched_priority > p->rt_priority && | ||
73 | param->sched_priority > | ||
74 | p->signal->rlim[RLIMIT_RTPRIO].rlim_cur) |