]> git.baikalelectronics.ru Git - kernel.git/commit
cxl: Change contexts_lock to a mutex to fix sleep while atomic bug
authorIan Munsie <imunsie@au1.ibm.com>
Mon, 8 Dec 2014 08:17:55 +0000 (19:17 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 12 Dec 2014 02:06:47 +0000 (13:06 +1100)
commit49555a92387b865ce9aabf67996ce7ab79d9fc88
treec3680cf3bdcfadcf5c23088fb8b3a75a4d48b6ef
parentc051eb8d6bc4ec033d8eee667a1586bbe08c8253
cxl: Change contexts_lock to a mutex to fix sleep while atomic bug

We had a known sleep while atomic bug if a CXL device was forcefully
unbound while it was in use. This could occur as a result of EEH, or
manually induced with something like this while the device was in use:

echo 0000:01:00.0 > /sys/bus/pci/drivers/cxl-pci/unbind

The issue was that in this code path we iterated over each context and
forcefully detached it with the contexts_lock spin lock held, however
the detach also needed to take the spu_mutex, and call schedule.

This patch changes the contexts_lock to a mutex so that we are not in
atomic context while doing the detach, thereby avoiding the sleep while
atomic.

Also delete the related TODO comment, which suggested an alternate
solution which turned out to not be workable.

Cc: stable@vger.kernel.org
Signed-off-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/cxl/context.c
drivers/misc/cxl/cxl.h
drivers/misc/cxl/native.c
drivers/misc/cxl/pci.c
drivers/misc/cxl/sysfs.c