The CFS wakeup code will only ever go through EAS / its fast path on "regular" wakeups (i.e. not on forks or execs). These are currently gated by a check against 'sd_flag', which would be SD_BALANCE_WAKE at wakeup. However, we now have a flag that explicitly tells us whether a wakeup is a "regular" one, so hinge those conditions on that flag instead.
Unified · Split
| @@ -6705,7 +6705,7 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags) · 6704 unmodified lines | ||
| 6705 | 6705 | /* SD_flags and WF_flags share the first nibble */ |
| 6706 | 6706 | int sd_flag = wake_flags & 0xF; |
| 6707 | 6707 | |
| 6708 | − if (sd_flag & SD_BALANCE_WAKE) { | |
| 6708 | + if (wake_flags & WF_TTWU) { | |
| 6709 | 6709 | record_wakee(p); |
| 6710 | 6710 | |
| 6711 | 6711 | if (sched_energy_enabled()) { |
| @@ -6742,9 +6742,8 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags) · 30 unmodified lines | ||
| 6742 | 6742 | if (unlikely(sd)) { |
| 6743 | 6743 | /* Slow path */ |
| 6744 | 6744 | new_cpu = find_idlest_cpu(sd, p, cpu, prev_cpu, sd_flag); |
| 6745 | − } else if (sd_flag & SD_BALANCE_WAKE) { /* XXX always ? */ | |
| 6745 | + } else if (wake_flags & WF_TTWU) { /* XXX always ? */ | |
| 6746 | 6746 | /* Fast path */ |
| 6747 | − | |
| 6748 | 6747 | new_cpu = select_idle_sibling(p, prev_cpu, new_cpu); |
| 6749 | 6748 | |
| 6750 | 6749 | if (want_affine) |