提交 4b193175 编写于 作者: S sreekanth.reddy@lsi.com 提交者: James Bottomley

[SCSI] mpt2sas: Fix for staged device discovery functionality of driver not working

This patch provides a command line option to disable "Port enable" during
the driver load.

The objective of this command line option is to load the driver and do
all the necessary initialization excluding port enable(i.e. delay
device discovery)
Signed-off-by: NSreekanth Reddy <sreekanth.reddy@lsi.com>
Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
上级 8c79d626
...@@ -119,6 +119,10 @@ module_param(diag_buffer_enable, int, 0); ...@@ -119,6 +119,10 @@ module_param(diag_buffer_enable, int, 0);
MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers " MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers "
"(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)"); "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)");
static int disable_discovery = -1;
module_param(disable_discovery, int, 0);
MODULE_PARM_DESC(disable_discovery, " disable discovery ");
/** /**
* struct sense_info - common structure for obtaining sense keys * struct sense_info - common structure for obtaining sense keys
* @skey: sense key * @skey: sense key
...@@ -5973,8 +5977,14 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc, ...@@ -5973,8 +5977,14 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
#endif #endif
if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED && if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED &&
!ioc->sas_hba.num_phys) !ioc->sas_hba.num_phys) {
if (disable_discovery > 0 && ioc->shost_recovery) {
/* Wait for the reset to complete */
while (ioc->shost_recovery)
ssleep(1);
}
_scsih_sas_host_add(ioc); _scsih_sas_host_add(ioc);
}
} }
/** /**
...@@ -7929,6 +7939,9 @@ _scsih_scan_start(struct Scsi_Host *shost) ...@@ -7929,6 +7939,9 @@ _scsih_scan_start(struct Scsi_Host *shost)
if (diag_buffer_enable != -1 && diag_buffer_enable != 0) if (diag_buffer_enable != -1 && diag_buffer_enable != 0)
mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable); mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable);
if (disable_discovery > 0)
return;
ioc->start_scan = 1; ioc->start_scan = 1;
rc = mpt2sas_port_enable(ioc); rc = mpt2sas_port_enable(ioc);
...@@ -7950,6 +7963,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time) ...@@ -7950,6 +7963,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
{ {
struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
if (disable_discovery > 0) {
ioc->is_driver_loading = 0;
ioc->wait_for_discovery_to_complete = 0;
return 1;
}
if (time >= (300 * HZ)) { if (time >= (300 * HZ)) {
ioc->base_cmds.status = MPT2_CMD_NOT_USED; ioc->base_cmds.status = MPT2_CMD_NOT_USED;
printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout " printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout "
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册