etnaviv: Possible circular lockingon i.MX6QP
Fabio Estevam
festevam at gmail.com
Wed Jun 12 15:48:36 UTC 2019
Hi,
On a imx6qp-wandboard I get the warning below about a possible
circular locking dependency running 5.1.9 built from
imx_v6_v7_defconfig.
Such warning does not happen on the imx6q or imx6solo variants of
wandboard though.
Any ideas?
Thanks,
Fabio Estevam
** (matchbox-panel:708): WARNING **: Failed to load applet "battery"
(/usr/lib/matchbox-panel/libbattery.so: cannot open shared object
file: No such file or directory).
matchbox-wm: X error warning (0xe00003): BadWindow (invalid Window
parameter) (opcode: 12)
etnaviv-gpu 134000.gpu: MMU fault status 0x00000001
etnaviv-gpu 134000.gpu: MMU 0 fault addr 0x0805ffc0
======================================================
WARNING: possible circular locking dependency detected
5.1.9 #58 Not tainted
------------------------------------------------------
kworker/0:1/29 is trying to acquire lock:
(ptrval) (&(&gpu->fence_spinlock)->rlock){-...}, at:
dma_fence_remove_callback+0x14/0x50
but task is already holding lock:
(ptrval) (&(&sched->job_list_lock)->rlock){-...}, at: drm_sched_stop+0x1c/0x124
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (&(&sched->job_list_lock)->rlock){-...}:
drm_sched_process_job+0x5c/0x1c8
dma_fence_signal+0xdc/0x1d4
irq_handler+0xd0/0x1e0
__handle_irq_event_percpu+0x48/0x360
handle_irq_event_percpu+0x28/0x7c
handle_irq_event+0x38/0x5c
handle_fasteoi_irq+0xc0/0x17c
generic_handle_irq+0x20/0x34
__handle_domain_irq+0x64/0xe0
gic_handle_irq+0x4c/0xa8
__irq_svc+0x70/0x98
cpuidle_enter_state+0x168/0x5a4
cpuidle_enter_state+0x168/0x5a4
do_idle+0x220/0x2c0
cpu_startup_entry+0x18/0x20
start_kernel+0x3e4/0x498
-> #0 (&(&gpu->fence_spinlock)->rlock){-...}:
_raw_spin_lock_irqsave+0x38/0x4c
dma_fence_remove_callback+0x14/0x50
drm_sched_stop+0x98/0x124
etnaviv_sched_timedout_job+0x7c/0xb4
drm_sched_job_timedout+0x34/0x5c
process_one_work+0x2ac/0x704
worker_thread+0x2c/0x574
kthread+0x134/0x148
ret_from_fork+0x14/0x20
(null)
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(&(&sched->job_list_lock)->rlock);
lock(&(&gpu->fence_spinlock)->rlock);
lock(&(&sched->job_list_lock)->rlock);
lock(&(&gpu->fence_spinlock)->rlock);
*** DEADLOCK ***
3 locks held by kworker/0:1/29:
#0: (ptrval) ((wq_completion)events){+.+.}, at: process_one_work+0x1f4/0x704
#1: (ptrval) ((work_completion)(&(&sched->work_tdr)->work)){+.+.},
at: process_one_work+0x1f4/0x704
#2: (ptrval) (&(&sched->job_list_lock)->rlock){-...}, at:
drm_sched_stop+0x1c/0x124
stack backtrace:
CPU: 0 PID: 29 Comm: kworker/0:1 Not tainted 5.1.9 #58
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
Workqueue: events drm_sched_job_timedout
[<c0112748>] (unwind_backtrace) from [<c010cfbc>] (show_stack+0x10/0x14)
[<c010cfbc>] (show_stack) from [<c0bd31ec>] (dump_stack+0xd8/0x110)
[<c0bd31ec>] (dump_stack) from [<c017a22c>]
(print_circular_bug.constprop.19+0x1bc/0x2f0)
[<c017a22c>] (print_circular_bug.constprop.19) from [<c017d408>]
(__lock_acquire+0x1778/0x1f38)
[<c017d408>] (__lock_acquire) from [<c017e3a4>] (lock_acquire+0xcc/0x1e8)
[<c017e3a4>] (lock_acquire) from [<c0bf4134>] (_raw_spin_lock_irqsave+0x38/0x4c)
[<c0bf4134>] (_raw_spin_lock_irqsave) from [<c0692710>]
(dma_fence_remove_callback+0x14/0x50)
[<c0692710>] (dma_fence_remove_callback) from [<c05d25b4>]
(drm_sched_stop+0x98/0x124)
[<c05d25b4>] (drm_sched_stop) from [<c064a3e8>]
(etnaviv_sched_timedout_job+0x7c/0xb4)
[<c064a3e8>] (etnaviv_sched_timedout_job) from [<c05d2964>]
(drm_sched_job_timedout+0x34/0x5c)
[<c05d2964>] (drm_sched_job_timedout) from [<c01468ec>]
(process_one_work+0x2ac/0x704)
[<c01468ec>] (process_one_work) from [<c0146d70>] (worker_thread+0x2c/0x574)
[<c0146d70>] (worker_thread) from [<c014cd88>] (kthread+0x134/0x148)
[<c014cd88>] (kthread) from [<c01010b4>] (ret_from_fork+0x14/0x20)
Exception stack(0xe81f7fb0 to 0xe81f7ff8)
7fa0: 00000000 00000000 00000000 00000000
7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
7fe0: 00000000 00000000 00000000 00000000 00000013 00000000
etnaviv-gpu 134000.gpu: recover hung GPU!
More information about the etnaviv
mailing list