aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt2sas/mpt2sas_scsih.c
diff options
context:
space:
mode:
authorsreekanth.reddy@lsi.com <sreekanth.reddy@lsi.com>2012-07-17 06:26:12 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-08-24 05:10:26 -0400
commit4b193175364ac2c31999f0e571df02a6b9315c8c (patch)
tree342cc887c5ed8d1b2054a67a83c5b9d9ff9f2e89 /drivers/scsi/mpt2sas/mpt2sas_scsih.c
parent8c79d6267b5dbf98e1b275e3e3b74f3467ba618a (diff)
[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: Sreekanth Reddy <sreekanth.reddy@lsi.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_scsih.c')
-rw-r--r--drivers/scsi/mpt2sas/mpt2sas_scsih.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index ab3d9d3e805f..66c773662694 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -119,6 +119,10 @@ module_param(diag_buffer_enable, int, 0);
119MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers " 119MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers "
120 "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)"); 120 "(TRACE=1/SNAPSHOT=2/EXTENDED=4/default=0)");
121 121
122static int disable_discovery = -1;
123module_param(disable_discovery, int, 0);
124MODULE_PARM_DESC(disable_discovery, " disable discovery ");
125
122/** 126/**
123 * struct sense_info - common structure for obtaining sense keys 127 * struct sense_info - common structure for obtaining sense keys
124 * @skey: sense key 128 * @skey: sense key
@@ -5973,8 +5977,14 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
5973#endif 5977#endif
5974 5978
5975 if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED && 5979 if (event_data->ReasonCode == MPI2_EVENT_SAS_DISC_RC_STARTED &&
5976 !ioc->sas_hba.num_phys) 5980 !ioc->sas_hba.num_phys) {
5981 if (disable_discovery > 0 && ioc->shost_recovery) {
5982 /* Wait for the reset to complete */
5983 while (ioc->shost_recovery)
5984 ssleep(1);
5985 }
5977 _scsih_sas_host_add(ioc); 5986 _scsih_sas_host_add(ioc);
5987 }
5978} 5988}
5979 5989
5980/** 5990/**
@@ -7929,6 +7939,9 @@ _scsih_scan_start(struct Scsi_Host *shost)
7929 if (diag_buffer_enable != -1 && diag_buffer_enable != 0) 7939 if (diag_buffer_enable != -1 && diag_buffer_enable != 0)
7930 mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable); 7940 mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable);
7931 7941
7942 if (disable_discovery > 0)
7943 return;
7944
7932 ioc->start_scan = 1; 7945 ioc->start_scan = 1;
7933 rc = mpt2sas_port_enable(ioc); 7946 rc = mpt2sas_port_enable(ioc);
7934 7947
@@ -7950,6 +7963,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
7950{ 7963{
7951 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); 7964 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
7952 7965
7966 if (disable_discovery > 0) {
7967 ioc->is_driver_loading = 0;
7968 ioc->wait_for_discovery_to_complete = 0;
7969 return 1;
7970 }
7971
7953 if (time >= (300 * HZ)) { 7972 if (time >= (300 * HZ)) {
7954 ioc->base_cmds.status = MPT2_CMD_NOT_USED; 7973 ioc->base_cmds.status = MPT2_CMD_NOT_USED;
7955 printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout " 7974 printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout "