diff options
Diffstat (limited to 'drivers/message/fusion')
| -rw-r--r-- | drivers/message/fusion/mptbase.c | 4 | ||||
| -rw-r--r-- | drivers/message/fusion/mptctl.c | 6 | ||||
| -rw-r--r-- | drivers/message/fusion/mptfc.c | 12 | ||||
| -rw-r--r-- | drivers/message/fusion/mptsas.c | 18 | ||||
| -rw-r--r-- | drivers/message/fusion/mptscsih.c | 8 | ||||
| -rw-r--r-- | drivers/message/fusion/mptscsih.h | 2 | ||||
| -rw-r--r-- | drivers/message/fusion/mptspi.c | 12 | 
7 files changed, 27 insertions, 35 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 767ff4d839f..ebc0af7d769 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c @@ -346,7 +346,7 @@ static int mpt_remove_dead_ioc_func(void *arg)  	if ((pdev == NULL))  		return -1; -	pci_stop_and_remove_bus_device(pdev); +	pci_stop_and_remove_bus_device_locked(pdev);  	return 0;  } @@ -1037,7 +1037,7 @@ mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf)  		goto out;  	/* signature to know if this mf is freed */  	mf->u.frame.linkage.arg1 = cpu_to_le32(0xdeadbeaf); -	list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ); +	list_add(&mf->u.frame.linkage.list, &ioc->FreeQ);  #ifdef MFCNT  	ioc->mfcnt--;  #endif diff --git a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c index dcc8385adeb..8a050e88568 100644 --- a/drivers/message/fusion/mptctl.c +++ b/drivers/message/fusion/mptctl.c @@ -2432,9 +2432,9 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)  	int			rc, cim_rev;  	ToolboxIstwiReadWriteRequest_t	*IstwiRWRequest;  	MPT_FRAME_HDR		*mf = NULL; -	MPIHeader_t		*mpi_hdr;  	unsigned long		timeleft;  	int			retval; +	u32			msgcontext;  	/* Reset long to int. Should affect IA64 and SPARC only  	 */ @@ -2581,11 +2581,11 @@ mptctl_hp_hostinfo(unsigned long arg, unsigned int data_size)  	}  	IstwiRWRequest = (ToolboxIstwiReadWriteRequest_t *)mf; -	mpi_hdr = (MPIHeader_t *) mf; +	msgcontext = IstwiRWRequest->MsgContext;  	memset(IstwiRWRequest,0,sizeof(ToolboxIstwiReadWriteRequest_t)); +	IstwiRWRequest->MsgContext = msgcontext;  	IstwiRWRequest->Function = MPI_FUNCTION_TOOLBOX;  	IstwiRWRequest->Tool = MPI_TOOLBOX_ISTWI_READ_WRITE_TOOL; -	IstwiRWRequest->MsgContext = mpi_hdr->MsgContext;  	IstwiRWRequest->Flags = MPI_TB_ISTWI_FLAGS_READ;  	IstwiRWRequest->NumAddressBytes = 0x01;  	IstwiRWRequest->DataLength = cpu_to_le16(0x04); diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c index fd75108c355..02a3eefd693 100644 --- a/drivers/message/fusion/mptfc.c +++ b/drivers/message/fusion/mptfc.c @@ -649,7 +649,7 @@ mptfc_slave_alloc(struct scsi_device *sdev)  }  static int -mptfc_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) +mptfc_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt)  {  	struct mptfc_rport_info	*ri;  	struct fc_rport	*rport = starget_to_rport(scsi_target(SCpnt->device)); @@ -658,14 +658,14 @@ mptfc_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))  	if (!vdevice || !vdevice->vtarget) {  		SCpnt->result = DID_NO_CONNECT << 16; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	}  	err = fc_remote_port_chkready(rport);  	if (unlikely(err)) {  		SCpnt->result = err; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	} @@ -673,15 +673,13 @@ mptfc_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))  	ri = *((struct mptfc_rport_info **)rport->dd_data);  	if (unlikely(!ri)) {  		SCpnt->result = DID_IMM_RETRY << 16; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	} -	return mptscsih_qcmd(SCpnt,done); +	return mptscsih_qcmd(SCpnt);  } -static DEF_SCSI_QCMD(mptfc_qcmd) -  /*   *	mptfc_display_port_link_speed - displaying link speed   *	@ioc: Pointer to MPT_ADAPTER structure diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index dd239bdbfcb..711fcb5cec8 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c @@ -1896,7 +1896,7 @@ mptsas_slave_alloc(struct scsi_device *sdev)  }  static int -mptsas_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) +mptsas_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt)  {  	MPT_SCSI_HOST	*hd;  	MPT_ADAPTER	*ioc; @@ -1904,11 +1904,11 @@ mptsas_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))  	if (!vdevice || !vdevice->vtarget || vdevice->vtarget->deleted) {  		SCpnt->result = DID_NO_CONNECT << 16; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	} -	hd = shost_priv(SCpnt->device->host); +	hd = shost_priv(shost);  	ioc = hd->ioc;  	if (ioc->sas_discovery_quiesce_io) @@ -1917,11 +1917,9 @@ mptsas_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))  	if (ioc->debug_level & MPT_DEBUG_SCSI)  		scsi_print_command(SCpnt); -	return mptscsih_qcmd(SCpnt,done); +	return mptscsih_qcmd(SCpnt);  } -static DEF_SCSI_QCMD(mptsas_qcmd) -  /**   *	mptsas_mptsas_eh_timed_out - resets the scsi_cmnd timeout   *		if the device under question is currently in the @@ -2235,10 +2233,10 @@ static int mptsas_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	}  	/* do we need to support multiple segments? */ -	if (bio_segments(req->bio) > 1 || bio_segments(rsp->bio) > 1) { -		printk(MYIOC_s_ERR_FMT "%s: multiple segments req %u %u, rsp %u %u\n", -		    ioc->name, __func__, bio_segments(req->bio), blk_rq_bytes(req), -		    bio_segments(rsp->bio), blk_rq_bytes(rsp)); +	if (bio_multiple_segments(req->bio) || +	    bio_multiple_segments(rsp->bio)) { +		printk(MYIOC_s_ERR_FMT "%s: multiple segments req %u, rsp %u\n", +		    ioc->name, __func__, blk_rq_bytes(req), blk_rq_bytes(rsp));  		return -EINVAL;  	} diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 727819cc703..2a1c6f21af2 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c @@ -1304,7 +1304,6 @@ int mptscsih_show_info(struct seq_file *m, struct Scsi_Host *host)  /**   *	mptscsih_qcmd - Primary Fusion MPT SCSI initiator IO start routine.   *	@SCpnt: Pointer to scsi_cmnd structure - *	@done: Pointer SCSI mid-layer IO completion function   *   *	(linux scsi_host_template.queuecommand routine)   *	This is the primary SCSI IO start routine.  Create a MPI SCSIIORequest @@ -1313,7 +1312,7 @@ int mptscsih_show_info(struct seq_file *m, struct Scsi_Host *host)   *	Returns 0. (rtn value discarded by linux scsi mid-layer)   */  int -mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) +mptscsih_qcmd(struct scsi_cmnd *SCpnt)  {  	MPT_SCSI_HOST		*hd;  	MPT_FRAME_HDR		*mf; @@ -1329,10 +1328,9 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))  	hd = shost_priv(SCpnt->device->host);  	ioc = hd->ioc; -	SCpnt->scsi_done = done; -	dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "qcmd: SCpnt=%p, done()=%p\n", -		ioc->name, SCpnt, done)); +	dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "qcmd: SCpnt=%p\n", +		ioc->name, SCpnt));  	if (ioc->taskmgmt_quiesce_io)  		return SCSI_MLQUEUE_HOST_BUSY; diff --git a/drivers/message/fusion/mptscsih.h b/drivers/message/fusion/mptscsih.h index 83f503162f7..99e3390807f 100644 --- a/drivers/message/fusion/mptscsih.h +++ b/drivers/message/fusion/mptscsih.h @@ -113,7 +113,7 @@ extern int mptscsih_resume(struct pci_dev *pdev);  #endif  extern int mptscsih_show_info(struct seq_file *, struct Scsi_Host *);  extern const char * mptscsih_info(struct Scsi_Host *SChost); -extern int mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)); +extern int mptscsih_qcmd(struct scsi_cmnd *SCpnt);  extern int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 type, u8 channel,  	u8 id, int lun, int ctx2abort, ulong timeout);  extern void mptscsih_slave_destroy(struct scsi_device *device); diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c index 5653e505f91..49d11338294 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c @@ -780,33 +780,31 @@ static int mptspi_slave_configure(struct scsi_device *sdev)  }  static int -mptspi_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) +mptspi_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *SCpnt)  { -	struct _MPT_SCSI_HOST *hd = shost_priv(SCpnt->device->host); +	struct _MPT_SCSI_HOST *hd = shost_priv(shost);  	VirtDevice	*vdevice = SCpnt->device->hostdata;  	MPT_ADAPTER *ioc = hd->ioc;  	if (!vdevice || !vdevice->vtarget) {  		SCpnt->result = DID_NO_CONNECT << 16; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	}  	if (SCpnt->device->channel == 1 &&  		mptscsih_is_phys_disk(ioc, 0, SCpnt->device->id) == 0) {  		SCpnt->result = DID_NO_CONNECT << 16; -		done(SCpnt); +		SCpnt->scsi_done(SCpnt);  		return 0;  	}  	if (spi_dv_pending(scsi_target(SCpnt->device)))  		ddvprintk(ioc, scsi_print_command(SCpnt)); -	return mptscsih_qcmd(SCpnt,done); +	return mptscsih_qcmd(SCpnt);  } -static DEF_SCSI_QCMD(mptspi_qcmd) -  static void mptspi_slave_destroy(struct scsi_device *sdev)  {  	struct scsi_target *starget = scsi_target(sdev);  | 
