From 5933c823d8f6056d38d454c8deeabddecceb2cf4 Mon Sep 17 00:00:00 2001 From: John Stultz Date: Fri, 7 Feb 2025 13:55:37 -0800 Subject: [PATCH] ANDROID: Fix !CONFIG_SMP build issue with some of the proxy-exec logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maciej Żenczykowski reported seeing build failures with configs using CONFIG_SMP=n kernel/sched/core.c: In function ‘find_proxy_task’: kernel/sched/core.c:7476:18: error: implicit declaration of function ‘is_cpu_allowed’; did you mean ‘cpuset_cpus_allowed’? [-Wimplicit-function-d eclaration] 7476 | WARN_ON(!is_cpu_allowed(p, p->wake_cpu)); | ^~~~~~~~~~~~~~ ./include/asm-generic/bug.h:123:32: note: in definition of macro ‘WARN_ON’ 123 | int __ret_warn_on = !!(condition); \ | ^~~~~~~~~ kernel/sched/core.c:7476:39: error: ‘struct task_struct’ has no member named ‘wake_cpu’; did you mean ‘wake_q’? 7476 | WARN_ON(!is_cpu_allowed(p, p->wake_cpu)); | ^~~~~~~~ Obviously the logic in find_proxy_task trying to check if return migration is needed is unnecessary on UP. So lets ifdef it out as a quick and somewhat ugly solution. Reported-by: Maciej Żenczykowski Fixes: e4239ea599c6 ("ANDROID: sched: Handle blocked-waiter migration (and return migration)") Change-Id: Iee6424745004431589530dddeb92627efe581b78 Signed-off-by: John Stultz --- kernel/sched/core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index db275cdfa727..38b9207a61c5 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7473,6 +7473,7 @@ find_proxy_task(struct rq *rq, struct task_struct *donor, struct rq_flags *rf) return owner; needs_return: +#ifdef CONFIG_SMP WARN_ON(!is_cpu_allowed(p, p->wake_cpu)); if (p->wake_cpu == this_cpu) { /* We can actually run here fine */ @@ -7490,7 +7491,11 @@ needs_return: _trace_sched_pe_return_migration(p); proxy_migrate_task(rq, rf, p, p->wake_cpu); return NULL; - +#else + /* Nowhere else to migrate on UP */ + p->blocked_on_state = BO_RUNNABLE; + ret = p; +#endif out: raw_spin_unlock(&p->blocked_lock); raw_spin_unlock(&mutex->wait_lock);