mbox series

[v2,0/2] cpufreq: Fix a circular lock dependency problem

Message ID 1532456765-17576-1-git-send-email-longman@redhat.com (mailing list archive)
Headers show
Series cpufreq: Fix a circular lock dependency problem | expand

Message

Waiman Long July 24, 2018, 6:26 p.m. UTC
v2:
  - Remove the retry loop in the store method.

This patchset works around a circular lock dependency issue in the
cpufreq driver reported by lockdep. The two locks involved are the
cpu_hotplup_lock and the reference count of a sysfs file.

The cpufreq_register_driver() function uses the lock sequence:

  cpus_read_lock --> kn->count

Whereas the cpufreq sysfs store method uses the sequence:

  kn->count --> cpus_read_lock

This is not really an issue as a shared lock is used on the
cpu_hotplup_lock. However, the lockdep code isn't able to handle
shared locking. So one way to work around this is to define a
cpus_read_trylock() function and uses it in the store method instead.

Waiman Long (2):
  cpu/hotplug: Add a cpus_read_trylock() function
  cpufreq: Fix a circular lock dependency problem

 drivers/cpufreq/cpufreq.c | 7 ++++++-
 include/linux/cpu.h       | 2 ++
 kernel/cpu.c              | 6 ++++++
 3 files changed, 14 insertions(+), 1 deletion(-)

Comments

Rafael J. Wysocki July 26, 2018, 9:06 a.m. UTC | #1
On Tuesday, July 24, 2018 8:26:03 PM CEST Waiman Long wrote:
>  v2:
>   - Remove the retry loop in the store method.
> 
> This patchset works around a circular lock dependency issue in the
> cpufreq driver reported by lockdep. The two locks involved are the
> cpu_hotplup_lock and the reference count of a sysfs file.
> 
> The cpufreq_register_driver() function uses the lock sequence:
> 
>   cpus_read_lock --> kn->count
> 
> Whereas the cpufreq sysfs store method uses the sequence:
> 
>   kn->count --> cpus_read_lock
> 
> This is not really an issue as a shared lock is used on the
> cpu_hotplup_lock. However, the lockdep code isn't able to handle
> shared locking. So one way to work around this is to define a
> cpus_read_trylock() function and uses it in the store method instead.
> 
> Waiman Long (2):
>   cpu/hotplug: Add a cpus_read_trylock() function
>   cpufreq: Fix a circular lock dependency problem
> 
>  drivers/cpufreq/cpufreq.c | 7 ++++++-
>  include/linux/cpu.h       | 2 ++
>  kernel/cpu.c              | 6 ++++++
>  3 files changed, 14 insertions(+), 1 deletion(-)
> 
> 

I'm queuing up this series for 4.19.

If anyone has any concerns regarding it, please let me know.

Thanks,
Rafael