linux/include
Tao Huang 29c90bf3e9 PM / devfreq: rockchip_dmc: Introduce rockchip_dmcfreq_lock_nested()
After commit c95036feef ("PM / devfreq: rockchip_dmc: Fix deadlock between dmcfreq and vop on/off"),
rockchip_dmcfreq_sem support down read recursive.
Try to avoid lockdep warning:

======================================================
WARNING: possible circular locking dependency detected
4.19.172 #9 Not tainted
------------------------------------------------------
composer@2.1-se/221 is trying to acquire lock:
00000000a1c9588b (&genpd->mlock){+.+.}, at: genpd_lock_mtx+0x14/0x1c

but task is already holding lock:
00000000cc938c9c (rockchip_dmcfreq_sem){++++}, at: rockchip_dmcfreq_lock+0x14/0x1c

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-> #2 (rockchip_dmcfreq_sem){++++}:
       down_read+0x50/0x94
       rockchip_dmcfreq_lock+0x14/0x1c
       rockchip_pd_power+0x3c/0x200
       rockchip_pd_power_off+0x24/0x2c
       genpd_power_off+0x168/0x27c
       genpd_power_off_work_fn+0x34/0x50
       process_one_work+0x300/0x66c
       worker_thread+0x238/0x4c0
       kthread+0x148/0x158
       ret_from_fork+0x10/0x18

-> #1 (&pmu->mutex){+.+.}:
       __mutex_lock_common+0xc8/0x1014
       mutex_lock_nested+0x28/0x30
       rockchip_pd_power+0x38/0x200
       rockchip_pd_power_off+0x24/0x2c
       genpd_power_off+0x168/0x27c
       genpd_power_off_work_fn+0x34/0x50
       process_one_work+0x300/0x66c
       worker_thread+0x238/0x4c0
       kthread+0x148/0x158
       ret_from_fork+0x10/0x18

-> #0 (&genpd->mlock){+.+.}:
       lock_acquire+0x124/0x1ec
       __mutex_lock_common+0xc8/0x1014
       mutex_lock_nested+0x28/0x30
       genpd_lock_mtx+0x14/0x1c
       genpd_runtime_suspend+0x1d8/0x21c
       __rpm_callback+0x150/0x24c
       rpm_suspend+0x278/0x7b0
       rpm_idle+0x6c/0x444
       __pm_runtime_idle+0x78/0x9c
       vop2_crtc_atomic_disable+0x5ac/0x6b4
       drm_atomic_helper_commit_modeset_disables+0x234/0x440
       rockchip_atomic_commit_complete+0x140/0x378
       rockchip_drm_atomic_commit+0x1c4/0x224
       drm_atomic_connector_commit_dpms+0x110/0x128
       drm_mode_obj_set_property_ioctl+0x144/0x2b4
       drm_connector_property_set_ioctl+0x3c/0x60
       drm_ioctl+0x2c0/0x454
       do_vfs_ioctl+0x4dc/0x794
       __arm64_sys_ioctl+0x70/0x98
       el0_svc_common+0x9c/0x16c
       el0_svc_handler+0x28/0x60
       el0_svc+0x8/0xc

other info that might help us debug this:

Chain exists of:
  &genpd->mlock --> &pmu->mutex --> rockchip_dmcfreq_sem

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(rockchip_dmcfreq_sem);
                               lock(&pmu->mutex);
                               lock(rockchip_dmcfreq_sem);
  lock(&genpd->mlock);

 *** DEADLOCK ***

4 locks held by composer@2.1-se/221:
 #0: 0000000079852c0e (crtc_ww_class_acquire){+.+.}, at: drm_mode_obj_set_property_ioctl+0xe4/0x2b4
 #1: 00000000a8d2d1f1 (crtc_ww_class_mutex){+.+.}, at: drm_modeset_backoff+0x118/0x230
 #2: 000000008d649114 (&vop2->vop2_lock){+.+.}, at: vop2_crtc_atomic_disable+0x3c/0x6b4
 #3: 00000000cc938c9c (rockchip_dmcfreq_sem){++++}, at: rockchip_dmcfreq_lock+0x14/0x1c

stack backtrace:
CPU: 0 PID: 221 Comm: composer@2.1-se Not tainted 4.19.172 #9
Hardware name: Rockchip RK3566 EVB2 LP4X V10 Board (DT)
Call trace:
 dump_backtrace+0x0/0x160
 show_stack+0x14/0x1c
 dump_stack+0xd8/0x128
 print_circular_bug+0x580/0x588
 __lock_acquire+0x1bc4/0x1bd0
 lock_acquire+0x124/0x1ec
 __mutex_lock_common+0xc8/0x1014
 mutex_lock_nested+0x28/0x30
 genpd_lock_mtx+0x14/0x1c
 genpd_runtime_suspend+0x1d8/0x21c
 __rpm_callback+0x150/0x24c
 rpm_suspend+0x278/0x7b0
 rpm_idle+0x6c/0x444
 __pm_runtime_idle+0x78/0x9c
 vop2_crtc_atomic_disable+0x5ac/0x6b4
 drm_atomic_helper_commit_modeset_disables+0x234/0x440
 rockchip_atomic_commit_complete+0x140/0x378
 rockchip_drm_atomic_commit+0x1c4/0x224
 drm_atomic_connector_commit_dpms+0x110/0x128
 drm_mode_obj_set_property_ioctl+0x144/0x2b4
 drm_connector_property_set_ioctl+0x3c/0x60
 drm_ioctl+0x2c0/0x454
 do_vfs_ioctl+0x4dc/0x794
 __arm64_sys_ioctl+0x70/0x98
 el0_svc_common+0x9c/0x16c
 el0_svc_handler+0x28/0x60
 el0_svc+0x8/0xc

Signed-off-by: Tao Huang <huangtao@rock-chips.com>
Change-Id: Ic743189e335b0e9ae7fed9c3d542bf1d57f5d33a
2021-02-18 09:46:39 +08:00
..
acpi x86: ACPI: fix CPU hotplug deadlock 2020-04-23 10:30:20 +02:00
asm-generic Merge tag 'ASB-2020-12-05_4.19-stable' of https://android.googlesource.com/kernel/common 2020-12-29 16:10:48 +08:00
clocksource ANDROID: GKI: drivers: clksource: Add API to return cval 2020-04-02 23:32:47 +00:00
crypto UPSTREAM: crypto: x86/chacha-sse3 - use unaligned loads for state array 2020-10-25 11:48:06 +01:00
drm Revert "drm/atomic_helper: Stop modesets on unregistered connectors harder" 2020-12-03 14:58:52 +01:00
dt-bindings arm64: dts: rockchip: rk3568: add rockchip-suspend node 2021-01-26 19:29:40 +08:00
keys KEYS: Don't write out to userspace while holding key semaphore 2020-04-23 10:30:24 +02:00
kvm
linux soc: rockchip: pm-config: support mem_lite/mem_ultra config 2021-01-26 19:29:40 +08:00
math-emu
media Revert "HACK: media: videobuf2: allow cache hints on all memory types" 2020-12-17 14:58:08 +08:00
memory
misc
net This is the 4.19.160 stable release 2020-11-24 14:57:17 +01:00
pcmcia
ras
rdma RDMA/core: Fix double destruction of uobject 2020-06-03 08:19:43 +02:00
scsi Merge 4.19.161 into android-4.19-stable 2020-12-03 10:10:00 +01:00
soc PM / devfreq: rockchip_dmc: Introduce rockchip_dmcfreq_lock_nested() 2021-02-18 09:46:39 +08:00
sound ASoC: rockchip: Add support for Voice Activity Detection 2020-11-13 17:07:49 +08:00
target scsi: target: fix hang when multiple threads try to destroy the same iscsi session 2020-04-21 09:03:11 +02:00
trace UPSTREAM: include: trace: Add SCMI header with trace events 2020-12-22 15:54:10 +08:00
uapi media: rockchip: isp/ispp to version v1.5.1 2021-02-08 17:19:57 +08:00
vdso UPSTREAM: vdso: Remove superfluous #ifdef __KERNEL__ in vdso/datapage.h 2020-11-16 09:22:35 +01:00
video
xen xen/events: add a new "late EOI" evtchn framework 2020-11-05 11:08:36 +01:00