RE: [PATCH 06/11] mpt2sas: Convert to host_lock less w/ interrupts disabled externally

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2010-12-20 at 20:34 +0530, Desai, Kashyap wrote:
> Nicholas,
> 

Hi Kashyap,

My apologies for the delayed response, as I have been AFK for the past
days..

> I have gone through another round of code walkthrough (for mpt2sas and mptfusion) to find out dependency w.r.t new host lock less mode.
> In my opinion, w/ interrupts disable is a good ideal. (Earlier, I mentioned that mpt2sas is safe even if interrupts are enabled) 
> In real scenario, *preemption* disable is more IMP for mpt2sas/mptfusion driver than interrupts disable.
> 

Thank you for the clarification here.  

> 
> e.a if scsih_qcmd_xxx has executed half of the code and (due to preemption is not disable for the same CPU), Scheduler can execute
> any other process on the SAME cpu (Though IRQ is disable). Consider Error handling is kicked off on the same CPU and as part of EH,
> it executed HBA reset.
> As part of HBA reset Driver has return back all pending Scsi command to mid-layer, and once control come back to original scsih_qcmd_xxx
> LLD drive will see bad results (Kernel crash/Data corruption/h/w hung or anything critical.....)
> 
> 

Hmmm, very good point.

> So I would suggest to disable preemption also in your macro " IRQ_DISABLE_SCSI_QCMD " as below two level of prevention.
>         local_irq_save(flags);
>         preempt_disable();
> 
> 

Ok, I have been asked to drop the IRQ_DISABLE_SCSI_QCMD() macro and open
code this for the handful of LLDs in the host_lock-less series.  I will
add the functional equivilent and disable preemption following your
recommendation in mpt2sas/mptfusion (and the other drivers using
IRQ_DISABLE_SCSI_QCMD) in the next round of lock_less-LLDs-for-38-v4.

> mpt2sas parameters checks like ioc_link_reset_in_process,
> tm_busy, scs_priv_target_data->deleted  are mainly to communicate device/IOC state of the firmware so there is no hard dependency w.r.t host_lock.
> 

Also understood.  Thanks for the feedback here and I will respin the
mpt2sas/mptfusion for your review next week.

Best Regards,

--nab

> 
> Thanks, Kashyap
> 
> 
> 
> 
> > -----Original Message-----
> > From: Desai, Kashyap
> > Sent: Friday, November 19, 2010 4:33 PM
> > To: Nicholas A. Bellinger; Boaz Harrosh
> > Cc: linux-scsi; Jeff Garzik; James Bottomley; Christoph Hellwig; Mike
> > Christie; Vasu Dev; Tejun Heo; DL-MPT Fusion Linux
> > Subject: RE: [PATCH 06/11] mpt2sas: Convert to host_lock less w/
> > interrupts disabled externally
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Nicholas A. Bellinger [mailto:nab@xxxxxxxxxxxxxxx]
> > > Sent: Friday, November 19, 2010 4:28 AM
> > > To: Boaz Harrosh
> > > Cc: linux-scsi; Jeff Garzik; James Bottomley; Christoph Hellwig; Mike
> > > Christie; Vasu Dev; Tejun Heo; DL-MPT Fusion Linux; Desai, Kashyap
> > > Subject: Re: [PATCH 06/11] mpt2sas: Convert to host_lock less w/
> > > interrupts disabled externally
> > >
> > > <Trimming CC list>
> > >
> > > On Thu, 2010-11-18 at 12:15 +0200, Boaz Harrosh wrote:
> > > > On 11/18/2010 12:19 AM, Nicholas A. Bellinger wrote:
> > > > > From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
> > > > >
> > > > > This patch converts the mpt2sas driver to run in host_lock less
> > > mode
> > > > > with the new IRQ_DISABLE_SCSI_QCMD() that disables interrupts
> > while
> > > > > calling ->queuecommand() dispatch
> > > > >
> > > > > Signed-off-by: Nicholas A. Bellinger <nab@xxxxxxxxxxxxxxx>
> > > > > ---
> > > > >  drivers/scsi/mpt2sas/mpt2sas_scsih.c |    6 +++---
> > > > >  1 files changed, 3 insertions(+), 3 deletions(-)
> > > > >
> > > > > diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> > > b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> > > > > index 1a96a00..e564fe7 100644
> > > > > --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> > > > > +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> > > > > @@ -3304,7 +3304,7 @@ _scsih_eedp_error_handling(struct scsi_cmnd
> > > *scmd, u16 ioc_status)
> > > > >  }
> > > > >
> > > > >  /**
> > > > > - * _scsih_qcmd - main scsi request entry point
> > > > > + * _scsih_qcmd_irq_disable - main scsi request entry point
> > > > >   * @scmd: pointer to scsi command object
> > > > >   * @done: function pointer to be invoked on completion
> > > > >   *
> > > > > @@ -3315,7 +3315,7 @@ _scsih_eedp_error_handling(struct scsi_cmnd
> > > *scmd, u16 ioc_status)
> > > > >   * SCSI_MLQUEUE_HOST_BUSY if the entire host queue is full
> > > > >   */
> > > > >  static int
> > > > > -_scsih_qcmd_lck(struct scsi_cmnd *scmd, void (*done)(struct
> > > scsi_cmnd *))
> > > > > +_scsih_qcmd_irq_disable(struct scsi_cmnd *scmd, void
> > > (*done)(struct scsi_cmnd *))
> > > > >  {
> > > > >  	struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device-
> > >host);
> > > > >  	struct MPT2SAS_DEVICE *sas_device_priv_data;
> > > > > @@ -3441,7 +3441,7 @@ _scsih_qcmd_lck(struct scsi_cmnd *scmd,
> > void
> > > (*done)(struct scsi_cmnd *))
> > > > >  	return SCSI_MLQUEUE_HOST_BUSY;
> > > > >  }
> > > > >
> > > > > -static DEF_SCSI_QCMD(_scsih_qcmd)
> > > > > +static IRQ_DISABLE_SCSI_QCMD(_scsih_qcmd)
> > > > >
> > > >
> > > > How can this (and other in the patchset) can be correct? I mean I
> > > expect
> > > > that if you remove the lock,xx_qcmd_lck,unlock then inside the
> > > xx_qcmd_lck
> > > > there was an unlock,do123,lock and that driver was effectively
> > > running lockless
> > > > before. (like in iscsi). But here this is new behaviour. If it is
> > > correct
> > > > I would like to see a statement from you that:
> > > > 	"I have audited this driver, and all shared resources are
> > > protected by
> > > >          XYZ so ..."
> > > >
> > > > Otherwise how can I know this is correct? I have never audited this
> > > driver myself
> > > >
> > >
> > > So for this specific mpt2sas case, Vasu Dev had been testing the
> > > lock_less case w/o disabling interrupts for his original
> > > SHT->unlocked_qcmd=1 patch, and from his comments this mode was
> > stable
> > > during his JBOD lock_less small block IOP performance test.
> > >
> > Nicholas, mpt2sas driver is safe even if in lock less condition.
> > I have tested mpt2sas driver available in 2.6.37-rc2 where I have seen
> > host lock push down code is available for mpt2sas driver
> > I have seen static DEF_SCSI_QCMD(_scsih_qcmd) is available for mpt2sas
> > driver. I also did testing removing that particular macro and making
> > Mpt2sas driver in actual host lock less mode. Below observation is
> > after removing static DEF_SCSI_QCMD(_scsih_qcmd) from mpt2sas (that is
> > what I refer as actual host lock less mode)
> > 
> > I have tested stability of the driver and I/O integrity. Things were
> > fine. I am not seeing any need for even going for
> > IRQ_DISABLE_SCSI_QCMD() patch too.
> > Mpt2sas driver is able to handle host lock less mode seamlessly, since
> > we have all required (racy) places under spinlocks.
> > 
> > I do not see any solid need for this patch. Please correct me if I am
> > missing anything here.
> > 
> > ~ Kashyap
> > 
> > > This patch currently includes IRQ_DISABLE_SCSI_QCMD() usage which I
> > am
> > > not even sure is needed (according to Vasu's original findings), but
> > I
> > > decided to err on the conservative side until we can get some
> > feedback
> > > from the the mpt2sas maintainer (Kashyap @ LSI CC'ed).
> > >
> > > --nab
> > >
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux