1
0
Fork 0
alistair23-linux/drivers/misc/cxl
Daniel Axtens 0b3f9c757c cxl: Drop commands if the PCI channel is not in normal state
If the PCI channel has gone down, don't attempt to poke the hardware.

We need to guard every time cxl_whatever_(read|write) is called. This
is because a call to those functions will dereference an offset into an
mmio register, and the mmio mappings get invalidated in the EEH
teardown.

Check in the read/write functions in the header.
We give them the same semantics as usual PCI operations:
 - a write to a channel that is down is ignored.
 - a read from a channel that is down returns all fs.

Also, we try to access the MMIO space of a vPHB device as part of the
PCI disable path. Because that's a read that bypasses most of our usual
checks, we handle it explicitly.

As far as user visible warnings go:
 - Check link state in file ops, return -EIO if down.
 - Be reasonably quiet if there's an error in a teardown path,
   or when we already know the hardware is going down.
 - Throw a big WARN if someone tries to start a CXL operation
   while the card is down. This gives a useful stacktrace for
   debugging whatever is doing that.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2015-08-14 21:32:03 +10:00
..
Kconfig cxl: Add CXL_KERNEL_API config option 2015-06-19 17:10:30 +10:00
Makefile cxl: Compile with -Werror 2015-08-11 07:43:40 +10:00
api.c cxl: Fix refcounting in kernel API 2015-07-07 19:38:37 +10:00
base.c cxl: Move include file cxl.h -> cxl-base.h 2015-06-03 13:27:19 +10:00
context.c cxl: Drop commands if the PCI channel is not in normal state 2015-08-14 21:32:03 +10:00
cxl.h cxl: Drop commands if the PCI channel is not in normal state 2015-08-14 21:32:03 +10:00
debugfs.c cxl: sparse: Silence iomem warning in debugfs file creation 2015-08-12 14:49:29 +10:00
fault.c cxl: Only check pid for userspace contexts 2015-06-03 13:27:18 +10:00
file.c cxl: Drop commands if the PCI channel is not in normal state 2015-08-14 21:32:03 +10:00
irq.c cxl: sparse: Make declarations static 2015-08-12 14:49:09 +10:00
main.c cxl: Destroy cxl_adapter_idr on module_exit 2015-07-16 14:14:55 +10:00
native.c cxl: Drop commands if the PCI channel is not in normal state 2015-08-14 21:32:03 +10:00
pci.c cxl: Destroy afu->contexts_idr on release of an afu 2015-07-16 14:15:07 +10:00
sysfs.c cxl: cxl_afu_reset() -> __cxl_afu_reset() 2015-06-03 13:27:18 +10:00
trace.c cxl: Add tracepoints 2015-01-22 17:31:51 +11:00
trace.h cxl: use more common format specifier 2015-07-13 10:10:54 +10:00
vphb.c cxl: Drop commands if the PCI channel is not in normal state 2015-08-14 21:32:03 +10:00