John Stultz
db751fe3ea
cpuset: Fix potential deadlock w/ set_mems_allowed
After adding lockdep support to seqlock/seqcount structures,
I started seeing the following warning:
[ 1.070907] ======================================================
[ 1.072015] [ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
[ 1.073181] 3.11.0+ #67 Not tainted
[ 1.073801] ------------------------------------------------------
[ 1.074882] kworker/u4:2/708 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
[ 1.076088] (&p->mems_allowed_seq){+.+...}, at: [<ffffffff81187d7f>] new_slab+0x5f/0x280
[ 1.077572]
[ 1.077572] and this task is already holding:
[ 1.078593] (&(&q->__queue_lock)->rlock){..-...}, at: [<ffffffff81339f03>] blk_execute_rq_nowait+0x53/0xf0
[ 1.080042] which would create a new lock dependency:
[ 1.080042] (&(&q->__queue_lock)->rlock){..-...} -> (&p->mems_allowed_seq){+.+...}
[ 1.080042]
[ 1.080042] but this new dependency connects a SOFTIRQ-irq-safe lock:
[ 1.080042] (&(&q->__queue_lock)->rlock){..-...}
[ 1.080042] ... which became SOFTIRQ-irq-safe at:
[ 1.080042] [<ffffffff810ec179>] __lock_acquire+0x5b9/0x1db0
[ 1.080042] [<ffffffff810edfe5>] lock_acquire+0x95/0x130
[ 1.080042] [<ffffffff818968a1>] _raw_spin_lock+0x41/0x80
[ 1.080042] [<ffffffff81560c9e>] scsi_device_unbusy+0x7e/0xd0
[ 1.080042] [<ffffffff8155a612>] scsi_finish_command+0x32/0xf0
[ 1.080042] [<ffffffff81560e91>] scsi_softirq_done+0xa1/0x130
[ 1.080042] [<ffffffff8133b0f3>] blk_done_softirq+0x73/0x90
[ 1.080042] [<ffffffff81095dc0>] __do_softirq+0x110/0x2f0
[ 1.080042] [<ffffffff81095fcd>] run_ksoftirqd+0x2d/0x60
[ 1.080042] [<ffffffff810bc506>] smpboot_thread_fn+0x156/0x1e0
[ 1.080042] [<ffffffff810b3916>] kthread+0xd6/0xe0
[ 1.080042] [<ffffffff818980ac>] ret_from_fork+0x7c/0xb0
[ 1.080042]
[ 1.080042] to a SOFTIRQ-irq-unsafe lock:
[ 1.080042] (&p->mems_allowed_seq){+.+...}
[ 1.080042] ... which became SOFTIRQ-irq-unsafe at:
[ 1.080042] ... [<ffffffff810ec1d3>] __lock_acquire+0x613/0x1db0
[ 1.080042] [<ffffffff810edfe5>] lock_acquire+0x95/0x130
[ 1.080042] [<ffffffff810b3df2>] kthreadd+0x82/0x180
[ 1.080042] [<ffffffff818980ac>] ret_from_fork+0x7c/0xb0
[ 1.080042]
[ 1.080042] other info that might help us debug this:
[ 1.080042]
[ 1.080042] Possible interrupt unsafe locking scenario:
[ 1.080042]
[ 1.080042] CPU0 CPU1
[ 1.080042] ---- ----
[ 1.080042] lock(&p->mems_allowed_seq);
[ 1.080042] local_irq_disable();
[ 1.080042] lock(&(&q->__queue_lock)->rlock);
[ 1.080042] lock(&p->mems_allowed_seq);
[ 1.080042] <Interrupt>
[ 1.080042] lock(&(&q->__queue_lock)->rlock);
[ 1.080042]
[ 1.080042] *** DEADLOCK ***
The issue stems from the kthreadd() function calling set_mems_allowed
with irqs enabled. While its possibly unlikely for the actual deadlock
to trigger, a fix is fairly simple: disable irqs before taking the
mems_allowed_seq lock.
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Li Zefan <lizefan@huawei.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Link: http://lkml.kernel.org/r/1381186321-4906-4-git-send-email-john.stultz@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
|
2013-11-06 12:40:27 +01:00 |
| .. |
|
acpi
|
ACPI / PM: Drop two functions that are not used any more
|
2013-10-17 15:44:48 +02:00 |
|
asm-generic
|
Linux 3.12-rc4
|
2013-10-09 12:36:13 +02:00 |
|
clocksource
|
ARM: SoC cleanups for 3.12
|
2013-09-06 13:21:16 -07:00 |
|
crypto
|
|
|
|
drm
|
Revert "drm: mark context support as a legacy subsystem"
|
2013-09-20 08:32:59 +10:00 |
|
dt-bindings
|
ARM: dts: Fix pinctrl mask for omap3
|
2013-10-08 10:37:29 -07:00 |
|
keys
|
|
|
|
kvm
|
ARM: KVM: vgic: Bump VGIC_NR_IRQS to 256
|
2013-08-30 16:12:39 +03:00 |
|
linux
|
cpuset: Fix potential deadlock w/ set_mems_allowed
|
2013-11-06 12:40:27 +01:00 |
|
math-emu
|
|
|
|
media
|
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
|
2013-09-05 14:54:29 -07:00 |
|
memory
|
|
|
|
misc
|
|
|
|
net
|
mac802154: correct a typo in ieee802154_alloc_device() prototype
|
2013-10-21 18:56:23 -04:00 |
|
pcmcia
|
|
|
|
ras
|
|
|
|
rdma
|
Merge branches 'cxgb4', 'flowsteer', 'ipoib', 'iser', 'mlx4', 'ocrdma' and 'qib' into for-next
|
2013-09-03 09:01:08 -07:00 |
|
rxrpc
|
|
|
|
scsi
|
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
|
2013-09-12 16:11:45 -07:00 |
|
sound
|
ASoC: rcar: fixup generation checker
|
2013-10-11 19:52:32 +01:00 |
|
target
|
target/iscsi: Bump versions to v4.1.0
|
2013-09-10 20:23:37 -07:00 |
|
trace
|
Merge branch 'sched/core' into core/locking, to prepare the kernel/locking/ file move
|
2013-11-06 07:50:37 +01:00 |
|
uapi
|
perf: Fix perf ring buffer memory ordering
|
2013-10-29 12:01:19 +01:00 |
|
video
|
fbdev changes for 3.12:
|
2013-09-05 09:49:32 -07:00 |
|
xen
|
Features:
|
2013-09-04 17:45:39 -07:00 |
|
Kbuild
|
|
|