tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: 4.0/i386 auich_calibrate() and GENERIC.NOACPI failure



On Sat, Jan 12, 2008 at 11:07:51AM -0500, Chuck Cranor wrote:

> On Sat, Jan 12, 2008 at 02:17:19PM +0000, Andrew Doran wrote:
> > You could some printfs to see what happens to curcpu()->ci_ilevel, but it
> > should stay at IPL_HIGH because ints are off during autoconf. As Joerg
> > mentioned the i8254 based microtime() is incredibly slow. It would be
> > interesting to see what happens if you took the microtime call out of the
> > loop in auich_calibrate().
> 
> The i8254 may be slow, but it seemed to work just fine before this...?
> 
> At any rate, Joerg suggested I put the auich_calibrate() loop in an 
> splvm(), so I did that plus your curcpu()->ci_ilevel suggestion.   
> The results:
> 
>  1. splvm() didn't help
>  2. splclock() _did_ fix the problem!
>  3. the value of curcpu()->ci_ilevel is 0 (zero) before the loop.
>     Are you sure we are supposed to be at IPL_HIGH?   I thought zero
>     was IPL_NONE?

It's a misfeature but most of autoconf should happen with interrupts off.
Something is dropping the spl - perhaps an "avoid uninitialized variable
warning" commit at some point? I'll see if I can find it. It looks like the
bug in kern_tc.c was masking that. But I guess the auich calibration loop
should be wrapped in splhigh()/splx() or be a bit smarter so that it doesn't
need to rely on interrupts being blocked.

Cheers,
Andrew



Home | Main Index | Thread Index | Old Index