diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 94b9d11e3312..c1b8b3031eb2 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -509,6 +509,14 @@ struct root_domain { | |||
509 | #ifdef CONFIG_SMP | 509 | #ifdef CONFIG_SMP |
510 | struct cpupri cpupri; | 510 | struct cpupri cpupri; |
511 | #endif | 511 | #endif |
512 | #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT) | ||
513 | /* | ||
514 | * Preferred wake up cpu nominated by sched_mc balance that will be | ||
515 | * used when most cpus are idle in the system indicating overall very | ||
516 | * low system utilisation. Triggered at POWERSAVINGS_BALANCE_WAKEUP(2) | ||
517 | */ | ||
518 | unsigned int sched_mc_preferred_wakeup_cpu; | ||
519 | #endif | ||
512 | }; | 520 | }; |
513 | 521 | ||
514 | /* | 522 | /* |
@@ -3384,6 +3392,10 @@ out_balanced: | |||
3384 | 3392 | ||
3385 | if (this == group_leader && group_leader != group_min) { | 3393 | if (this == group_leader && group_leader != group_min) { |
3386 | *imbalance = min_load_per_task; | 3394 | *imbalance = min_load_per_task; |
3395 | if (sched_mc_power_savings >= POWERSAVINGS_BALANCE_WAKEUP) { | ||
3396 | cpu_rq(this_cpu)->rd->sched_mc_preferred_wakeup_cpu = | ||
3397 | first_cpu(group_leader->cpumask); | ||
3398 | } | ||
3387 | return group_min; | 3399 | return group_min; |
3388 | } | 3400 | } |
3389 | #endif | 3401 | #endif |