aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ipr.h
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2015-03-26 12:23:50 -0400
committerJames Bottomley <JBottomley@Odin.com>2015-04-09 16:42:07 -0400
commit4fdd7c7aabbec3aa9e5dc41c129bc9f6aed7e615 (patch)
tree5bbd1cf3dacd2f7428aa56b04358acaee41e60ec /drivers/scsi/ipr.h
parentbe0cf6ca301c61458dc4aa1a37acf4f58d2ed3d6 (diff)
ipr: Reboot speed improvements
Currently when performing a reboot with an ipr adapter, the adapter gets shutdown completely, flushing all write cache, as well as performing a full hardware reset of the card during the shutdown phase of the old kernel. This ensures the adapter is in a fully quiesced state across the reboot. There are scenarios, however, such as when performing kexec, where this full adapter shutdown is not required and not desired, since it can make the reboot process take noticeably longer. This patch adds a module parameter to allow for skipping the full shutdown during reboot. Rather than performing a full adapter shutdown and reset, we simply cancel any outstanding error buffers, place the adapter into a state where it has no memory of any DMA addresses from the old kernel, then disable the device. This significantly speeds up kexec boot, particularly in configurations with multiple ipr adapters. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Reviewed-by: Wen Xiong <wenxiong@linux.vnet.ibm.com> Reviewed-by: Daniel Kreling <kreling@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
Diffstat (limited to 'drivers/scsi/ipr.h')
-rw-r--r--drivers/scsi/ipr.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index ec03b42fa2b9..34eec5bcdce0 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -196,6 +196,8 @@
196/* 196/*
197 * Adapter Commands 197 * Adapter Commands
198 */ 198 */
199#define IPR_CANCEL_REQUEST 0xC0
200#define IPR_CANCEL_64BIT_IOARCB 0x01
199#define IPR_QUERY_RSRC_STATE 0xC2 201#define IPR_QUERY_RSRC_STATE 0xC2
200#define IPR_RESET_DEVICE 0xC3 202#define IPR_RESET_DEVICE 0xC3
201#define IPR_RESET_TYPE_SELECT 0x80 203#define IPR_RESET_TYPE_SELECT 0x80
@@ -222,6 +224,7 @@
222#define IPR_ABBREV_SHUTDOWN_TIMEOUT (10 * HZ) 224#define IPR_ABBREV_SHUTDOWN_TIMEOUT (10 * HZ)
223#define IPR_DUAL_IOA_ABBR_SHUTDOWN_TO (2 * 60 * HZ) 225#define IPR_DUAL_IOA_ABBR_SHUTDOWN_TO (2 * 60 * HZ)
224#define IPR_DEVICE_RESET_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ) 226#define IPR_DEVICE_RESET_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ)
227#define IPR_CANCEL_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ)
225#define IPR_CANCEL_ALL_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ) 228#define IPR_CANCEL_ALL_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ)
226#define IPR_ABORT_TASK_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ) 229#define IPR_ABORT_TASK_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ)
227#define IPR_INTERNAL_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ) 230#define IPR_INTERNAL_TIMEOUT (ipr_fastfail ? 10 * HZ : 30 * HZ)
@@ -1402,7 +1405,8 @@ enum ipr_shutdown_type {
1402 IPR_SHUTDOWN_NORMAL = 0x00, 1405 IPR_SHUTDOWN_NORMAL = 0x00,
1403 IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 0x40, 1406 IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 0x40,
1404 IPR_SHUTDOWN_ABBREV = 0x80, 1407 IPR_SHUTDOWN_ABBREV = 0x80,
1405 IPR_SHUTDOWN_NONE = 0x100 1408 IPR_SHUTDOWN_NONE = 0x100,
1409 IPR_SHUTDOWN_QUIESCE = 0x101,
1406}; 1410};
1407 1411
1408struct ipr_trace_entry { 1412struct ipr_trace_entry {