On 09-10-19, 01:29, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > It is incorrect to set the cpufreq syscore shutdown callback pointer > to cpufreq_suspend(), because that function cannot be run in the > syscore stage of system shutdown for two reasons: (a) it may attempt > to carry out actions depending on devices that have already been shut > down at that point and (b) the RCU synchronization carried out by it > may not be able to make progress then. > > The latter issue has been present since commit 45975c7d21a1 ("rcu: > Define RCU-sched API in terms of RCU for Tree RCU PREEMPT builds"), > but the former one has always been there regardless. > > Fix that by dropping cpufreq_syscore_ops altogether and making > device_shutdown() call cpufreq_suspend() directly before shutting > down devices, which is along the lines of what system-wide power > management does. > > Fixes: 45975c7d21a1 ("rcu: Define RCU-sched API in terms of RCU for Tree RCU PREEMPT builds") > Reported-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Tested-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > --- > drivers/base/core.c | 3 +++ > drivers/cpufreq/cpufreq.c | 10 ---------- > 2 files changed, 3 insertions(+), 10 deletions(-) Acked-by: Viresh Kumar <viresh.kumar@xxxxxxxxxx> -- viresh