On Mon, Jun 12, 2023 at 11:07:22AM +0200, Peter Zijlstra wrote: > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -3664,16 +3664,15 @@ ttwu_stat(struct task_struct *p, int cpu > __schedstat_inc(p->stats.nr_wakeups_local); > } else { > struct sched_domain *sd; > + guard(rcu)(); > > __schedstat_inc(p->stats.nr_wakeups_remote); > - rcu_read_lock(); We can't put the guard(rcu)(); here? I have unpublished static analysis which assumes that the first and last statements guarded by a lock are important. But if we always put it at the top of the scope then we lose that information. > for_each_domain(rq->cpu, sd) { > if (cpumask_test_cpu(cpu, sched_domain_span(sd))) { > __schedstat_inc(sd->ttwu_wake_remote); > break; > } > } > - rcu_read_unlock(); > } regards, dan carpenter