Date: Thu, 23 Feb 2012 18:45:29 +0530 From: "Desai, Kashyap" <Kashyap.Desai@lsi.com> To: Ed Schouten <ed@80386.nl> Cc: freebsd-stable <freebsd-stable@freebsd.org>, "joerg@FreeBSD.org" <joerg@FreeBSD.org>, "Kenneth D. Merry" <ken@freebsd.org>, "freebsd-scsi@freebsd.org" <freebsd-scsi@freebsd.org>, "Justin T. Gibbs" <gibbs@freebsd.org>, "McConnell, Stephen" <Stephen.McConnell@lsi.com> Subject: RE: mpslsi0 : Trying sleep, but thread marked as sleeping prohibited Message-ID: <B2FD678A64EAAD45B089B123FDFC3ED72B96D34929@inbmail01.lsi.com> In-Reply-To: <20120223094611.GC32748@hoeg.nl> References: <B2FD678A64EAAD45B089B123FDFC3ED72B96D3484A@inbmail01.lsi.com> <20120223094611.GC32748@hoeg.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
> -----Original Message----- > From: Ed Schouten [mailto:ed@80386.nl] > Sent: Thursday, February 23, 2012 3:16 PM > To: Desai, Kashyap > Cc: freebsd-scsi@freebsd.org; freebsd-stable; joerg@FreeBSD.org; Kenneth > D. Merry; McConnell, Stephen; Justin T. Gibbs > Subject: Re: mpslsi0 : Trying sleep, but thread marked as sleeping > prohibited >=20 > Hi Kashyap, >=20 > * Desai, Kashyap <Kashyap.Desai@lsi.com>, 20120222 18:51: > > Adding Ed Schouten and Jorg Wunsch as I see there are author of > > msleep/mtx related APIs. >=20 > Am I? :-) I am new to FreeBSD and desperate to know the answer. :-). Thanks for your = help. >=20 > > 1. When any irq is register with FreeBSD OS, it sets " TDP_NOSLEEPING" > > pflag. It means though irq in freebsd is treated as thread, We cannot > > sleep in IRQ because of " "TDP_NOSLEEPING " set. > > 2. In mps driver we have below code snippet in ISR routine. > > > > > > mps_dprint(sc, MPS_TRACE, "%s\n", __func__); > > mps_lock(sc); > > mps_intr_locked(data); > > mps_unlock(sc); > > > > I wonder why there is no issue with above code ? Theoretical we cannot > > sleep in ISR. (as explained in #1) Any thoughts ? >=20 > The TDP_NOSLEEPING flag only disallows sleeping of an indeterminate > amount of time. Locking a mutex is allowed, as it can only cause the > thread to be blocked for a small amount of time, waiting for another > thread to unlock it. So does this assumption that another thread will release mutex fast enough = ? Same as msleep() this can be applicable here as well. I mean another thread= _can_ (if some bad drivers) take long time to release mutex. >=20 > > 3. I recently added few place msleep() instead of DELAY in ISR context > > and I see " Trying sleep, but thread marked as sleeping prohibited". >=20 > Which makes sense, as msleep() can be used to sleep for indefinitely. This part is clear. ! I agree with all experts view.=20 >=20 > -- > Ed Schouten <ed@80386.nl> > WWW: http://80386.nl/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B2FD678A64EAAD45B089B123FDFC3ED72B96D34929>