Hi, Alan Stern: > I get it. And that call to finish_unlinks is made from within the > ohci_endpoint_disable routine. It looks like the "clean up the list > without looking at the hardware state" happens only when the HC isn't > running.
Right.
> But during a normal rmmod the HC _is_ running. So how does this
> end up solving your problem? Does ohci-hcd somehow learn that the
> controller is _not_ running?
>
During a normal rmmod the HC is running; however, PCMCIA is special in
that it can be pulled at any time. So the OHCI driver has a few checks
for "this only happens when the hardware is gone" results (all bits 1).
> The correct way to handle this is to change the HCD. Not just ohci-hcd,
> but every HCD should be able to unlink URBs when the hardware isn't
> working properly. This may require adding a timer, to check that unlinks
> complete no more than a few hundred milliseconds after they are started.
I have added an OHCI-internal timer. It seems to work, though of course
it's still a proof-of-concept implementation, tailored to our specific
problem.
I'll have to test that one a bit more. I don't know if the problem is
sufficiently generic that a common implementation is warranted; uhci
already has a stall timer (which I haven't examined); ehci might suffer
from the same problem as the ohci driver when the card is pulled.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | [EMAIL PROTECTED]
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
- -
... [concerning quotation marks] even if we *did* quote anybody
in this business, it probably would be gibberish.
-- Thom McLeod
signature.asc
Description: Digital signature
