Subject: Re: callgraph ARM7
To: Ben Harris <bjh21@netbsd.org>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm
Date: 09/25/2001 14:27:49
> As I said above, this is because SetCPSR is used to unblock interrupts, so
> you get a lot of things like this (assuming acorn32, which doesn't have
> real statclock interrupts):
> 
> s = splhigh(); /* or anything that blocks hardclock */
> do_stuff();
> do_more_stuff();	<--- Hardclock fires here, but it's blocked...
> still_doing_stuff();
> splx(s); /* which calls... */
>  \- SetCPSR();		<--- Interrupts re-enabled, so we handle that hardclock
>    \- hardclock();
>      \- statclock();	<--- Looks at the irqframe, discovers the IRQ
> 			     happened in SetCPSR, and charges another
>                              clock tick to it.
> 
> Thus, SetCPSR() will appear to be responsible for all the CPU time that's
> spent with hardclock interrupts disabled.  Does that make sense?

Doh!  Yes.  Thanks for the explanation.

So we can infer from this that a large SetCPSR count => too much time with 
interrupts blocked.

R.