Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b193175 authored by sreekanth.reddy@lsi.com's avatar sreekanth.reddy@lsi.com Committed by James Bottomley
Browse files

[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: default avatarSreekanth Reddy <sreekanth.reddy@lsi.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 8c79d626
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -119,6 +119,10 @@ module_param(diag_buffer_enable, int, 0);
MODULE_PARM_DESC(diag_buffer_enable, " post diag buffers "
	"(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
 * @skey: sense key
@@ -5973,9 +5977,15 @@ _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc,
#endif

	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_reprobe_lun - reprobing lun
@@ -7929,6 +7939,9 @@ _scsih_scan_start(struct Scsi_Host *shost)
	if (diag_buffer_enable != -1 && diag_buffer_enable != 0)
		mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable);

	if (disable_discovery > 0)
		return;

	ioc->start_scan = 1;
	rc = mpt2sas_port_enable(ioc);

@@ -7950,6 +7963,12 @@ _scsih_scan_finished(struct Scsi_Host *shost, unsigned long time)
{
	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)) {
		ioc->base_cmds.status = MPT2_CMD_NOT_USED;
		printk(MPT2SAS_INFO_FMT "port enable: FAILED with timeout "