WARNING: possible circular locking dependency detected

From: Borislav Petkov
Date: Fri Aug 25 2017 - 06:03:21 EST


Hey,

tglx says I have something for ya :-)

======================================================
WARNING: possible circular locking dependency detected
4.13.0-rc6+ #1 Not tainted
------------------------------------------------------
watchdog/3/27 is trying to acquire lock:
(cpu_hotplug_lock.rw_sem){++++}, at: [<ffffffff8100c489>] release_ds_buffers+0x29/0xd0

but now in release context of a crosslock acquired at the following:
((complete)&self->parked){+.+.}, at: [<ffffffff810895f6>] kthread_park+0x46/0x60

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #2 ((complete)&self->parked){+.+.}:
__lock_acquire+0x10af/0x1110
lock_acquire+0xea/0x1f0
wait_for_completion+0x3b/0x130
kthread_park+0x46/0x60
__smpboot_create_thread.part.5+0x7d/0xf0
smpboot_register_percpu_thread_cpumask+0xa2/0x100
spawn_ksoftirqd+0x3b/0x45
do_one_initcall+0x52/0x198
kernel_init_freeable+0x6f/0x1a1
kernel_init+0xe/0x100
ret_from_fork+0x2a/0x40

-> #1 (smpboot_threads_lock){+.+.}:
__lock_acquire+0x10af/0x1110
lock_acquire+0xea/0x1f0
__mutex_lock+0x6c/0x940
mutex_lock_nested+0x1b/0x20
smpboot_register_percpu_thread_cpumask+0x42/0x100
spawn_ksoftirqd+0x3b/0x45
do_one_initcall+0x52/0x198
kernel_init_freeable+0x6f/0x1a1
kernel_init+0xe/0x100
ret_from_fork+0x2a/0x40

-> #0 (cpu_hotplug_lock.rw_sem){++++}:
cpus_read_lock+0x2a/0x90
release_ds_buffers+0x29/0xd0
x86_release_hardware+0x8f/0xa0
hw_perf_event_destroy+0xe/0x20
_free_event+0xa7/0x250

other info that might help us debug this:

Chain exists of:
cpu_hotplug_lock.rw_sem --> smpboot_threads_lock --> (complete)&self->parked

Possible unsafe locking scenario by crosslock:

CPU0 CPU1
---- ----
lock(smpboot_threads_lock);
lock((complete)&self->parked);
lock(cpu_hotplug_lock.rw_sem);
unlock((complete)&self->parked);

*** DEADLOCK ***

1 lock held by watchdog/3/27:
#0: (&x->wait){....}, at: [<ffffffff810b115d>] complete+0x1d/0x60

stack backtrace:
CPU: 3 PID: 27 Comm: watchdog/3 Not tainted 4.13.0-rc6+ #1
Hardware name: LENOVO 2320CTO/2320CTO, BIOS G2ET86WW (2.06 ) 11/13/2012
Call Trace:
dump_stack+0x86/0xcf
print_circular_bug+0x1fa/0x2f0
check_prev_add+0x3be/0x700
? __lock_acquire+0x4c6/0x1110
? trace_event_raw_event_lock+0xf0/0xf0
lock_commit_crosslock+0x40d/0x590
? lock_commit_crosslock+0x40d/0x590
complete+0x29/0x60
__kthread_parkme+0x54/0x80
kthread_parkme+0x24/0x40
smpboot_thread_fn+0x95/0x230
kthread+0x147/0x180
? sort_range+0x30/0x30
? kthread_create_on_node+0x40/0x40
ret_from_fork+0x2a/0x40


--
Regards/Gruss,
Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.