Kernel hanging after today cvsup at Timecounter "TSC

Attilio Rao attilio at freebsd.org
Wed May 23 17:02:20 UTC 2007


2007/5/23, Robert Watson <rwatson at freebsd.org>:
>
> On Tue, 22 May 2007, David Wolfskill wrote:
>
> >> I saw an identical problem when I booted a kernel from yesterday with
> >> kernel modules from a week or so earlier, only mine froze before getting to
> >> the Timecounter line, rather, immediately after the vga0 line.  Perhaps
> >> we're looking at an issue with mixing modules with a kernel from
> >> before/after the compiler upgrade?
> >
> > I'm about as certain as I can be that ssuch "module-mixing" did not cause
> > the hang that I saw on my laptop today, as I was able to successfully boot
> > from a kernel built (along with world, at the time) on 19 May (after the gcc
> > 4 import).
> >
> > In my case, the keyboard was unresponsive (e.g., didn't go into "scroll
> > lock" mode when I used the keyboard chord to request that), and the fan
> > started gaining speed pretty rapidly, so I elected to power-cycle the
> > machine aftter a few seconds of trying less disruptive means of getting its
> > attention.
> >
> > I believe the last message displayed had the word "probe" in it.  I am
> > certain that the system hadn't tried to mount any file systems yet.
> >
> > Sorry I don't have more specifics handy.  I did save the hanging kernel, of
> > course.
>
> Indeed, looks like I was on the wrong track -- with INVARIANTS enabled, I see
> something more sensible.  Apologies for any typos, this is hand-transcribed:
>
> vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
> panic: corupt spinlock
> KDB: enter: panic
> [thread pid 0 tid 0 ]
> Stopped at kdb_enter+0x32: leave
> db> bt
> Tracing pid 0 tid 0 td 0xc0b36620
> kdb_enter(...) at kdb_enter+0x32
> panic(...) at panic+0xc5
> statclock(...) at statclock+0x108
> hardclock(...) at hardclock+0x37
> clkintr(...) at clkintr+0xd2
> intr_execute_handlers(...) at intr_execute_handlers+0xe5
> atpic_handle_intr(...) at atpic_handle_intr+0xba
> Xatpic_intr0() at Xatpic_int0+0x21
> --- interrupt, eip = 0xc099409b, esp=0xc1020cb7, ebp = 0xc1020cbc ---
> spinlock_exit(...) at spinlock_exit+0x2b
> _mtx_unlock_spin_flags(...) at _mtx_unlock_spin_flags+0xdc
> atpic_enable_source(...) at atpic_enable_source+0x86
> intr_add_handler(...) at intr_add_handler+0xb3
> cpu_initclockS(...) at cpu_initclocks+0x50
> initclocks(...) at initclocks+0xb
> mi_startup(...) at mi_startup+0x96
> begin() at begin+0x2c
>
> I've uploaded the actual stack trace with arguments as
>
>   http://www.watson.org/~robert/freebsd/20070523-panic.png

Ok, it seems that the new time_lock spinlock is initialized too late,
and infact cpu_initclocks() is called before it is initialized.

It is enough to move the mtx_init() just before the cpu_initclocks()
in kern_clock.c::initclocks().

Can someone try that and report if it works?

I'm sorry for that, but I (and presumabily other people testing the
patch) never got that problems on all machines we used (probabilly
beacause this is just triggered when attaching vgaX).

Thanks,
Attilio


-- 
Peace can only be achieved by understanding - A. Einstein


More information about the freebsd-current mailing list