diff options
| author | Kashyap, Desai <kashyap.desai@lsi.com> | 2009-09-14 11:04:23 +0530 | 
|---|---|---|
| committer | James Bottomley <James.Bottomley@suse.de> | 2009-10-02 09:48:38 -0500 | 
| commit | 77e63ed44305e89c0564f8292f9cd5764d4fddfb (patch) | |
| tree | 66aab9af95be1daadf6e648b008f9c1d77cf1ac0 /drivers/scsi/mpt2sas/mpt2sas_transport.c | |
| parent | 595bb0bd62edb28a965993d90e0fa1285560ce53 (diff) | |
| download | olio-linux-3.10-77e63ed44305e89c0564f8292f9cd5764d4fddfb.tar.xz olio-linux-3.10-77e63ed44305e89c0564f8292f9cd5764d4fddfb.zip  | |
[SCSI] mpt2sas: Target Reset will be issued from Interrupt context.
(1) Added three new functions to handle sending target resest and OP_REMOVE
from interrupt time, they are _scsih_tm_tr_send, _scsih_tm_tr_complete, and
_scsih_sas_control_complete.  This code will create a link list of pending
target resets if there is no more available request in the hipriority
request queue.  The list is stored in ioc->delayed_tr_list.
(2) All callback handler return type is changed from void to u8.
Now _base_interrupt will check for return type of callback handlers to
take decision of message frame is already freed or not.
In genral,
Return 1 meaning mf should be freed from _base_interrupt
       0 means the mf is freed from function.
Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/mpt2sas/mpt2sas_transport.c')
| -rw-r--r-- | drivers/scsi/mpt2sas/mpt2sas_transport.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/mpt2sas/mpt2sas_transport.c b/drivers/scsi/mpt2sas/mpt2sas_transport.c index 4b7201a1e86..8bc57e315ce 100644 --- a/drivers/scsi/mpt2sas/mpt2sas_transport.c +++ b/drivers/scsi/mpt2sas/mpt2sas_transport.c @@ -218,9 +218,10 @@ _transport_set_identify(struct MPT2SAS_ADAPTER *ioc, u16 handle,   * Callback handler when sending internal generated transport cmds.   * The callback index passed is `ioc->transport_cb_idx`   * - * Return nothing. + * Return 1 meaning mf should be freed from _base_interrupt + *        0 means the mf is freed from this function.   */ -void +u8  mpt2sas_transport_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,      u32 reply)  { @@ -228,9 +229,9 @@ mpt2sas_transport_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,  	mpi_reply =  mpt2sas_base_get_reply_virt_addr(ioc, reply);  	if (ioc->transport_cmds.status == MPT2_CMD_NOT_USED) -		return; +		return 1;  	if (ioc->transport_cmds.smid != smid) -		return; +		return 1;  	ioc->transport_cmds.status |= MPT2_CMD_COMPLETE;  	if (mpi_reply) {  		memcpy(ioc->transport_cmds.reply, mpi_reply, @@ -239,6 +240,7 @@ mpt2sas_transport_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,  	}  	ioc->transport_cmds.status &= ~MPT2_CMD_PENDING;  	complete(&ioc->transport_cmds.done); +	return 1;  }  /* report manufacture request structure */  |