On Mon, Jun 12, 2023 at 04:51:17PM +0300, Dan Carpenter wrote: > 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. we can definitely put it there. that one schedstat doesn't matter either way around. > > 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(); > > }