Skip site navigation (1)Skip section navigation (2)
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>