Re: [RESEND][PATCH v31 8/9] sched: Add deactivated (sleeping) owner handling to find_proxy_task()
From: Peter Zijlstra
Date: Thu Aug 13 2026 - 10:42:41 EST
On Fri, Aug 07, 2026 at 03:52:14AM +0000, John Stultz wrote:
> @@ -3903,13 +4137,19 @@ void sched_ttwu_pending(void *arg)
> update_rq_clock(rq);
>
> llist_for_each_entry_safe(p, t, llist, wake_entry.llist) {
> + int wake_flags;
> if (WARN_ON_ONCE(p->on_cpu))
> smp_cond_load_acquire(&p->on_cpu, !VAL);
>
> if (WARN_ON_ONCE(task_cpu(p) != cpu_of(rq)))
> set_task_cpu(p, cpu_of(rq));
>
> - ttwu_do_activate(rq, p, p->sched_remote_wakeup ? WF_MIGRATED : 0, &rf);
> + wake_flags = p->sched_remote_wakeup ? WF_MIGRATED : 0;
> + ttwu_do_activate(rq, p, wake_flags, &rf);
> + rq_unlock(rq, &rf);
> + activate_blocked_waiters(rq, p, wake_flags);
> + rq_lock(rq, &rf);
> + update_rq_clock(rq);
> }
>
> /*
> @@ -4416,6 +4656,7 @@ int try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags)
> ttwu_queue(p, cpu, wake_flags);
> }
> out:
> + activate_blocked_waiters(cpu_rq(task_cpu(p)), p, wake_flags);
> if (success)
> ttwu_stat(p, task_cpu(p), wake_flags);
>
I is confused again. This seems double. Every entry on the wake_list
comes through ttwu() proper and will thus have passed through this
latter hunk, no?