message: Convert to host_lock less w/ interrupts disabled externally
Subsystems (2)
PATCH 5/11 message: Convert to host_lock less w/ interrupts disabled externally
From: Nicholas Bellinger <[email protected]>
This patch converts the message/fusion mptsas, mptscsih and mptspi to run in host_lock less mode with the new IRQ_DISABLE_SCSI_QCMD() that disables interrupts while calling ->queuecommand() dispatch.
Note that mptfc.c is left out as it checks libfc rport state, which for the moment still needs the host lock.
Signed-off-by Nicholas A. Bellinger <[email protected]>
--- drivers/message/fusion/mptfc.c | 2 +- drivers/message/fusion/mptsas.c | 6 +++--- drivers/message/fusion/mptscsih.c | 8 +++++--- drivers/message/fusion/mptscsih.h | 2 +- drivers/message/fusion/mptspi.c | 6 +++--- 5 files changed, 13 insertions(+), 11 deletions(-)
drivers/message/fusion/mptfc.c +1 -1
@@ -677,7 +677,7 @@ mptfc_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))return 0 ; } -return mptscsih_qcmd (SCpnt,done); +return mptscsih_qcmd (SCpnt->device->host, SCpnt); }static DEF_SCSI_QCMD (mptfc_qcmd)
drivers/message/fusion/mptsas.c +3 -3
@@ -1889,7 +1889,7 @@ mptsas_slave_alloc(struct scsi_device *sdev) }static int -mptsas_qcmd_lck (struct scsi_cmnd *SCpnt,void (*done)(struct scsi_cmnd *)) +mptsas_qcmd_irq_disable (struct scsi_cmnd *SCpnt,void (*done)(struct scsi_cmnd *)) {MPT_SCSI_HOST *hd;MPT_ADAPTER *ioc;
@@ -1910,10 +1910,10 @@ 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->device->host, SCpnt); } -static DEF_SCSI_QCMD (mptsas_qcmd) +static IRQ_DISABLE_SCSI_QCMD (mptsas_qcmd)/** * mptsas_mptsas_eh_timed_out - resets the scsi_cmnd timeout
drivers/message/fusion/mptscsih.c +5 -3
@@ -1383,7 +1383,7 @@ mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t off/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** -* mptscsih_qcmd - Primary Fusion MPT SCSI initiator IO start routine. +* mptscsih_qcmd_irq_disable - Primary Fusion MPT SCSI initiator IO start routine. * @SCpnt: Pointer to scsi_cmnd structure * @done: Pointer SCSI mid-layer IO completion function *
@@ -1393,8 +1393,8 @@ mptscsih_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t off* * Returns 0. (rtn value discarded by linux scsi mid-layer) */ -int -mptscsih_qcmd (struct scsi_cmnd *SCpnt,void (*done)(struct scsi_cmnd *)) +static int +mptscsih_qcmd_irq_disable (struct scsi_cmnd *SCpnt,void (*done)(struct scsi_cmnd *)) {MPT_SCSI_HOST *hd;MPT_FRAME_HDR *mf;
@@ -1529,6 +1529,8 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))return SCSI_MLQUEUE_HOST_BUSY ; } +IRQ_DISABLE_SCSI_QCMD (mptscsih_qcmd); +/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /* * mptscsih_freeChainBuffers - Function to free chain buffers associated
drivers/message/fusion/mptscsih.h +1 -1
@@ -113,7 +113,7 @@ extern int mptscsih_resume(struct pci_dev *pdev);#endif extern int mptscsih_proc_info (struct Scsi_Host *host,char *buffer,char **start,off_t offset,int length,int func);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_Host *sh,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);
drivers/message/fusion/mptspi.c +3 -3
@@ -780,7 +780,7 @@ 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_irq_disable (struct scsi_cmnd *SCpnt,void (*done)(struct scsi_cmnd *)) {struct _MPT_SCSI_HOST *hd =shost_priv (SCpnt->device->host);VirtDevice *vdevice = SCpnt->device->hostdata;
@@ -802,10 +802,10 @@ mptspi_qcmd_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))if (spi_dv_pending (scsi_target (SCpnt->device)))ddvprintk (ioc,scsi_print_command (SCpnt)); -return mptscsih_qcmd (SCpnt,done); +return mptscsih_qcmd (SCpnt->device->host, SCpnt); } -static DEF_SCSI_QCMD (mptspi_qcmd) +static IRQ_DISABLE_SCSI_QCMD (mptspi_qcmd) static void mptspi_slave_destroy(struct scsi_device *sdev) {
Signature · 1 line
1.7.2.3