Date: Thu, 23 Feb 2012 07:44:21 +0530 From: "Desai, Kashyap" <Kashyap.Desai@lsi.com> To: Chuck Swiger <cswiger@mac.com> Cc: "freebsd-scsi@freebsd.org" <freebsd-scsi@freebsd.org>, freebsd-stable <freebsd-stable@freebsd.org>, "McConnell, Stephen" <Stephen.McConnell@lsi.com> Subject: RE: mpslsi0 : Trying sleep, but thread marked as sleeping prohibited Message-ID: <B2FD678A64EAAD45B089B123FDFC3ED72B96D34855@inbmail01.lsi.com> In-Reply-To: <FDA8B243-6E6F-458A-8B93-D863EC9785B2@mac.com> References: <B2FD678A64EAAD45B089B123FDFC3ED72B96D34836@inbmail01.lsi.com> <20120222191519.GT55074@deviant.kiev.zoral.com.ua> <B2FD678A64EAAD45B089B123FDFC3ED72B96D34854@inbmail01.lsi.com> <FDA8B243-6E6F-458A-8B93-D863EC9785B2@mac.com>
next in thread | previous in thread | raw e-mail | index | archive | help
> -----Original Message----- > From: Chuck Swiger [mailto:cswiger@mac.com] > Sent: Thursday, February 23, 2012 6:21 AM > To: Desai, Kashyap > Cc: freebsd-scsi@freebsd.org; freebsd-stable; McConnell, Stephen > Subject: Re: mpslsi0 : Trying sleep, but thread marked as sleeping > prohibited >=20 > On Feb 22, 2012, at 4:22 PM, Desai, Kashyap wrote: > > Just curious to know, What is a reason that thread can do blocking > sleep but can't do unbounded sleep ? >=20 > When you block, the scheduler can run other threads and only needs to > wake up and run your thread after the blocking condition is completed. >=20 > However, you don't want to busy-wait in a spin lock/mutex for any > lengthy period of time. If your thread was allowed to do an unbounded > sleep, especially in a fast interrupt handler context, what's going to > wake it up? An NMI like the reset button [1]? :-) When I started working on freebsd, first thing I noticed was ISR in freebsd= are thread. (special thread). But at least not like linux where we don't h= ave pid associate with ISR. So In Freebsd we will have thread id for related isr routine. Consider that fact, Even in fast interrupts handler context we should be ab= le to sleep. (e.a pause("mps_pause", (hz/1000));) Schedule can put thread into wait_queue and eventually when wait condition = meet, thread will be wake by OS. I mean if we can sleep in fast interrupt handler using mtx_ call, why not m= sleep/pause ? Sorry if I am extending this conversation. I really appreciate kind of help= from freebsd forum.! ` Kashyap >=20 > Regards, > -- > -Chuck >=20 > [1]: Well, you could also call STI to permit clock interrupts or > something else to fire an interrupt, but then your interrupt handler > needs to be re-entrant. (And watch out for multiple nested interrupts > blowing out the available stack space....)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B2FD678A64EAAD45B089B123FDFC3ED72B96D34855>