FreeBSD 8.0 hangs on boot with ACPI enabled
John Baldwin
jhb at freebsd.org
Thu Jan 7 15:29:06 UTC 2010
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
More information about the freebsd-acpi
mailing list