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