drm/mtrr: possible deadlock
From: Dmitry Vyukov
Date: Tue Aug 15 2017 - 03:19:13 EST
Hello,
I am getting the following deadlock report while booting linux-next on
91dfed74eabcdae9378131546c446442c29bf769 in qemu. Config is attached.
WARNING: possible recursive locking detected
4.13.0-rc4-next-20170811 #2 Not tainted
--------------------------------------------
swapper/0/1 is trying to acquire lock:
(cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff816a19fc>]
stop_machine+0x1c/0x40 kernel/stop_machine.c:596
but task is already holding lock:
(cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff812aad6d>]
get_online_cpus include/linux/cpu.h:126 [inline]
(cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff812aad6d>]
mtrr_add_page+0x1bd/0xe80 arch/x86/kernel/cpu/mtrr/main.c:328
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(cpu_hotplug_lock.rw_sem);
lock(cpu_hotplug_lock.rw_sem);
*** DEADLOCK ***
May be due to missing lock nesting notation
5 locks held by swapper/0/1:
#0: (&dev->mutex){....}, at: [<ffffffff834aa073>] device_lock
include/linux/device.h:1081 [inline]
#0: (&dev->mutex){....}, at: [<ffffffff834aa073>]
__driver_attach+0xd3/0x1c0 drivers/base/dd.c:788
#1: (&dev->mutex){....}, at: [<ffffffff834aa086>] device_lock
include/linux/device.h:1081 [inline]
#1: (&dev->mutex){....}, at: [<ffffffff834aa086>]
__driver_attach+0xe6/0x1c0 drivers/base/dd.c:789
#2: (drm_global_mutex){+.+.}, at: [<ffffffff8285e40d>]
drm_dev_register+0x4d/0x660 drivers/gpu/drm/drm_drv.c:780
#3: (cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff812aad6d>]
get_online_cpus include/linux/cpu.h:126 [inline]
#3: (cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff812aad6d>]
mtrr_add_page+0x1bd/0xe80 arch/x86/kernel/cpu/mtrr/main.c:328
#4: (mtrr_mutex){+.+.}, at: [<ffffffff812aad7b>]
mtrr_add_page+0x1cb/0xe80 arch/x86/kernel/cpu/mtrr/main.c:331
stack backtrace:
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.13.0-rc4-next-20170811 #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:16 [inline]
dump_stack+0x194/0x257 lib/dump_stack.c:52
print_deadlock_bug kernel/locking/lockdep.c:1797 [inline]
check_deadlock kernel/locking/lockdep.c:1844 [inline]
validate_chain kernel/locking/lockdep.c:2453 [inline]
__lock_acquire+0xed5/0x3bc0 kernel/locking/lockdep.c:3498
lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:4002
percpu_down_read_preempt_disable include/linux/percpu-rwsem.h:35 [inline]
percpu_down_read include/linux/percpu-rwsem.h:58 [inline]
cpus_read_lock+0x42/0x90 kernel/cpu.c:218
stop_machine+0x1c/0x40 kernel/stop_machine.c:596
set_mtrr arch/x86/kernel/cpu/mtrr/main.c:237 [inline]
mtrr_add_page+0x6b7/0xe80 arch/x86/kernel/cpu/mtrr/main.c:373
mtrr_add+0x97/0xb0 arch/x86/kernel/cpu/mtrr/main.c:448
arch_phys_wc_add+0x55/0x90 arch/x86/kernel/cpu/mtrr/main.c:562
cirrus_mm_init+0x43f/0x6a0 drivers/gpu/drm/cirrus/cirrus_ttm.c:274
cirrus_driver_load+0xcd/0x250 drivers/gpu/drm/cirrus/cirrus_main.c:182
drm_dev_register+0x34f/0x660 drivers/gpu/drm/drm_drv.c:801
drm_get_pci_dev+0x1ee/0x600 drivers/gpu/drm/drm_pci.c:262
cirrus_pci_probe+0x198/0x210 drivers/gpu/drm/cirrus/cirrus_drv.c:75
local_pci_probe+0xdc/0x190 drivers/pci/pci-driver.c:307
__pci_device_probe drivers/pci/pci-driver.c:361 [inline]
pci_device_probe+0x5a3/0x6a0 drivers/pci/pci-driver.c:426
really_probe drivers/base/dd.c:413 [inline]
driver_probe_device+0x63c/0xa20 drivers/base/dd.c:557
__driver_attach+0x181/0x1c0 drivers/base/dd.c:791
bus_for_each_dev+0x154/0x1e0 drivers/base/bus.c:313
driver_attach+0x3d/0x50 drivers/base/dd.c:810
bus_add_driver+0x48f/0x660 drivers/base/bus.c:669
driver_register+0x1bf/0x3c0 drivers/base/driver.c:168
__pci_register_driver+0x1d2/0x2c0 drivers/pci/pci-driver.c:1313
cirrus_init+0x52/0x5e drivers/gpu/drm/cirrus/cirrus_drv.c:168
do_one_initcall+0x9e/0x330 init/main.c:824
do_initcall_level init/main.c:890 [inline]
do_initcalls init/main.c:898 [inline]
do_basic_setup init/main.c:916 [inline]
kernel_init_freeable+0x46e/0x526 init/main.c:1066
kernel_init+0x13/0x172 init/main.c:991
ret_from_fork+0x2a/0x40 arch/x86/entry/entry_64.S:431
Attachment:
.config
Description: Binary data