fusion: streamline ->queuecommand
Subsystems (2)
PATCH 1/1 fusion: streamline ->queuecommand
drivers/message/fusion/mptscsih.c +53 -63
@@ -1863,11 +1844,7 @@u32 cmd_len;int my_idx;int ii; -int rc; -int did_errcode; -int issueCmd; - did_errcode =0 ; hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata; target = SCpnt->device->id; lun = SCpnt->device->lun;
@@ -1966,84 +1943,78 @@/* Now add the SG list * Always have a SGE even if null length. */ - rc =SUCCESS ;if (datalen ==0 ) {/* Add a NULL SGE */ mptscsih_add_sge ((char *)&pScsiReq->SGL,MPT_SGE_FLAGS_SSIMPLE_READ |0 , (dma_addr_t) -1 ); }else {/* Add a 32 or 64 bit SGE */ - rc =mptscsih_AddSGE (hd->ioc, SCpnt, pScsiReq, my_idx); +if (mptscsih_AddSGE (hd->ioc, SCpnt, pScsiReq, my_idx) !=SUCCESS ) + goto fail; } - -if (rc ==SUCCESS ) { - hd->ScsiLookup[my_idx] = SCpnt; - SCpnt->host_scribble =NULL ; - -/* SCSI specific processing */ - issueCmd =1 ; -if (hd->is_spi) { -int dvStatus = hd->ioc->spi_data.dvStatus[target]; - -if (dvStatus || hd->ioc->spi_data.forceDv) { + hd->ScsiLookup[my_idx] = SCpnt; + SCpnt->host_scribble =NULL ;#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION -if ((dvStatus &MPT_SCSICFG_NEED_DV ) || - (hd->ioc->spi_data.forceDv &MPT_SCSICFG_NEED_DV )) { -unsigned long lflags; -/* Schedule DV if necessary */ -spin_lock_irqsave (&dvtaskQ_lock, lflags); -if (!dvtaskQ_active) { - dvtaskQ_active =1 ; -spin_unlock_irqrestore (&dvtaskQ_lock, lflags); -INIT_WORK (&mptscsih_dvTask, mptscsih_domainValidation, (void *) hd); - -schedule_work (&mptscsih_dvTask); - }else { -spin_unlock_irqrestore (&dvtaskQ_lock, lflags); - } - hd->ioc->spi_data.forceDv &= ~MPT_SCSICFG_NEED_DV ; - } - -/* Trying to do DV to this target, extend timeout. -* Wait to issue until flag is clear -*/ -if (dvStatus &MPT_SCSICFG_DV_PENDING ) { -mod_timer (&SCpnt->eh_timeout, jiffies +40 *HZ ); - issueCmd =0 ; +if (hd->is_spi) { +int dvStatus = hd->ioc->spi_data.dvStatus[target]; +int issueCmd =1 ; + +if (dvStatus || hd->ioc->spi_data.forceDv) { + +if ((dvStatus &MPT_SCSICFG_NEED_DV ) || + (hd->ioc->spi_data.forceDv &MPT_SCSICFG_NEED_DV )) { +unsigned long lflags; +/* Schedule DV if necessary */ +spin_lock_irqsave (&dvtaskQ_lock, lflags); +if (!dvtaskQ_active) { + dvtaskQ_active =1 ; +spin_unlock_irqrestore (&dvtaskQ_lock, lflags); +INIT_WORK (&mptscsih_dvTask, mptscsih_domainValidation, (void *) hd); + +schedule_work (&mptscsih_dvTask); + }else { +spin_unlock_irqrestore (&dvtaskQ_lock, lflags); } + hd->ioc->spi_data.forceDv &= ~MPT_SCSICFG_NEED_DV ; + } -/* Set the DV flags. -*/ -if (dvStatus &MPT_SCSICFG_DV_NOT_DONE ) -mptscsih_set_dvflags (hd, pScsiReq); -#endif +/* Trying to do DV to this target, extend timeout. +* Wait to issue until flag is clear +*/ +if (dvStatus &MPT_SCSICFG_DV_PENDING ) { +mod_timer (&SCpnt->eh_timeout, jiffies +40 *HZ ); + issueCmd =0 ; } - } -#ifdef MPTSCSIH_DBG_TIMEOUT -if (hd->ioc->timeout_cnt < hd->ioc->timeout_maxcnt) { - foo_to[hd->ioc->timeout_cnt] = SCpnt; - hd->ioc->timeout_cnt++; -//mod_timer(&SCpnt->eh_timeout, jiffies + hd->ioc->timeout_delta); - issueCmd =0 ; -printk (MYIOC_s_WARN_FMT -"to pendingQ: (sc=%p, mf=%p, time=%ld)\n" , - hd->ioc->name, SCpnt, mf, jiffies); +/* Set the DV flags. +*/ +if (dvStatus &MPT_SCSICFG_DV_NOT_DONE ) +mptscsih_set_dvflags (hd, pScsiReq); + +if (!issueCmd) + goto fail; } + }#endif -if (issueCmd) { -mpt_put_msg_frame (ScsiDoneCtx, hd->ioc, mf); -dmfprintk ((MYIOC_s_INFO_FMT"Issued SCSI cmd (%p) mf=%p idx=%d\n" , - hd->ioc->name, SCpnt, mf, my_idx)); - DBG_DUMP_REQUEST_FRAME(mf) - }else - goto fail; - }else +#ifdef MPTSCSIH_DBG_TIMEOUT +if (hd->ioc->timeout_cnt < hd->ioc->timeout_maxcnt) { + foo_to[hd->ioc->timeout_cnt] = SCpnt; + hd->ioc->timeout_cnt++; +//mod_timer(&SCpnt->eh_timeout, jiffies + hd->ioc->timeout_delta); +printk (MYIOC_s_WARN_FMT +"to pendingQ: (sc=%p, mf=%p, time=%ld)\n" , + hd->ioc->name, SCpnt, mf, jiffies); goto fail; + } +#endif +mpt_put_msg_frame (ScsiDoneCtx, hd->ioc, mf); +dmfprintk ((MYIOC_s_INFO_FMT"Issued SCSI cmd (%p) mf=%p idx=%d\n" , + hd->ioc->name, SCpnt, mf, my_idx)); +DBG_DUMP_REQUEST_FRAME (mf) return 0; fail:
Quoted 4 lines · Christoph Hellwig
drivers/message/fusion/mptscsih.c +0
-0@@ -1863,11 +1844,7 @@
drivers/message/fusion/mptscsih.c line 1969
Quoted 10 lines
drivers/message/fusion/mptscsih.c +9
-0#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION +int dvStatus = hd->ioc->spi_data.dvStatus[target]; +int issueCmd =1 ; + +if (dvStatus || hd->ioc->spi_data.forceDv) { + +if ((dvStatus &MPT_SCSICFG_NEED_DV ) || + (hd->ioc->spi_data.forceDv &MPT_SCSICFG_NEED_DV )) { +unsigned long lflags; +/* Schedule DV if necessary */
Of course, at some point, Fusion should be switched over to use the scsi_transport_spi domain validation code ... not urgent, just an item for the long-term todo list.
Signature · 6 lines
"Next the statesmen will invent cheap lies, putting the blame upon the nation that is attacked, and every man will be glad of those conscience-soothing falsities, and will diligently study them, and refuse to examine any refutations of them; and thus he will by and by convince himself that the war is just, and will thank God for the better sleep he enjoys after this process of grotesque self-deception." -- Mark Twain
Quoted 3 lines · Matthew Wilcox
Of course, at some point, Fusion should be switched over to use the
scsi_transport_spidomain validation code ... not urgent, just an item for the long-term todo list.
absolutely. Also the dv threaad handling in fusion is rather bogus, and moving to the genric one would fix that nicely.
ping?
Quoted 154 lines · Christoph Hellwig
drivers/message/fusion/mptscsih.c +53
-64@@ -1863,11 +1844,7 @@u32 cmd_len;int my_idx;int ii; -int rc; -int did_errcode; -int issueCmd; - did_errcode =0 ; hd = (MPT_SCSI_HOST *) SCpnt->device->host->hostdata; target = SCpnt->device->id; lun = SCpnt->device->lun;@@ -1966,84 +1943,78 @@/* Now add the SG list * Always have a SGE even if null length. */ - rc =SUCCESS ;if (datalen ==0 ) {/* Add a NULL SGE */ mptscsih_add_sge ((char *)&pScsiReq->SGL,MPT_SGE_FLAGS_SSIMPLE_READ |0 , (dma_addr_t) -1 ); }else {/* Add a 32 or 64 bit SGE */ - rc =mptscsih_AddSGE (hd->ioc, SCpnt, pScsiReq, my_idx); +if (mptscsih_AddSGE (hd->ioc, SCpnt, pScsiReq, my_idx) !=SUCCESS ) + goto fail; } - -if (rc ==SUCCESS ) { - hd->ScsiLookup[my_idx] = SCpnt; - SCpnt->host_scribble =NULL ; - -/* SCSI specific processing */ - issueCmd =1 ; -if (hd->is_spi) { -int dvStatus = hd->ioc->spi_data.dvStatus[target]; - -if (dvStatus || hd->ioc->spi_data.forceDv) { + hd->ScsiLookup[my_idx] = SCpnt; + SCpnt->host_scribble =NULL ;#ifdef MPTSCSIH_ENABLE_DOMAIN_VALIDATION -if ((dvStatus &MPT_SCSICFG_NEED_DV ) || - (hd->ioc->spi_data.forceDv &MPT_SCSICFG_NEED_DV )) { -unsigned long lflags; -/* Schedule DV if necessary */ -spin_lock_irqsave (&dvtaskQ_lock, lflags); -if (!dvtaskQ_active) { - dvtaskQ_active =1 ; -spin_unlock_irqrestore (&dvtaskQ_lock, lflags); -INIT_WORK (&mptscsih_dvTask, mptscsih_domainValidation, (void *) hd); - -schedule_work (&mptscsih_dvTask); - }else { -spin_unlock_irqrestore (&dvtaskQ_lock, lflags); - } - hd->ioc->spi_data.forceDv &= ~MPT_SCSICFG_NEED_DV ; - } - -/* Trying to do DV to this target, extend timeout. -* Wait to issue until flag is clear -*/ -if (dvStatus &MPT_SCSICFG_DV_PENDING ) { -mod_timer (&SCpnt->eh_timeout, jiffies +40 *HZ ); - issueCmd =0 ; +if (hd->is_spi) { +int dvStatus = hd->ioc->spi_data.dvStatus[target]; +int issueCmd =1 ; + +if (dvStatus || hd->ioc->spi_data.forceDv) { + +if ((dvStatus &MPT_SCSICFG_NEED_DV ) || + (hd->ioc->spi_data.forceDv &MPT_SCSICFG_NEED_DV )) { +unsigned long lflags; +/* Schedule DV if necessary */ +spin_lock_irqsave (&dvtaskQ_lock, lflags); +if (!dvtaskQ_active) { + dvtaskQ_active =1 ; +spin_unlock_irqrestore (&dvtaskQ_lock, lflags); +INIT_WORK (&mptscsih_dvTask, mptscsih_domainValidation, (void *) hd); + +schedule_work (&mptscsih_dvTask); + }else { +spin_unlock_irqrestore (&dvtaskQ_lock, lflags); } + hd->ioc->spi_data.forceDv &= ~MPT_SCSICFG_NEED_DV ; + } -/* Set the DV flags. -*/ -if (dvStatus &MPT_SCSICFG_DV_NOT_DONE ) -mptscsih_set_dvflags (hd, pScsiReq); -#endif +/* Trying to do DV to this target, extend timeout. +* Wait to issue until flag is clear +*/ +if (dvStatus &MPT_SCSICFG_DV_PENDING ) { +mod_timer (&SCpnt->eh_timeout, jiffies +40 *HZ ); + issueCmd =0 ; } - } -#ifdef MPTSCSIH_DBG_TIMEOUT -if (hd->ioc->timeout_cnt < hd->ioc->timeout_maxcnt) { - foo_to[hd->ioc->timeout_cnt] = SCpnt; - hd->ioc->timeout_cnt++; -//mod_timer(&SCpnt->eh_timeout, jiffies + hd->ioc->timeout_delta); - issueCmd =0 ; -printk (MYIOC_s_WARN_FMT -"to pendingQ: (sc=%p, mf=%p, time=%ld)\n" , - hd->ioc->name, SCpnt, mf, jiffies); +/* Set the DV flags. +*/ +if (dvStatus &MPT_SCSICFG_DV_NOT_DONE ) +mptscsih_set_dvflags (hd, pScsiReq); + +if (!issueCmd) + goto fail; } + }#endif -if (issueCmd) { -mpt_put_msg_frame (ScsiDoneCtx, hd->ioc, mf); -dmfprintk ((MYIOC_s_INFO_FMT"Issued SCSI cmd (%p) mf=%p idx=%d\n" , - hd->ioc->name, SCpnt, mf, my_idx)); - DBG_DUMP_REQUEST_FRAME(mf) - }else - goto fail; - }else +#ifdef MPTSCSIH_DBG_TIMEOUT +if (hd->ioc->timeout_cnt < hd->ioc->timeout_maxcnt) { + foo_to[hd->ioc->timeout_cnt] = SCpnt; + hd->ioc->timeout_cnt++; +//mod_timer(&SCpnt->eh_timeout, jiffies + hd->ioc->timeout_delta); +printk (MYIOC_s_WARN_FMT +"to pendingQ: (sc=%p, mf=%p, time=%ld)\n" , + hd->ioc->name, SCpnt, mf, jiffies); goto fail; + } +#endif +mpt_put_msg_frame (ScsiDoneCtx, hd->ioc, mf); +dmfprintk ((MYIOC_s_INFO_FMT"Issued SCSI cmd (%p) mf=%p idx=%d\n" , + hd->ioc->name, SCpnt, mf, my_idx)); +DBG_DUMP_REQUEST_FRAME (mf) return 0; fail: -
Quoted 3 lines
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
---end quoted text---