drm-tip: Possible deadlock in DRM FB helpers
Daniel Vetter
daniel at ffwll.ch
Tue Jun 11 09:35:46 UTC 2019
On Tue, Jun 11, 2019 at 11:27 AM Thomas Zimmermann <tzimmermann at suse.de> wrote:
>
> Hi,
>
> since a few days, I get a deadlock warning about the DRM FB helpers in
> drm-tip. I was able to trace the problem back to
>
> d81294afe drm/fb-helper: Remove drm_fb_helper_crtc
>
> It moves around some lock operations, which breaks non-atomic drivers
> (radeon, mgag200, ast). An lspci and dmesg snippet from my test system
> is included below.
>From a quick look the client->modeset_mutex is taken too deep in the
callchain for pan_set. It needs to be moved out, outside of all the
core kms locking, like with fb_helper_dpms. I think that should fix
the issue.
-Daniel
> Best regards
> Thomas
>
>
> * lspci -v
>
> 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc.
> [AMD/ATI] Oland [Radeon HD 8570 / R7 240/340 OEM] (prog-if 00 [VGA
> controller])
> Subsystem: Dell Radeon R5 240 OEM
> Flags: bus master, fast devsel, latency 0, IRQ 32
> Memory at e0000000 (64-bit, prefetchable) [size=256M]
> Memory at f7c00000 (64-bit, non-prefetchable) [size=256K]
> I/O ports at e000 [size=256]
> Expansion ROM at 000c0000 [disabled] [size=128K]
> Capabilities: [48] Vendor Specific Information: Len=08 <?>
> Capabilities: [50] Power Management version 3
> Capabilities: [58] Express Legacy Endpoint, MSI 00
> Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
> Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1
> Len=010 <?>
> Capabilities: [150] Advanced Error Reporting
> Capabilities: [200] Resizable BAR <?>
> Capabilities: [270] Secondary PCI Express <?>
> Kernel driver in use: radeon
> Kernel modules: radeon, amdgpu
>
> * dmesg
>
>
> [ 4.959319] fbcon: radeondrmfb (fb0) is primary device
> [ 4.993952] Console: switching to colour frame buffer device 240x67
> [ 4.994040]
> [ 4.994041] ======================================================
> [ 4.994041] WARNING: possible circular locking dependency detected
> [ 4.994042] 5.2.0-rc4-1-default+ #39 Tainted: G E
> [ 4.994043] ------------------------------------------------------
> [ 4.994043] systemd-udevd/369 is trying to acquire lock:
> [ 4.994044] 00000000fb622acb (&client->modeset_mutex){+.+.}, at:
> drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994055]
> [ 4.994055] but task is already holding lock:
> [ 4.994055] 0000000028767ae4 (crtc_ww_class_mutex){+.+.}, at:
> drm_modeset_lock+0x42/0xf0 [drm]
> [ 4.994072]
> [ 4.994072] which lock already depends on the new lock.
> [ 4.994072]
> [ 4.994072]
> [ 4.994072] the existing dependency chain (in reverse order) is:
> [ 4.994073]
> [ 4.994073] -> #3 (crtc_ww_class_mutex){+.+.}:
> [ 4.994076] lock_acquire+0x9e/0x170
> [ 4.994079] __ww_mutex_lock.constprop.18+0x97/0xf40
> [ 4.994080] ww_mutex_lock+0x30/0x90
> [ 4.994091] drm_modeset_lock+0x42/0xf0 [drm]
> [ 4.994102] drm_modeset_lock_all_ctx+0x1f/0xe0 [drm]
> [ 4.994113] drm_modeset_lock_all+0x5e/0x1a0 [drm]
> [ 4.994163] intel_modeset_init+0x60b/0xda0 [i915]
> [ 4.994196] i915_driver_load+0xd17/0x1730 [i915]
> [ 4.994228] i915_pci_probe+0x44/0x130 [i915]
> [ 4.994231] local_pci_probe+0x42/0x80
> [ 4.994232] pci_device_probe+0xf1/0x170
> [ 4.994234] really_probe+0xef/0x390
> [ 4.994235] driver_probe_device+0xb4/0x100
> [ 4.994237] device_driver_attach+0x4f/0x60
> [ 4.994238] __driver_attach+0x88/0x140
> [ 4.994239] bus_for_each_dev+0x66/0x90
> [ 4.994240] bus_add_driver+0x134/0x1e0
> [ 4.994241] driver_register+0x6b/0xb0
> [ 4.994244] do_one_initcall+0x5d/0x2b4
> [ 4.994246] do_init_module+0x5a/0x220
> [ 4.994248] load_module+0x17d4/0x1a90
> [ 4.994249] __do_sys_finit_module+0x8f/0xd0
> [ 4.994251] do_syscall_64+0x60/0x1c0
> [ 4.994252] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 4.994253]
> [ 4.994253] -> #2 (crtc_ww_class_acquire){+.+.}:
> [ 4.994255] lock_acquire+0x9e/0x170
> [ 4.994270] drm_modeset_acquire_init+0xcc/0x100 [drm]
> [ 4.994280] drm_modeset_lock_all+0x44/0x1a0 [drm]
> [ 4.994320] intel_modeset_init+0x60b/0xda0 [i915]
> [ 4.994352] i915_driver_load+0xd17/0x1730 [i915]
> [ 4.994385] i915_pci_probe+0x44/0x130 [i915]
> [ 4.994387] local_pci_probe+0x42/0x80
> [ 4.994387] pci_device_probe+0xf1/0x170
> [ 4.994389] really_probe+0xef/0x390
> [ 4.994390] driver_probe_device+0xb4/0x100
> [ 4.994391] device_driver_attach+0x4f/0x60
> [ 4.994392] __driver_attach+0x88/0x140
> [ 4.994393] bus_for_each_dev+0x66/0x90
> [ 4.994394] bus_add_driver+0x134/0x1e0
> [ 4.994395] driver_register+0x6b/0xb0
> [ 4.994396] do_one_initcall+0x5d/0x2b4
> [ 4.994398] do_init_module+0x5a/0x220
> [ 4.994399] load_module+0x17d4/0x1a90
> [ 4.994400] __do_sys_finit_module+0x8f/0xd0
> [ 4.994402] do_syscall_64+0x60/0x1c0
> [ 4.994403] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 4.994403]
> [ 4.994403] -> #1 (&dev->mode_config.mutex){+.+.}:
> [ 4.994405] lock_acquire+0x9e/0x170
> [ 4.994408] __mutex_lock+0x62/0x8c0
> [ 4.994413] drm_setup_crtcs+0x17c/0xc50 [drm_kms_helper]
> [ 4.994418]
> __drm_fb_helper_initial_config_and_unlock+0x34/0x530 [drm_kms_helper]
> [ 4.994450] radeon_fbdev_init+0x110/0x130 [radeon]
> [ 4.994477] radeon_modeset_init.cold.12+0x198/0x4ec [radeon]
> [ 4.994500] radeon_driver_load_kms+0xc1/0x250 [radeon]
> [ 4.994508] drm_dev_register+0x10f/0x150 [drm]
> [ 4.994517] drm_get_pci_dev+0x95/0x190 [drm]
> [ 4.994519] local_pci_probe+0x42/0x80
> [ 4.994520] pci_device_probe+0xf1/0x170
> [ 4.994521] really_probe+0xef/0x390
> [ 4.994522] driver_probe_device+0xb4/0x100
> [ 4.994523] device_driver_attach+0x4f/0x60
> [ 4.994524] __driver_attach+0x88/0x140
> [ 4.994525] bus_for_each_dev+0x66/0x90
> [ 4.994526] bus_add_driver+0x134/0x1e0
> [ 4.994527] driver_register+0x6b/0xb0
> [ 4.994528] do_one_initcall+0x5d/0x2b4
> [ 4.994530] do_init_module+0x5a/0x220
> [ 4.994531] load_module+0x17d4/0x1a90
> [ 4.994532] __do_sys_finit_module+0x8f/0xd0
> [ 4.994533] do_syscall_64+0x60/0x1c0
> [ 4.994535] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 4.994535]
> [ 4.994535] -> #0 (&client->modeset_mutex){+.+.}:
> [ 4.994537] __lock_acquire+0xa85/0xe90
> [ 4.994538] lock_acquire+0x9e/0x170
> [ 4.994540] __mutex_lock+0x62/0x8c0
> [ 4.994545] drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994547] fb_pan_display+0x92/0x120
> [ 4.994549] bit_update_start+0x1a/0x40
> [ 4.994550] fbcon_switch+0x392/0x580
> [ 4.994552] redraw_screen+0x12c/0x220
> [ 4.994553] do_bind_con_driver.cold.30+0xe1/0x10d
> [ 4.994554] do_take_over_console+0x113/0x190
> [ 4.994555] do_fbcon_takeover+0x58/0xb0
> [ 4.994557] notifier_call_chain+0x47/0x70
> [ 4.994558] blocking_notifier_call_chain+0x44/0x60
> [ 4.994559] register_framebuffer+0x231/0x310
> [ 4.994564]
> __drm_fb_helper_initial_config_and_unlock+0x2fd/0x530 [drm_kms_helper]
> [ 4.994590] radeon_fbdev_init+0x110/0x130 [radeon]
> [ 4.994615] radeon_modeset_init.cold.12+0x198/0x4ec [radeon]
> [ 4.994638] radeon_driver_load_kms+0xc1/0x250 [radeon]
> [ 4.994647] drm_dev_register+0x10f/0x150 [drm]
> [ 4.994655] drm_get_pci_dev+0x95/0x190 [drm]
> [ 4.994657] local_pci_probe+0x42/0x80
> [ 4.994658] pci_device_probe+0xf1/0x170
> [ 4.994659] really_probe+0xef/0x390
> [ 4.994660] driver_probe_device+0xb4/0x100
> [ 4.994661] device_driver_attach+0x4f/0x60
> [ 4.994662] __driver_attach+0x88/0x140
> [ 4.994663] bus_for_each_dev+0x66/0x90
> [ 4.994664] bus_add_driver+0x134/0x1e0
> [ 4.994665] driver_register+0x6b/0xb0
> [ 4.994666] do_one_initcall+0x5d/0x2b4
> [ 4.994668] do_init_module+0x5a/0x220
> [ 4.994669] load_module+0x17d4/0x1a90
> [ 4.994670] __do_sys_finit_module+0x8f/0xd0
> [ 4.994671] do_syscall_64+0x60/0x1c0
> [ 4.994673] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 4.994673]
> [ 4.994673] other info that might help us debug this:
> [ 4.994673]
> [ 4.994673] Chain exists of:
> [ 4.994673] &client->modeset_mutex --> crtc_ww_class_acquire -->
> crtc_ww_class_mutex
> [ 4.994673]
> [ 4.994675] Possible unsafe locking scenario:
> [ 4.994675]
> [ 4.994675] CPU0 CPU1
> [ 4.994676] ---- ----
> [ 4.994676] lock(crtc_ww_class_mutex);
> [ 4.994677] lock(crtc_ww_class_acquire);
> [ 4.994677] lock(crtc_ww_class_mutex);
> [ 4.994678] lock(&client->modeset_mutex);
> [ 4.994679]
> [ 4.994679] *** DEADLOCK ***
> [ 4.994679]
> [ 4.994679] 11 locks held by systemd-udevd/369:
> [ 4.994680] #0: 000000002a864971 (&dev->mutex){....}, at:
> device_driver_attach+0x1d/0x60
> [ 4.994682] #1: 0000000079b4fff6 (drm_global_mutex){+.+.}, at:
> drm_dev_register+0x27/0x150 [drm]
> [ 4.994691] #2: 00000000ae4b249f (registration_lock){+.+.}, at:
> register_framebuffer+0x29/0x310
> [ 4.994694] #3: 00000000baa4b33b (console_lock){+.+.}, at:
> register_framebuffer+0x2ad/0x310
> [ 4.994696] #4: 0000000052aa04e9 (&fb_info->lock){+.+.}, at:
> lock_fb_info+0x18/0x40
> [ 4.994698] #5: 00000000ee198c3a ((fb_notifier_list).rwsem){++++},
> at: blocking_notifier_call_chain+0x2a/0x60
> [ 4.994701] #6: 00000000283d5679 (&helper->lock){+.+.}, at:
> drm_fb_helper_pan_display+0x48/0x1f0 [drm_kms_helper]
> [ 4.994707] #7: 000000007cd70e4c (&dev->master_mutex){+.+.}, at:
> drm_master_internal_acquire+0x1b/0x40 [drm]
> [ 4.994715] #8: 0000000069bce718 (&dev->mode_config.mutex){+.+.},
> at: drm_modeset_lock_all+0x3a/0x1a0 [drm]
> [ 4.994726] #9: 00000000aa42b785 (crtc_ww_class_acquire){+.+.}, at:
> drm_modeset_lock_all+0x44/0x1a0 [drm]
> [ 4.994738] #10: 0000000028767ae4 (crtc_ww_class_mutex){+.+.}, at:
> drm_modeset_lock+0x42/0xf0 [drm]
> [ 4.994750]
> [ 4.994750] stack backtrace:
> [ 4.994752] CPU: 7 PID: 369 Comm: systemd-udevd Tainted: G
> E 5.2.0-rc4-1-default+ #39
> [ 4.994752] Hardware name: Dell Inc. OptiPlex 9020/0N4YC8, BIOS A24
> 10/24/2018
> [ 4.994753] Call Trace:
> [ 4.994756] dump_stack+0x85/0xc0
> [ 4.994758] print_circular_bug.cold.62+0x15c/0x195
> [ 4.994760] check_prevs_add+0x7ff/0xf40
> [ 4.994763] ? find_held_lock+0x34/0xa0
> [ 4.994774] ? drm_modeset_lock+0x42/0xf0 [drm]
> [ 4.994775] __lock_acquire+0xa85/0xe90
> [ 4.994777] lock_acquire+0x9e/0x170
> [ 4.994782] ? drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994788] ? drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994790] __mutex_lock+0x62/0x8c0
> [ 4.994795] ? drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994796] ? ww_mutex_lock+0x30/0x90
> [ 4.994798] ? _cond_resched+0x15/0x30
> [ 4.994799] ? ww_mutex_lock+0x30/0x90
> [ 4.994810] ? drm_modeset_lock+0x42/0xf0 [drm]
> [ 4.994816] ? drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994821] drm_fb_helper_pan_display+0x103/0x1f0 [drm_kms_helper]
> [ 4.994823] fb_pan_display+0x92/0x120
> [ 4.994825] bit_update_start+0x1a/0x40
> [ 4.994826] fbcon_switch+0x392/0x580
> [ 4.994829] redraw_screen+0x12c/0x220
> [ 4.994831] do_bind_con_driver.cold.30+0xe1/0x10d
> [ 4.994833] do_take_over_console+0x113/0x190
> [ 4.994835] do_fbcon_takeover+0x58/0xb0
> [ 4.994836] notifier_call_chain+0x47/0x70
> [ 4.994838] blocking_notifier_call_chain+0x44/0x60
> [ 4.994839] ? lock_fb_info+0x18/0x40
> [ 4.994841] register_framebuffer+0x231/0x310
> [ 4.994847] __drm_fb_helper_initial_config_and_unlock+0x2fd/0x530
> [drm_kms_helper]
> [ 4.994873] radeon_fbdev_init+0x110/0x130 [radeon]
> [ 4.994899] radeon_modeset_init.cold.12+0x198/0x4ec [radeon]
> [ 4.994923] radeon_driver_load_kms+0xc1/0x250 [radeon]
> [ 4.994932] drm_dev_register+0x10f/0x150 [drm]
> [ 4.994942] drm_get_pci_dev+0x95/0x190 [drm]
> [ 4.994944] local_pci_probe+0x42/0x80
> [ 4.994946] pci_device_probe+0xf1/0x170
> [ 4.994948] really_probe+0xef/0x390
> [ 4.994949] driver_probe_device+0xb4/0x100
> [ 4.994951] device_driver_attach+0x4f/0x60
> [ 4.994952] __driver_attach+0x88/0x140
> [ 4.994953] ? device_driver_attach+0x60/0x60
> [ 4.994954] bus_for_each_dev+0x66/0x90
> [ 4.994956] bus_add_driver+0x134/0x1e0
> [ 4.994957] ? 0xffffffffc0870000
> [ 4.994959] driver_register+0x6b/0xb0
> [ 4.994960] ? 0xffffffffc0870000
> [ 4.994961] do_one_initcall+0x5d/0x2b4
> [ 4.994964] do_init_module+0x5a/0x220
> [ 4.994966] load_module+0x17d4/0x1a90
> [ 4.994970] ? __do_sys_finit_module+0x8f/0xd0
> [ 4.994971] __do_sys_finit_module+0x8f/0xd0
> [ 4.994974] do_syscall_64+0x60/0x1c0
> [ 4.994976] entry_SYSCALL_64_after_hwframe+0x49/0xbe
> [ 4.994977] RIP: 0033:0x7f10b1261449
> [ 4.994978] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00
> 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f
> 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1f 4a 0c 00 f7 d8 64 89 01 48
> [ 4.994979] RSP: 002b:00007ffd6e07fd78 EFLAGS: 00000246 ORIG_RAX:
> 0000000000000139
> [ 4.994980] RAX: ffffffffffffffda RBX: 00005627690c73d0 RCX:
> 00007f10b1261449
> [ 4.994981] RDX: 0000000000000000 RSI: 00007f10b13c289d RDI:
> 000000000000000e
> [ 4.994982] RBP: 0000000000020000 R08: 0000000000000000 R09:
> 00005627690ce930
> [ 4.994982] R10: 000000000000000e R11: 0000000000000246 R12:
> 00007f10b13c289d
> [ 4.994983] R13: 0000000000000000 R14: 00005627690feba0 R15:
> 00005627690c73d0
>
>
>
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany
> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah
> HRB 21284 (AG Nürnberg)
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the dri-devel
mailing list