Re: [PATCH] cpufreq: Abort cpufreq_update_current_freq() for cpufreq_suspended set
On 10 April 2016 at 09:38, Rafael J. Wysockiwrote: > From: Rafael J. Wysocki > > Since governor operations are generally skipped if cpufreq_suspended > is set, cpufreq_start_governor() should do nothing in that case. > > That function is called in the cpufreq_online() path, and may also > be called from cpufreq_offline() in some cases, which are invoked > by the nonboot CPUs disabing/enabling code during system suspend > to RAM and resume. That happens when all devices have been > suspended, so if the cpufreq driver relies on things like I2C to > get the current frequency, it may not be ready to do that then. > > To prevent problems from happening for this reason, make > cpufreq_update_current_freq(), which is the only function invoked > by cpufreq_start_governor() that doesn't check cpufreq_suspended > already, return 0 upfront if cpufreq_suspended is set. > > Fixes: 3bbf8fe3ae08 (cpufreq: Always update current frequency before startig > governor) > Signed-off-by: Rafael J. Wysocki > --- > drivers/cpufreq/cpufreq.c |3 +++ > 1 file changed, 3 insertions(+) > > Index: linux-pm/drivers/cpufreq/cpufreq.c > === > --- linux-pm.orig/drivers/cpufreq/cpufreq.c > +++ linux-pm/drivers/cpufreq/cpufreq.c > @@ -1565,6 +1565,9 @@ static unsigned int cpufreq_update_curre > { > unsigned int new_freq; > > + if (cpufreq_suspended) > + return 0; > + > new_freq = cpufreq_driver->get(policy->cpu); > if (!new_freq) > return 0; Acked-by: Viresh Kumar
Re: [PATCH] cpufreq: Abort cpufreq_update_current_freq() for cpufreq_suspended set
On 10 April 2016 at 09:38, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki > > Since governor operations are generally skipped if cpufreq_suspended > is set, cpufreq_start_governor() should do nothing in that case. > > That function is called in the cpufreq_online() path, and may also > be called from cpufreq_offline() in some cases, which are invoked > by the nonboot CPUs disabing/enabling code during system suspend > to RAM and resume. That happens when all devices have been > suspended, so if the cpufreq driver relies on things like I2C to > get the current frequency, it may not be ready to do that then. > > To prevent problems from happening for this reason, make > cpufreq_update_current_freq(), which is the only function invoked > by cpufreq_start_governor() that doesn't check cpufreq_suspended > already, return 0 upfront if cpufreq_suspended is set. > > Fixes: 3bbf8fe3ae08 (cpufreq: Always update current frequency before startig > governor) > Signed-off-by: Rafael J. Wysocki > --- > drivers/cpufreq/cpufreq.c |3 +++ > 1 file changed, 3 insertions(+) > > Index: linux-pm/drivers/cpufreq/cpufreq.c > === > --- linux-pm.orig/drivers/cpufreq/cpufreq.c > +++ linux-pm/drivers/cpufreq/cpufreq.c > @@ -1565,6 +1565,9 @@ static unsigned int cpufreq_update_curre > { > unsigned int new_freq; > > + if (cpufreq_suspended) > + return 0; > + > new_freq = cpufreq_driver->get(policy->cpu); > if (!new_freq) > return 0; Acked-by: Viresh Kumar
[PATCH] cpufreq: Abort cpufreq_update_current_freq() for cpufreq_suspended set
From: Rafael J. WysockiSince governor operations are generally skipped if cpufreq_suspended is set, cpufreq_start_governor() should do nothing in that case. That function is called in the cpufreq_online() path, and may also be called from cpufreq_offline() in some cases, which are invoked by the nonboot CPUs disabing/enabling code during system suspend to RAM and resume. That happens when all devices have been suspended, so if the cpufreq driver relies on things like I2C to get the current frequency, it may not be ready to do that then. To prevent problems from happening for this reason, make cpufreq_update_current_freq(), which is the only function invoked by cpufreq_start_governor() that doesn't check cpufreq_suspended already, return 0 upfront if cpufreq_suspended is set. Fixes: 3bbf8fe3ae08 (cpufreq: Always update current frequency before startig governor) Signed-off-by: Rafael J. Wysocki --- drivers/cpufreq/cpufreq.c |3 +++ 1 file changed, 3 insertions(+) Index: linux-pm/drivers/cpufreq/cpufreq.c === --- linux-pm.orig/drivers/cpufreq/cpufreq.c +++ linux-pm/drivers/cpufreq/cpufreq.c @@ -1565,6 +1565,9 @@ static unsigned int cpufreq_update_curre { unsigned int new_freq; + if (cpufreq_suspended) + return 0; + new_freq = cpufreq_driver->get(policy->cpu); if (!new_freq) return 0;
[PATCH] cpufreq: Abort cpufreq_update_current_freq() for cpufreq_suspended set
From: Rafael J. Wysocki Since governor operations are generally skipped if cpufreq_suspended is set, cpufreq_start_governor() should do nothing in that case. That function is called in the cpufreq_online() path, and may also be called from cpufreq_offline() in some cases, which are invoked by the nonboot CPUs disabing/enabling code during system suspend to RAM and resume. That happens when all devices have been suspended, so if the cpufreq driver relies on things like I2C to get the current frequency, it may not be ready to do that then. To prevent problems from happening for this reason, make cpufreq_update_current_freq(), which is the only function invoked by cpufreq_start_governor() that doesn't check cpufreq_suspended already, return 0 upfront if cpufreq_suspended is set. Fixes: 3bbf8fe3ae08 (cpufreq: Always update current frequency before startig governor) Signed-off-by: Rafael J. Wysocki --- drivers/cpufreq/cpufreq.c |3 +++ 1 file changed, 3 insertions(+) Index: linux-pm/drivers/cpufreq/cpufreq.c === --- linux-pm.orig/drivers/cpufreq/cpufreq.c +++ linux-pm/drivers/cpufreq/cpufreq.c @@ -1565,6 +1565,9 @@ static unsigned int cpufreq_update_curre { unsigned int new_freq; + if (cpufreq_suspended) + return 0; + new_freq = cpufreq_driver->get(policy->cpu); if (!new_freq) return 0;