Date: Thu, 23 Feb 2012 10:11:57 -0500 From: Alexander Kabaev <kabaev@gmail.com> To: "Desai, Kashyap" <Kashyap.Desai@lsi.com> Cc: Ed Schouten <ed@80386.nl>, 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: <20120223101157.0bb3f2ee@kan.dyndns.org> In-Reply-To: <B2FD678A64EAAD45B089B123FDFC3ED72B96D34929@inbmail01.lsi.com> References: <B2FD678A64EAAD45B089B123FDFC3ED72B96D3484A@inbmail01.lsi.com> <20120223094611.GC32748@hoeg.nl> <B2FD678A64EAAD45B089B123FDFC3ED72B96D34929@inbmail01.lsi.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/950qJ=4tk1nASHapQ0CY+jC Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Thu, 23 Feb 2012 18:45:29 +0530 "Desai, Kashyap" <Kashyap.Desai@lsi.com> wrote: >=20 >=20 > > -----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 > Bad drivers can just defererence wild pointer to satisfy their need for wrongdoing. For that reason let us keep them out of conversation. mtx locks were designed to protect small sections of code where thread is only allowed to block waiting for other thread to release the lock of similar class. While threads are blocked, they get benefit of adaptive sleep and priority propagation and should take precaution of never taking the path of code that can cause them to sleep. Assertions are there to help code authors with that. sleep locks are by definition unbound. There is no spinning, no priority propagation. Holders are free to take, say, page faults and go to long journey to disk and back, etc. Hardly the stuff _anyone_ would want to do from interrupt handler, thread or otherwise.=20 =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/ > _______________________________________________ > freebsd-scsi@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-scsi > To unsubscribe, send any mail to > "freebsd-scsi-unsubscribe@freebsd.org" --=20 Alexander Kabaev --Sig_/950qJ=4tk1nASHapQ0CY+jC Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (FreeBSD) iD8DBQFPRldCQ6z1jMm+XZYRAhIbAKDOazJ5UXmFRvE7uTT33ev2At+N0wCgymJR 5k9bxKRjkXtb4o5H6isoJVM= =1ndl -----END PGP SIGNATURE----- --Sig_/950qJ=4tk1nASHapQ0CY+jC--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120223101157.0bb3f2ee>