In cpuidle_coupled_register_device() we do following: if (WARN_ON(!cpumask_equal(&dev->coupled_cpus, &coupled->coupled_cpus))) coupled->prevent++;
This is only required to be done when we are using 'coupled' from an existing cpuidle_device and not when we have just done this:
coupled->coupled_cpus = dev->coupled_cpus
So, move this compare statement to the right place.
Signed-off-by: Viresh Kumar viresh.kumar@linaro.org --- drivers/cpuidle/coupled.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/cpuidle/coupled.c b/drivers/cpuidle/coupled.c index e952936..19a89eb 100644 --- a/drivers/cpuidle/coupled.c +++ b/drivers/cpuidle/coupled.c @@ -642,6 +642,10 @@ int cpuidle_coupled_register_device(struct cpuidle_device *dev) other_dev = per_cpu(cpuidle_devices, cpu); if (other_dev && other_dev->coupled) { coupled = other_dev->coupled; + + if (WARN_ON(!cpumask_equal(&dev->coupled_cpus, + &coupled->coupled_cpus))) + coupled->prevent++; goto have_coupled; } } @@ -655,9 +659,6 @@ int cpuidle_coupled_register_device(struct cpuidle_device *dev)
have_coupled: dev->coupled = coupled; - if (WARN_ON(!cpumask_equal(&dev->coupled_cpus, &coupled->coupled_cpus))) - coupled->prevent++; - cpuidle_coupled_update_online_cpus(coupled);
coupled->refcnt++;