diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2007-10-08 01:22:23 -0400 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2007-10-08 01:22:23 -0400 |
| commit | b2c6eb04b91da2f09d6c33cf8cbd821f28cb0204 (patch) | |
| tree | 983ccf37668b0e82b6ac646c62d7039cd2d2b86e | |
| parent | eab069b8498e0106e2556f10c4ecfed4928326ce (diff) | |
adaptive: check for pending weight changes on scheduler tick
| -rw-r--r-- | include/linux/rt_param.h | 1 | ||||
| -rw-r--r-- | kernel/sched_adaptive.c | 8 |
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(); |
