Date: Thu, 7 Jan 2010 09:44:51 -0500 From: John Baldwin <jhb@freebsd.org> To: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de> Cc: freebsd-acpi@freebsd.org Subject: Re: FreeBSD 8.0 hangs on boot with ACPI enabled Message-ID: <201001070944.51985.jhb@freebsd.org> In-Reply-To: <20100107070433.GH1616@uriah.heep.sax.de> References: <20091230082556.GD1637@uriah.heep.sax.de> <20100106220905.GG1616@uriah.heep.sax.de> <20100107070433.GH1616@uriah.heep.sax.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 07 January 2010 2:04:33 am Joerg Wunsch wrote: > As Joerg Wunsch wrote: > > > I might try jumping from breakpoint to breakpoint, but I first have > > to sketch a kind of schedule about where to set DDB breakpoints. > > Alas, time to go to bed now here, so I have to do that by tomorrow. > > OK, I think we're getting closer on the "hangs on boot" issue (letting > the issue aside that ahc0 doesn't get the correct IO address space > assigned, I'm using the Tekram DC-895 sym0 controller by now). > > I managed it to set breakpoints to xpt_alloc(), and then to _sleep(). > > That's where they are reached: > > Waiting 5 seconds for SCSI devices to settle > [thread pid 0 tid 100000 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 2 tid 100007 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 3 tid 100008 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 4 tid 100009 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 13 tid 100011 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 5 tid 100020 ] > Breakpoint at _sleep: pushl %ebp > db> c > [thread pid 14 tid 100025 ] > Breakpoint at _sleep: pushl %ebp > db> trace > Tracing pid 14 tid 100025 td 0xc2c61b40 > _sleep(0,c2b69d38,0,0,0,...) at _sleep > fork_exit(c04bf050,0,c2b69d38) at fork_exit+0x90 > fork_trampoline() at fork_trampoline+0x8 > --- trap 0, eip = 0, esp = 0xc2b69d70, ebp = 0 --- > > If I continue there, it just sits there, and hangs. No DDB break, no > nothing. I tried setting a breakpoint to fork_exit+0x90 (which would > be the next instruction after the _sleep), which is never reached. fork_exit+0x90 never gets executed unless a kthread returns from its main routine. You can try disabling ACPI's thermal support (debug.acpi.disabled=thermal I think) to see if that helps. You could also start adding breakpoints to the main kthread routine for the acpi_thermal thread (and/or acpi_cooling). It may also be useful for you to change mi_switch() to print out the name of each new thread that runs after returning from sched_switch(). -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001070944.51985.jhb>