aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorMike Galbraith <efault@gmx.de>2007-10-15 11:00:14 -0400
committerIngo Molnar <mingo@elte.hu>2007-10-15 11:00:14 -0400
commit95938a35c5562afa7af7252821e44132391a3db8 (patch)
tree548cda134d007105f3a819a438ab384ab9f04e27 /kernel/sched.c
parentce6c131131df442f0d49d064129ecc52d9fe8ca9 (diff)
sched: prevent wakeup over-scheduling
Prevent wakeup over-scheduling. Once a task has been preempted by a task of the same or lower priority, it becomes ineligible for repeated preemption by same until it has been ticked, or slept. Instead, the task is marked for preemption at the next tick. Tasks of higher priority still preempt immediately. Signed-off-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 0bd8f2c0fb40..e8051bd59acb 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -445,6 +445,7 @@ enum {
445 SCHED_FEAT_TREE_AVG = 4, 445 SCHED_FEAT_TREE_AVG = 4,
446 SCHED_FEAT_APPROX_AVG = 8, 446 SCHED_FEAT_APPROX_AVG = 8,
447 SCHED_FEAT_WAKEUP_PREEMPT = 16, 447 SCHED_FEAT_WAKEUP_PREEMPT = 16,
448 SCHED_FEAT_PREEMPT_RESTRICT = 32,
448}; 449};
449 450
450const_debug unsigned int sysctl_sched_features = 451const_debug unsigned int sysctl_sched_features =
@@ -452,7 +453,8 @@ const_debug unsigned int sysctl_sched_features =
452 SCHED_FEAT_START_DEBIT *1 | 453 SCHED_FEAT_START_DEBIT *1 |
453 SCHED_FEAT_TREE_AVG *0 | 454 SCHED_FEAT_TREE_AVG *0 |
454 SCHED_FEAT_APPROX_AVG *0 | 455 SCHED_FEAT_APPROX_AVG *0 |
455 SCHED_FEAT_WAKEUP_PREEMPT *1; 456 SCHED_FEAT_WAKEUP_PREEMPT *1 |
457 SCHED_FEAT_PREEMPT_RESTRICT *1;
456 458
457#define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x) 459#define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x)
458 460