Re: [PATCH v12 2/2] cpufreq: qcom-hw: Add support for QCOM cpufreq HW driver

From: Viresh Kumar
Date: Tue Dec 18 2018 - 00:45:51 EST


Hi Stephen,

On 13-12-18, 02:12, Stephen Boyd wrote:
> Quoting Viresh Kumar (2018-12-13 02:05:06)
> > On 13-12-18, 01:58, Stephen Boyd wrote:
> > > BTW, Viresh, I see a lockdep splat when cpufreq_init returns an error
> > > upon bringing the policy online the second time. I guess cpufreq_stats
> > > aren't able to be freed from there because they take locks in different
> > > order vs. the normal path?
> >
> > Please share the lockdep report and the steps to reproduce it. I will
> > see if I can simulate the failure forcefully..
> >
>
> It's on a v4.19 kernel with this cpufreq hw driver backported to it. I
> think all it takes is to return an error the second time the policy is
> initialized when cpufreq_online() calls into the cpufreq driver.
>
> ======================================================
> WARNING: possible circular locking dependency detected
> 4.19.8 #61 Tainted: G W
> ------------------------------------------------------
> cpuhp/5/36 is trying to acquire lock:
> 000000003e901e8a (kn->count#326){++++}, at: kernfs_remove_by_name_ns+0x44/0x80
>
> but task is already holding lock:
> 00000000dd7f52c3 (&policy->rwsem){++++}, at: cpufreq_policy_free+0x17c/0x1cc
>
> which lock already depends on the new lock.
>
>
> the existing dependency chain (in reverse order) is:
>
> -> #1 (&policy->rwsem){++++}:
> down_read+0x50/0xcc
> show+0x30/0x78
> sysfs_kf_seq_show+0x17c/0x25c
> kernfs_seq_show+0xb4/0xf8
> seq_read+0x4a8/0x8f0
> kernfs_fop_read+0xe0/0x360
> __vfs_read+0x80/0x328
> vfs_read+0xd0/0x1d4
> ksys_read+0x88/0x118
> __arm64_sys_read+0x4c/0x5c
> el0_svc_common+0x124/0x1c4
> el0_svc_compat_handler+0x64/0x8c
> el0_svc_compat+0x8/0x18

I failed to reproduce it over linux/next.

I had the following changes over linux/next:
https://pastebin.ubuntu.com/p/zkVm77PGdY/

I also did savedefconfig to show what all I changed in it. I faked multiple
clusters on my hikey960 board, which is not big little..

And here is the command list from history that I ran after boot.

501 grep . /sys/devices/system/cpu/cpufreq/*/*
502 grep . /sys/devices/system/cpu/cpufreq/*/*/*
503 grep . /sys/devices/system/cpu/cpufreq/*/*/*
504 grep . /sys/devices/system/cpu/cpufreq/*/*/*
505 grep . /sys/devices/system/cpu/cpufreq/*/*/*
506 grep . /sys/devices/system/cpu/cpufreq/*/*
507 grep . /sys/devices/system/cpu/cpufreq/*/*
508 echo 0 > /sys/devices/system/cpu/cpu4/online
509 echo 0 > /sys/devices/system/cpu/cpu5/online
510 echo 0 > /sys/devices/system/cpu/cpu6/online
511 echo 0 > /sys/devices/system/cpu/cpu7/online
512 grep . /sys/devices/system/cpu/cpufreq/*/*
513 grep . /sys/devices/system/cpu/cpufreq/*/*/*
514 grep . /sys/devices/system/cpu/cpufreq/*/*
515 echo 1 > /sys/devices/system/cpu/cpu4/online
516 grep . /sys/devices/system/cpu/cpufreq/*/*
517 grep . /sys/devices/system/cpu/cpufreq/*/*/*
518 dmesg

--
viresh