On 18.08.2021 12:21, Juergen Gross wrote: > With smt=0 during a suspend/resume cycle of the machine the threads > which have been parked before will briefly come up again. This can > result in problems e.g. with cpufreq driver being active as this will > call into get_cpu_idle_time() for a cpu without initialized scheduler > data. > > Fix that by letting get_cpu_idle_time() deal with this case. > > Fixes: 132cbe8f35632fb2 ("sched: fix get_cpu_idle_time() with core > scheduling") > Reported-by: Marek Marczykowski-Górecki <marma...@invisiblethingslab.com> > Signed-off-by: Juergen Gross <jgr...@suse.com> > Tested-by: Marek Marczykowski-Górecki <marma...@invisiblethingslab.com>
Reviewed-by: Jan Beulich <jbeul...@suse.com> > --- a/xen/common/sched/core.c > +++ b/xen/common/sched/core.c > @@ -337,7 +337,7 @@ uint64_t get_cpu_idle_time(unsigned int cpu) > struct vcpu_runstate_info state = { 0 }; > const struct vcpu *v = idle_vcpu[cpu]; > > - if ( cpu_online(cpu) && v ) > + if ( cpu_online(cpu) && v && get_sched_res(cpu) ) > vcpu_runstate_get(v, &state); My earlier question was aiming at getting rid of the (now) middle part of the condition; I thought this may be okay to do as a secondary change here. But perhaps you intentionally left it there, so I'm unsure whether to suggest to make the adjustment while committing (awaiting a maintainer ack first anyway). Jan