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