• V
    cpufreq: unlock correct rwsem while updating policy->cpu · 8efd5765
    Viresh Kumar 提交于
    Current code looks like this:
    
            WARN_ON(lock_policy_rwsem_write(cpu));
            update_policy_cpu(policy, new_cpu);
            unlock_policy_rwsem_write(cpu);
    
    {lock|unlock}_policy_rwsem_write(cpu) takes/releases policy->cpu's rwsem.
    Because cpu is changing with the call to update_policy_cpu(), the
    unlock_policy_rwsem_write() will release the incorrect lock.
    
    The right solution would be to release the same lock as was taken earlier. Also
    update_policy_cpu() was also called from cpufreq_add_dev() without any locks and
    so its better if we move this locking to inside update_policy_cpu().
    
    This patch fixes a regression introduced in 3.12 by commit f9ba680d
    (cpufreq: Extract the handover of policy cpu to a helper function).
    
    Reported-and-tested-by: Jon Medhurst<tixy@linaro.org>
    Signed-off-by: NViresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    8efd5765
cpufreq.c 55.2 KB