Date: Mon, 07 Mar 2005 15:48:55 -0700 (MST) From: Warner Losh <imp@bsdimp.com> To: bengta@sics.se Cc: freebsd-mobile@freebsd.org Subject: Re: pccard0: Card has no functions! OR PCI memory range allocation problem? Message-ID: <20050307.154855.74746009.imp@bsdimp.com> In-Reply-To: <uh7ll8zl0pk.fsf@P142.sics.se> References: <uh7ll8zl0pk.fsf@P142.sics.se>
next in thread | previous in thread | raw e-mail | index | archive | help
> After kldunload:ing if_ath, no pccard is recognised. For any pccard > (16-bit - cardbus is not affected!) it just says: > > pccard0: Card has no functions! Interesting. > The system has an Atheros mini-PCI wireless card. (If my theory is > right, the particular card is irrelevant. I got the same symptoms > with if_ipw earlier when I had an Intel Wireless PRO 2100 in the same > box.) I have no device driver for the card compiled into the kernel. > At boot the kernel says: > > pcib1: device (null) requested decoded memory range 0xd0200000-0xd020ffff OK. That makes sense. The above message really means nothing, and isn't a warning or an error. > When the if_ath driver is kldload:ed: > > ath0: <Atheros 5212> mem 0xd0200000-0xd020ffff irq 11 at device 2.0 on pci2 Good, addresses match. > At this point (and also before loading if_ath), inserting a pccard > works: > > pcib1: device pccard0 requested decoded memory range 0xd0200000-0xdfffffff > cis mem map 0xd63ab000 (resource: 0xd0240000) > pccard0: check_cis_quirks > pccard0: CIS version PC Card Standard 5.0 > pccard0: CIS info: Lucent Technologies, WaveLAN/IEEE, Version 01.01, > (and so on...) > > After unloading the if_ath driver, it says the following instead: > > pcib1: device pccard0 requested decoded memory range 0xd0200000-0xdfffffff > cis mem map 0xd63ab000 (resource: 0xd0200000) Hmmm, looks like you're the first person to hit this bug. I knew it was theoretically possible to provoke it, but never could construct a test case locally that would. > Now to the bottom line: where is the bug? > > 1) In the if_ath driver module which deallocated a PCI memory range > which it didn't allocate (the kernel did at boot). > > 2) In the PCI memory allocation/deallocation routines which allowed > the loadable driver to deallocate a PCI memory range that was > allocated at boot. > > 3) In cbb/pccard which perhaps shouldn't be allowed to use the memory > range? > > 4) Or is the answer that I should not unload drivers for fixed > hardware? 5) On kldunload, the resources shouldn't be freed. Only when then child actually goes away should they be freed. I think this is the heart of the bug. Once this is fixed, all the down stream badness should go away. Warner
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050307.154855.74746009.imp>