Date: Sun, 19 Nov 2000 19:39:41 -0500 From: mike ryan <msr@elision.org> To: Warner Losh <imp@village.org> Cc: stable@FreeBSD.ORG Subject: Re: 4.2-BETA hangs on boot Message-ID: <20001119193941.A38978@medianstrip.net> In-Reply-To: <200011192205.eAJM5QG03609@billy-club.village.org>; from imp@village.org on Sun, Nov 19, 2000 at 03:05:26PM -0700 References: <20001117172251.A34915@medianstrip.net> <20001116204344.B62344@bonsai.knology.net> <20001116195957.A62344@bonsai.knology.net> <200011170209.eAH297q51130@drugs.dv.isc.org> <20001116204344.B62344@bonsai.knology.net> <200011172203.PAA77619@harmony.village.org> <20001117172251.A34915@medianstrip.net> <200011172314.QAA78313@harmony.village.org> <20001119042505.A7076@medianstrip.net> <200011192205.eAJM5QG03609@billy-club.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 11/19/00, Warner Losh wrote:
> In message <20001119042505.A7076@medianstrip.net> mike ryan writes:
>
> : for what it's worth, here's the behavior i'm seeing: on my vaio
> : z505hs with a ricoh rl5c475 pci-cardbus bridge, polling mode works
> : fine with the "plug & play o/s" bios option set to "yes". when i
> : set that bios option to "no" (so usb works), the machine will
> : occasionally (but not always) hang on boot after the pccard0 probe,
> : with no cards inserted. i haven't tried booting with cards
> : inserted. when the machine boots successfully, it will always hang
> : on a card insertion.
>
> Odd, my always works in polling mode. I have the same bridge, but the
> PCG-505TS instead of the x505hs.
>
> The PnP "no" setting causes more of the devices to have interrupts
> assigned and routed. The "yes" setting doesn't. You are running into
> interrupt hell that has little to do with the actual card bus bridge
> and more to do with FreeBSD's inability to cope properly before
> -current of about BSDcon.
i'm not entirely sure i understand. "pnp o/s = no" causes the bios
to assign an irq to the pcic controller, meaning the pcic controller
raises that interrupt on insertions/removals, but the driver,
operating in polling mode, never clears the interrupt so the machine
wedges trying to service it? if this is correct, how does ddb
manage to unwedge things?
the fix in -current is the pci interrupt routing code which allows
us to set "pnp os = yes" in the bios and let freebsd make irq
assignments only for devices it understands? any chance this will
MFC-ed?
> : when a card insertion does freeze the machine, i can still drop to
> : ddb. once in ddb, i can "next" a lot, and eventually ddb will
> : disappear, the machine will be unfrozen, the freshly inserted card
> : will probe and attach, and everything will continue normally except
> : that a random process will have died on SIGTRAP. same thing on card
> : removal. dropping to ddb and hitting "continue" doesn't work, only
> : "next". this seems odd.
>
> Where are you dropping into ddb at? That would be useful information.
here's the beginning of a sample ddb session (transcribed by hand):
Debugger("manual escape to debugger")
Stopped at Debugger+0x34: movb $0,in_Debugger.396
db> t
Debugger(c02ca249) at Debugger+0x34
scgetc(c033d600,2,c071a840,c03369a0,ffffffff) at scgetc+0x38e
sckbdevent(c03369a0,0,c033d600,c071a840,c0bb0000) at sckbdevent+0x1b9
atkbd_intr(c03369a0,0,c02d75b4,c027fc5f,c03369a0) at atkdb_intr+0x22
atkdb_isa_intr(c03369a0,684200,c02d0010,c0130010,10) at atkbd_isa_intr+0x18
Xresume1() at Xresume1+0x2b
--- interrupt, eip = 0xc0236e3b, esp = 0xc02d75a0, ebp = 0xc02d75b4 ---
uhci_intr(c0bb0000,684200,0,0,0) at uhci_intr+0x47
intr_max(c071a840,0,c01f0010,400010,400010) at intr_mux+0x1d
Xresume9() at Xresume9+0x2b
--- interrupt, eip = 0xc0289276, esp = 0xc02d7614, ebp = 0 ---
default_halt() at default_halt+0x2
db> n
After 2 instructions (0 loads, 0 stores)
Stopped at Debugger+0x3c: ret
db> n
After 81 instructions (0 loads, 0 stores)
Stopped at scgetc+0x4af: ret
db> n
After 13 instructions (0 loads, 0 stores)
Stopped at sckbdevent+0x1da: ret
db> n
After 7 instructions (0 loads, 0 stores)
Stopped at atkbd_intr+0x89: ret
db> n
After 2 instructions (0 loads, 0 stores)
Stopped at atkdb_isa_intr+0x19: ret
db> n
After 24 instructions (0 loads, 0 stores)
Stopped at doreti_iret: iret
db> t
doreti_iret(8,202,c071a840,400200,ffffffff) at doreti_iret
uhci_intr(c0bb0000,684200,0,0,0) at uhci_intr+0x47
intr_mux(c071a840,0,c01f0010,400010,400010) at intr_mux+0x1d
Xresume9() at Xresume9+0x2b
--- interrypt, eip = 0xc0289276, esp = 0xc02d7614, ebp = 0 ---
default_halt() at default_halt+0x2
db> n
After 11 instructions (0 loads, 0 stores)
Stopped at uhci_intr+0x11f: ret
db> n
After 112596 instructions (0 loads, 0 stores)
Stopped at intr_mux+0x33: ret
db> n
After 1906 instructions (0 loads, 0 stores)
Stopped at doreti_iret: iret
db> t
doreti_iret(8,246,c0289271,f,681) at doreti_iret
default_halt() at default_halt+0x2
db> n
After 1 instructions (0 loads, 0 stores)
Stopped at intr_mux+0x2: ret
db> n
After 92 instructions (0 loads, 0 stores)
Stopped at cpu_switch_load_gs+0x35: ret
db> t
cpu_switch_load_gs(c85cac60,c85cac60,0,0,19) at cpu_switch_load_gs+0x35
mi_switch(0,c02338e0,c0157a91,c3489390,6e4200) at mi_switch+0x174
tsleep(c02ef7f8,4,c02bcf00,1f4) at tsleep+0x19d
vm_pageout(0) at vm_pageout+0x1e0
fork_trampoline() at fork_tramploine+0x8
db>
relevant excerpts from "nm /kernel":
c0236df4 T uhci_intr
...
c027fc34 t Xresume1
...
c0289274 T default_halt
c0289278 T cpu_switch
...
c02d3800 r config
c02d7620 D .tmpstk
...
c03369a0 b default_kbd
...
c033d600 b main_softc
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20001119193941.A38978>
