aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2007-10-08 01:22:23 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2007-10-08 01:22:23 -0400
commitb2c6eb04b91da2f09d6c33cf8cbd821f28cb0204 (patch)
tree983ccf37668b0e82b6ac646c62d7039cd2d2b86e
parenteab069b8498e0106e2556f10c4ecfed4928326ce (diff)
adaptive: check for pending weight changes on scheduler tick
-rw-r--r--include/linux/rt_param.h1
-rw-r--r--kernel/sched_adaptive.c8
2 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/rt_param.h b/include/linux/rt_param.h
index d14e2129b1..f0690a4af4 100644
--- a/include/linux/rt_param.h
+++ b/include/linux/rt_param.h
@@ -211,6 +211,7 @@ typedef struct task_rt_param {
211 ((t)->rt_param.service_level[get_cur_sl(t)]) 211 ((t)->rt_param.service_level[get_cur_sl(t)])
212#define get_cur_sl(t) ((t)->rt_param.cur_service_level) 212#define get_cur_sl(t) ((t)->rt_param.cur_service_level)
213#define get_max_sl(t) ((t)->rt_param.no_service_levels - 1) 213#define get_max_sl(t) ((t)->rt_param.no_service_levels - 1)
214#define get_opt_sl(t) ((t)->rt_param.opt_level)
214 215
215#define is_realtime(t) ((t)->rt_param.is_realtime) 216#define is_realtime(t) ((t)->rt_param.is_realtime)
216#define is_subject_to_srp(t) ((t)->rt_param.subject_to_srp) 217#define is_subject_to_srp(t) ((t)->rt_param.subject_to_srp)
diff --git a/kernel/sched_adaptive.c b/kernel/sched_adaptive.c
index 0eaba83758..e36d74ae2c 100644
--- a/kernel/sched_adaptive.c
+++ b/kernel/sched_adaptive.c
@@ -588,12 +588,18 @@ static reschedule_check_t adaptive_scheduler_tick(void)
588 588
589 589
590 /* only the first CPU needs to release jobs */ 590 /* only the first CPU needs to release jobs */
591 if (get_rt_mode() == MODE_RT_RUN && smp_processor_id() == 0) { 591 if (get_rt_mode() == MODE_RT_RUN) {
592 queue_lock_irqsave(&adaptive_lock, flags); 592 queue_lock_irqsave(&adaptive_lock, flags);
593 593
594 /* (1) run the optimizer if it did not trigger often enough */ 594 /* (1) run the optimizer if it did not trigger often enough */
595 if (time_before_eq(last_optimizer_run + optimizer_period, jiffies)) 595 if (time_before_eq(last_optimizer_run + optimizer_period, jiffies))
596 adaptive_optimize(); 596 adaptive_optimize();
597 else if (is_realtime(t) &&
598 get_cur_sl(t) != get_opt_sl(t) &&
599 time_before_eq(t->rt_param.opt_change, jiffies)) {
600 opt_time = jiffies;
601 enact_weight_change(t);
602 }
597 603
598 /* (2) try to release pending jobs */ 604 /* (2) try to release pending jobs */
599 adaptive_release_jobs(); 605 adaptive_release_jobs();