Subject: Re: how do I tell if I'm on the interrupt stack?
To: Paul Marchione <paulm@ennovatenetworks.com>
From: Jason R Thorpe <thorpej@wasabisystems.com>
List: tech-kern
Date: 09/05/2001 15:18:28
On Wed, Sep 05, 2001 at 05:58:32PM -0400, Paul Marchione wrote:

 > I believe that this will work:
 > 
 > if you test the curproc pointer, a zero value implies no process is currently
 > running,

No, this doesn't work... curproc can be non-NULL in interrupt context.  It
would indicate which process was running on the CPU when the interrupt
happened.

 > you would thus have hit the code path from the kernel's hardclock function.
 > 
 > i.e.
 > 
 >     if  (!curproc)
 >         {
 >         /* base level 0, unsafe to call tsleep */
 >         return;
 >         }
 > 
 > -paul
 > 
 > Matthew Jacob wrote:
 > 
 > > I have several possible entry points into a code path in a driver which can
 > > decide whether to ltsleep for an event or poll. If I know I've entered via an
 > > interrupt (e.g., the device interrupt service routine)- I can mark state so
 > > that I don't attempt to ltsleep.
 > >
 > > But it turns out that there is a normal callback via hardclock (in scsipi)
 > > that I have no means of distinguishing from any other call. How can I tell if
 > > I'm on the interrupt stack and it's not safe to call ltsleep?
 > >
 > > -matt
 > 

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>