The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
Signed-off-by: Vincent Guittot vincent.guittot@linaro.org --- drivers/cpufreq/db8500-cpufreq.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/cpufreq/db8500-cpufreq.c b/drivers/cpufreq/db8500-cpufreq.c index 0d8dd1c..4cb5785 100644 --- a/drivers/cpufreq/db8500-cpufreq.c +++ b/drivers/cpufreq/db8500-cpufreq.c @@ -76,13 +76,13 @@ static int db8500_cpufreq_target(struct cpufreq_policy *policy,
freqs.old = policy->cur; freqs.new = freq_table[idx].frequency; - freqs.cpu = policy->cpu;
if (freqs.old == freqs.new) return 0;
/* pre-change notification */ - cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); + for_each_online_cpu(freqs.cpu) + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
/* request the PRCM unit for opp change */ if (prcmu_set_arm_opp(idx2opp[idx])) { @@ -91,7 +91,8 @@ static int db8500_cpufreq_target(struct cpufreq_policy *policy, }
/* post change notification */ - cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); + for_each_online_cpu(freqs.cpu) + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
return 0; }
On Wed, Aug 24, 2011 at 8:44 AM, Vincent Guittot vincent.guittot@linaro.org wrote:
The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
Signed-off-by: Vincent Guittot vincent.guittot@linaro.org
Acked-by: Linus Walleij linus.walleij@linaro.org
Yours, Linus Walleij
On Wed, Aug 24, 2011 at 4:42 PM, Linus Walleij linus.walleij@linaro.org wrote:
On Wed, Aug 24, 2011 at 8:44 AM, Vincent Guittot vincent.guittot@linaro.org wrote:
The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
BTW, does it same as other ARM cpus?. e.g., exynos4 has same codes as this.
How to you think it? Need to modify the same way?
Thank you, Kyungmin Park
Signed-off-by: Vincent Guittot vincent.guittot@linaro.org
Acked-by: Linus Walleij linus.walleij@linaro.org
Yours, Linus Walleij
linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On 24 August 2011 09:56, Kyungmin Park kmpark@infradead.org wrote:
On Wed, Aug 24, 2011 at 4:42 PM, Linus Walleij linus.walleij@linaro.org wrote:
On Wed, Aug 24, 2011 at 8:44 AM, Vincent Guittot vincent.guittot@linaro.org wrote:
The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
BTW, does it same as other ARM cpus?. e.g., exynos4 has same codes as this.
How to you think it? Need to modify the same way?
yes, each ARM platform which uses twd timer should check that the notification is sent for each cpu.
Thank you, Kyungmin Park
Signed-off-by: Vincent Guittot vincent.guittot@linaro.org
Acked-by: Linus Walleij linus.walleij@linaro.org
Yours, Linus Walleij
linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Wednesday 24 August 2011 12:14 PM, Vincent Guittot wrote:
The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
Signed-off-by: Vincent Guittotvincent.guittot@linaro.org
drivers/cpufreq/db8500-cpufreq.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/cpufreq/db8500-cpufreq.c b/drivers/cpufreq/db8500-cpufreq.c index 0d8dd1c..4cb5785 100644 --- a/drivers/cpufreq/db8500-cpufreq.c +++ b/drivers/cpufreq/db8500-cpufreq.c @@ -76,13 +76,13 @@ static int db8500_cpufreq_target(struct cpufreq_policy *policy,
freqs.old = policy->cur; freqs.new = freq_table[idx].frequency;
freqs.cpu = policy->cpu;
if (freqs.old == freqs.new) return 0;
/* pre-change notification */
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
- for_each_online_cpu(freqs.cpu)
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
Blind notfier on all online CPU's will race. Take a example whete CPU is marked online but not yet registered to CPUFREQ. I have seen such a race in OMAP and fixed that using the policy->cpus field.
Regards Santosh
On 24 August 2011 10:26, Santosh santosh.shilimkar@ti.com wrote:
On Wednesday 24 August 2011 12:14 PM, Vincent Guittot wrote:
The same clock is used for all cpus so we must notify the frequency change for each one in order to update the configuration of all twd clockevents.
Signed-off-by: Vincent Guittotvincent.guittot@linaro.org
drivers/cpufreq/db8500-cpufreq.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/cpufreq/db8500-cpufreq.c b/drivers/cpufreq/db8500-cpufreq.c index 0d8dd1c..4cb5785 100644 --- a/drivers/cpufreq/db8500-cpufreq.c +++ b/drivers/cpufreq/db8500-cpufreq.c @@ -76,13 +76,13 @@ static int db8500_cpufreq_target(struct cpufreq_policy *policy,
freqs.old = policy->cur; freqs.new = freq_table[idx].frequency;
- freqs.cpu = policy->cpu;
if (freqs.old == freqs.new) return 0;
/* pre-change notification */
- cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
- for_each_online_cpu(freqs.cpu)
- cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
Blind notfier on all online CPU's will race. Take a example whete CPU is marked online but not yet registered to CPUFREQ. I have seen such a race in OMAP and fixed that using the policy->cpus field.
You're right, I'm going to use policy->cpus instead
Regards Santosh