linux-stable/drivers/scsi/cxlflash
Manoj Kumar b45cdbaf9f cxlflash: Resolve oops in wait_port_offline
If an async error interrupt is generated, and the error requires the FC
link to be reset, it cannot be performed in the interrupt context. So a
work element is scheduled to complete the link reset in a process
context. If either an EEH event or an escalation occurs in between when
the interrupt is generated and the scheduled work is started, the MMIO
space may no longer be available. This will cause an oops in the worker
thread.

[  606.806583] NIP kthread_data+0x28/0x40
[  606.806633] LR wq_worker_sleeping+0x30/0x100
[  606.806694] Call Trace:
[  606.806721] 0x50 (unreliable)
[  606.806796] wq_worker_sleeping+0x30/0x100
[  606.806884] __schedule+0x69c/0x8a0
[  606.806959] schedule+0x44/0xc0
[  606.807034] do_exit+0x770/0xb90
[  606.807109] die+0x300/0x460
[  606.807185] bad_page_fault+0xd8/0x150
[  606.807259] handle_page_fault+0x2c/0x30
[  606.807338] wait_port_offline.constprop.12+0x60/0x130 [cxlflash]

To prevent the problem space area from being unmapped, when there is
pending work, a mapcount (using the kref mechanism) is held.  The
mapcount is released only when the work is completed.  The last
reference release is tied to the unmapping service.

Signed-off-by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>
Acked-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Reviewed-by: Uma Krishnan <ukrishn@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2016-01-06 20:55:01 -05:00
..
common.h cxlflash: Resolve oops in wait_port_offline 2016-01-06 20:55:01 -05:00
Kconfig
lunmgt.c cxlflash: Fix to avoid corrupting port selection mask 2015-10-30 17:23:55 +09:00
main.c cxlflash: Resolve oops in wait_port_offline 2016-01-06 20:55:01 -05:00
main.h cxlflash: Removed driver date print 2016-01-06 20:51:14 -05:00
Makefile cxlflash: Virtual LUN support 2015-08-26 18:05:39 -07:00
sislite.h cxlflash: Correct spelling, grammar, and alignment mistakes 2015-10-30 17:18:28 +09:00
superpipe.c cxlflash: drop unlikely before IS_ERR_OR_NULL 2015-12-10 12:55:37 -05:00
superpipe.h cxlflash: Fix to avoid corrupting port selection mask 2015-10-30 17:23:55 +09:00
vlun.c cxlflash: Fix to avoid virtual LUN failover failure 2016-01-06 20:50:08 -05:00
vlun.h cxlflash: Virtual LUN support 2015-08-26 18:05:39 -07:00