On Mon, Jun 27, 2016 at 06:21:11PM +0200, Peter Zijlstra wrote: > On Fri, Jun 17, 2016 at 12:43:26PM -0500, Josh Poimboeuf wrote: > > index 017a4f5..0aee5dd 100644 > > --- a/kernel/sched/core.c > > +++ b/kernel/sched/core.c > > @@ -1626,10 +1626,15 @@ static inline int __set_cpus_allowed_ptr(struct > > task_struct *p, > > static void > > ttwu_stat(struct task_struct *p, int cpu, int wake_flags) > > { > > -#ifdef CONFIG_SCHEDSTATS > > - struct rq *rq = this_rq(); > > + struct rq *rq; > > + > > + if (!schedstat_enabled()) > > + return; > > + > > + rq = this_rq(); > > > > #ifdef CONFIG_SMP > > +{ > > int this_cpu = smp_processor_id(); > > > > if (cpu == this_cpu) { > > @@ -1651,7 +1656,7 @@ ttwu_stat(struct task_struct *p, int cpu, int > > wake_flags) > > > > if (wake_flags & WF_MIGRATED) > > schedstat_inc(p->se.statistics.nr_wakeups_migrate); > > - > > +} > > #endif /* CONFIG_SMP */ > > > > schedstat_inc(rq->ttwu_count); > > I did: > > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -1636,10 +1636,7 @@ ttwu_stat(struct task_struct *p, int cpu > rq = this_rq(); > > #ifdef CONFIG_SMP > -{ > - int this_cpu = smp_processor_id(); > - > - if (cpu == this_cpu) { > + if (cpu == rq->cpu) { > schedstat_inc(rq->ttwu_local); > schedstat_inc(p->se.statistics.nr_wakeups_local); > } else { > @@ -1647,7 +1644,7 @@ ttwu_stat(struct task_struct *p, int cpu > > schedstat_inc(p->se.statistics.nr_wakeups_remote); > rcu_read_lock(); > - for_each_domain(this_cpu, sd) { > + for_each_domain(rq->cpu, sd) { > if (cpumask_test_cpu(cpu, sched_domain_span(sd))) { > schedstat_inc(sd->ttwu_wake_remote); > break; > @@ -1658,7 +1655,6 @@ ttwu_stat(struct task_struct *p, int cpu > > if (wake_flags & WF_MIGRATED) > schedstat_inc(p->se.statistics.nr_wakeups_migrate); > -} > #endif /* CONFIG_SMP */ > > schedstat_inc(rq->ttwu_count);
Much better, thanks. -- Josh