Skip site navigation (1)Skip section navigation (2)
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>