Re: cbb hangs during suspend if ath card active

From: Nate Lawson <nate_at_root.org>
Date: Wed, 12 Jul 2006 23:06:56 -0700
Sam Leffler wrote:
> Nate Lawson wrote:
>> I've seen a recent regression in the past few months when suspending my
>> laptop.  When I have an ath0 card inserted in a cardbus slot and then
>> press the sleep button, the system hangs.  If I eject the card, it
>> continues going into suspend and everything works as normal.
>>
>> If the card is up (ifconfig up), this process hangs.  If it's down, no
>> hang and it suspends normally.  I did some debugging by starting the
>> suspend, waiting for the hang, hitting "break to ddb", and then ejecting
>> the card.  The eject causes an interrupt which causes ddb to be entered.
>>  With ps, I can see that the thread on the acpi_taskq is running the
>> button event and then calling bus_generic_suspend(), which eventually
>> calls cbb_detach(), which then calls a power routine in pccbb.c.  This
>> routine calls tsleep() (wchan "cbbP3") which never wakes up.
>>
>> Any idea why tsleep() is not waking up now?  It seems tsleep() calls
>> mi_switch() and never returns.
>>
> 
> A more likely scenario is that ath_stop is putting the card into "deep
> sleep".  At that point you cannot touch any of the PCI domain registers
> for the card w/o bringing it out of sleep.  If you do then the
> pci/cardbus will hang.  Ejecting the card removes the device from the
> bus and allows things to continue.
> 
> I walked through this scenario with Ed Maste when he mentioned it to me
> and we tried to catch ath being entered after it set the card to sleep
> but failed.  Note that something as simple as checking for ath_intrpend
> at the top of ath_intr can cause this but after shuffling code to ensure
> this does not occur we still couldn't catch what was going on.
> 
> My suggestion is you work under the above assumption and try to catch
> entry to the ath driver.  I still think the problem is a shared irq
> interrupting after ath_stop puts the card to sleep.

Thanks, I'll look into that.  The relevant card is:
ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
ath0: <Atheros 5212> mem 0xc0210000-0xc021ffff at device 0.0 on cardbus1
ath0: mac 7.9 phy 4.5 radio 5.6

The interrupt is shared with:
vgapci0: <VGA-compatible display> mem 
0xc0100000-0xc017ffff,0xe8000000-0xebffffff,0xe4000000-0xe7ffffff,0xe0000000-0xe1ffffff 
irq 11 at device 0.0 on pci1
cbb0: <TI1420 PCI-CardBus Bridge> mem 0x50000000-0x50000fff irq 11 at 
device 0.0 on pci2
cbb1: <TI1420 PCI-CardBus Bridge> mem 0x51000000-0x51000fff irq 11 at 
device 0.1 on pci2
fxp0: <Intel 82801CAM (ICH3) Pro/100 VE Ethernet> port 0x6000-0x603f mem 
0xc0200000-0xc0200fff irq 11 at device 8.0 on pci2
ichsmb0: <Intel 82801CA (ICH3) SMBus controller> port 0x1880-0x189f irq 
11 at device 31.3 on pci0
pcm0: <Intel ICH3 (82801CA)> port 0x1c00-0x1cff,0x18c0-0x18ff irq 11 at 
device 31.5 on pci0


-- 
Nate
Received on Thu Jul 13 2006 - 04:07:13 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:58 UTC