diff options
| author | Shrikanth Hegde <sshegde@linux.ibm.com> | 2026-05-15 22:54:55 +0530 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-05-19 12:17:37 +0200 |
| commit | 3dbb362f90f3a8300ed9209d3278e30f8dbfb780 (patch) | |
| tree | 58b2da268bdf754d3db3a50ddd681e110877bb16 /kernel | |
| parent | 5bc6ab2d42e545f816def21cfcdb4ba35cc74bf6 (diff) | |
sched/fair: Add sched_smt_active check for fastpaths
For fastpaths such as wakeup and load balance even minimal code additions
can add up. is_core_idle is accessed during load balance.
Other callsites of is_core_idle make sched_smt_active() check first.
Make the same check in should_we_balance.
Rest of access to cpu_smt_mask isn't in fastpath.
Note: Remove the stale comment above is_core_idle. Enqueue methods
of fair aren't close to it anymore.
Suggested-by: K Prateek Nayak <kprateek.nayak@amd.com>
Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Valentin Schneider <vschneid@redhat.com>
Link: https://patch.msgid.link/20260515172456.542799-4-sshegde@linux.ibm.com
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/fair.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 233bd2ebbb73..14bd31b17c71 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1549,10 +1549,7 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) se->exec_start = rq_clock_task(rq_of(cfs_rq)); } -/************************************************** - * Scheduling class queueing methods: - */ - +/* Check sched_smt_active before calling this to avoid overheads in fastpaths */ static inline bool is_core_idle(int cpu) { int sibling; @@ -11961,7 +11958,9 @@ static int should_we_balance(struct lb_env *env) * balancing cores, but remember the first idle SMT CPU for * later consideration. Find CPU on an idle core first. */ - if (!(env->sd->flags & SD_SHARE_CPUCAPACITY) && !is_core_idle(cpu)) { + if (sched_smt_active() && + !(env->sd->flags & SD_SHARE_CPUCAPACITY) && + !is_core_idle(cpu)) { if (idle_smt == -1) idle_smt = cpu; /* |
