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)
commitee41d11d53c8fc4968f0816504651541d606cf40
treec3680cf3bdcfadcf5c23088fb8b3a75a4d48b6ef
parent7c5c92ed56d932b2c19c3f8aea86369509407d33
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