2021-06-28 04:12:16

by Mike Galbraith

[permalink] [raw]
Subject: drm/nouveau: lockdep circular locking dependency report

Having forgotten to boot nomodeset when running lockdep enabled
kernels, I was reminded that this gripe is still alive and well.

Graphics card is same old GTX-980 in same old box as last report. It's
harmless other than mucking up testing, but since it reminded me again,
I'll pass it along again.

[ 29.130076] ======================================================
[ 29.130079] WARNING: possible circular locking dependency detected
[ 29.130081] 5.13.0.g625acff-master #4 Tainted: G E
[ 29.130084] ------------------------------------------------------
[ 29.130087] X/2064 is trying to acquire lock:
[ 29.130089] ffff888120a54518 (&cli->mutex){+.+.}-{3:3}, at: nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.130160]
but task is already holding lock:
[ 29.130162] ffff888100912da0 (reservation_ww_class_mutex){+.+.}-{3:3}, at: nouveau_bo_pin+0x2b/0x320 [nouveau]
[ 29.130217]
which lock already depends on the new lock.

[ 29.130220]
the existing dependency chain (in reverse order) is:
[ 29.130223]
-> #1 (reservation_ww_class_mutex){+.+.}-{3:3}:
[ 29.130227] lock_acquire+0x258/0x2f0
[ 29.130232] __ww_mutex_lock.constprop.17+0xbe/0x1090
[ 29.130237] nouveau_bo_pin+0x2b/0x320 [nouveau]
[ 29.130285] nouveau_channel_prep+0x106/0x2e0 [nouveau]
[ 29.130328] nouveau_channel_new+0x4f/0x760 [nouveau]
[ 29.130369] nouveau_abi16_ioctl_channel_alloc+0xdf/0x350 [nouveau]
[ 29.130407] drm_ioctl_kernel+0x8f/0xe0 [drm]
[ 29.130430] drm_ioctl+0x2db/0x380 [drm]
[ 29.130446] nouveau_drm_ioctl+0x56/0xb0 [nouveau]
[ 29.130495] __x64_sys_ioctl+0x73/0xb0
[ 29.130499] do_syscall_64+0x39/0x80
[ 29.130502] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 29.130506]
-> #0 (&cli->mutex){+.+.}-{3:3}:
[ 29.130510] validate_chain+0xbb8/0x1740
[ 29.130514] __lock_acquire+0x8ab/0xc20
[ 29.130516] lock_acquire+0x258/0x2f0
[ 29.130520] __mutex_lock+0x95/0x9b0
[ 29.130523] nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.130571] ttm_bo_handle_move_mem+0x76/0x130 [ttm]
[ 29.130576] ttm_bo_validate+0x156/0x1b0 [ttm]
[ 29.130581] nouveau_bo_validate+0x48/0x70 [nouveau]
[ 29.130628] nouveau_bo_pin+0x1ec/0x320 [nouveau]
[ 29.130673] nv50_wndw_prepare_fb+0x53/0x4d0 [nouveau]
[ 29.130715] drm_atomic_helper_prepare_planes+0x87/0x110 [drm_kms_helper]
[ 29.130731] nv50_disp_atomic_commit+0xa9/0x1b0 [nouveau]
[ 29.130776] drm_atomic_helper_update_plane+0x10a/0x150 [drm_kms_helper]
[ 29.130788] drm_mode_cursor_universal+0x10b/0x220 [drm]
[ 29.130810] drm_mode_cursor_common+0x190/0x200 [drm]
[ 29.130828] drm_mode_cursor_ioctl+0x3d/0x50 [drm]
[ 29.130845] drm_ioctl_kernel+0x8f/0xe0 [drm]
[ 29.130870] drm_ioctl+0x2db/0x380 [drm]
[ 29.130884] nouveau_drm_ioctl+0x56/0xb0 [nouveau]
[ 29.130932] __x64_sys_ioctl+0x73/0xb0
[ 29.130936] do_syscall_64+0x39/0x80
[ 29.130939] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 29.130943]
other info that might help us debug this:

[ 29.130947] Possible unsafe locking scenario:

[ 29.130950] CPU0 CPU1
[ 29.130952] ---- ----
[ 29.130955] lock(reservation_ww_class_mutex);
[ 29.130958] lock(&cli->mutex);
[ 29.130961] lock(reservation_ww_class_mutex);
[ 29.130965] lock(&cli->mutex);
[ 29.130967]
*** DEADLOCK ***

[ 29.130970] 3 locks held by X/2064:
[ 29.130973] #0: ffff888103ecfcf0 (crtc_ww_class_acquire){+.+.}-{0:0}, at: drm_mode_cursor_common+0x87/0x200 [drm]
[ 29.130996] #1: ffff8881209e00c0 (crtc_ww_class_mutex){+.+.}-{3:3}, at: drm_modeset_backoff+0xe4/0x190 [drm]
[ 29.131020] #2: ffff888100912da0 (reservation_ww_class_mutex){+.+.}-{3:3}, at: nouveau_bo_pin+0x2b/0x320 [nouveau]
[ 29.131073]
stack backtrace:
[ 29.131076] CPU: 5 PID: 2064 Comm: X Kdump: loaded Tainted: G E 5.13.0.g625acff-master #4
[ 29.131081] Hardware name: MEDION MS-7848/MS-7848, BIOS M7848W08.20C 09/23/2013
[ 29.131084] Call Trace:
[ 29.131087] dump_stack+0x7f/0xad
[ 29.131091] check_noncircular+0x10c/0x120
[ 29.131096] ? nvkm_vmm_map+0xca/0x3c0 [nouveau]
[ 29.131144] ? validate_chain+0xbb8/0x1740
[ 29.131148] validate_chain+0xbb8/0x1740
[ 29.131154] __lock_acquire+0x8ab/0xc20
[ 29.131158] lock_acquire+0x258/0x2f0
[ 29.131162] ? nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.131212] __mutex_lock+0x95/0x9b0
[ 29.131216] ? nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.131265] ? nvif_vmm_map+0xf4/0x110 [nouveau]
[ 29.131291] ? nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.131341] ? nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.131390] nouveau_bo_move+0x11c/0x830 [nouveau]
[ 29.131440] ? unmap_mapping_pages+0x5c/0x110
[ 29.131446] ttm_bo_handle_move_mem+0x76/0x130 [ttm]
[ 29.131452] ttm_bo_validate+0x156/0x1b0 [ttm]
[ 29.131459] nouveau_bo_validate+0x48/0x70 [nouveau]
[ 29.131509] nouveau_bo_pin+0x1ec/0x320 [nouveau]
[ 29.131559] nv50_wndw_prepare_fb+0x53/0x4d0 [nouveau]
[ 29.131605] drm_atomic_helper_prepare_planes+0x87/0x110 [drm_kms_helper]
[ 29.131618] ? lockdep_init_map_type+0x58/0x250
[ 29.131622] nv50_disp_atomic_commit+0xa9/0x1b0 [nouveau]
[ 29.131669] drm_atomic_helper_update_plane+0x10a/0x150 [drm_kms_helper]
[ 29.131682] drm_mode_cursor_universal+0x10b/0x220 [drm]
[ 29.131706] drm_mode_cursor_common+0x190/0x200 [drm]
[ 29.131729] ? drm_mode_setplane+0x190/0x190 [drm]
[ 29.131751] drm_mode_cursor_ioctl+0x3d/0x50 [drm]
[ 29.131773] drm_ioctl_kernel+0x8f/0xe0 [drm]
[ 29.131788] drm_ioctl+0x2db/0x380 [drm]
[ 29.131804] ? drm_mode_setplane+0x190/0x190 [drm]
[ 29.131825] ? _raw_spin_unlock_irqrestore+0x55/0x70
[ 29.131830] ? lockdep_hardirqs_on+0xbf/0x130
[ 29.131833] ? _raw_spin_unlock_irqrestore+0x42/0x70
[ 29.131838] nouveau_drm_ioctl+0x56/0xb0 [nouveau]
[ 29.131889] __x64_sys_ioctl+0x73/0xb0
[ 29.131893] ? lockdep_hardirqs_on+0xbf/0x130
[ 29.131897] do_syscall_64+0x39/0x80
[ 29.131900] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 29.131904] RIP: 0033:0x7fa55f31d807
[ 29.131908] Code: b3 66 90 48 8b 05 89 76 2d 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 59 76 2d 00 f7 d8 64 89 01 48
[ 29.131914] RSP: 002b:00007ffde6234b48 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[ 29.131919] RAX: ffffffffffffffda RBX: 0000564efa74dc20 RCX: 00007fa55f31d807
[ 29.131922] RDX: 00007ffde6234b80 RSI: 00000000c01c64a3 RDI: 000000000000000e
[ 29.131926] RBP: 00007ffde6234b80 R08: 0000000000000040 R09: 0000564efa798cd0
[ 29.131929] R10: 00007fa560918048 R11: 0000000000000246 R12: 00000000c01c64a3
[ 29.131933] R13: 000000000000000e R14: 0000000000000000 R15: 0000000000000000
[ 38.208089] Adjusting tsc more than 11% (4143767 vs 5184956)


2021-06-28 05:09:31

by Mike Galbraith

[permalink] [raw]
Subject: Re: drm/nouveau: lockdep circular locking dependency report

I've now applied a revert of 551620f2a3816397266dfd812cd8b3be89f14be4
to all trees where lockdep may be enabled to re-hide the inversion. It
thus won't every remind me of its existence, thus I won't be inspired
to pass that reminder along.

-Mike