Re: [linux-usb-devel] Re: serious 2.6 bug in USB subsystem?

From: David Mosberger
Date: Tue Mar 09 2004 - 13:00:32 EST


>>>>> On Tue, 09 Mar 2004 09:36:53 -0800, David Brownell <david-b@xxxxxxxxxxx> said:

David.B> David Mosberger wrote:
>> How about something along the following lines? The patch is
>> relative to 2.6.4-rc1. What it does is add a new state
>> ED_DESCHEDULED, which is treated exactly like ED_IDLE, except
>> that in this state, the HC may still be referring to the ED in
>> question. Thus, if

David.B> Sounds exactly like ED_UNLINK -- except maybe that it's not
David.B> been put onto ed_rm_list (with ED_DEQUEUE set).

David.B> Why add another state?

So you can tell them apart. See ohci_endpoint_disable().

You seem to think small races are OK. I disagree. The smaller the
race, the harder it is to debug (and yes, it _will_ bite you
eventually). With my patch, you're _guaranteed_ that ED_IDLE means
the HC doesn't refer to the ED anymore so you can free the memory and
do whatever you want without worry about potentially causing the HC to
do something bad.

David.B> But some parts worry me. Like changing that code to BUG()
David.B> on a driver behavior that's perfectly reasonable;

With my patch, the only reason you enter ED_UNLINK state is
ohci_endpoint_disable(). If you try to ohci_urb_enqueue() on an ED in
this state, it will fail, so I don't there is a problem (I see now
that I forgot to set the error-code for this case, that's obviously
something that needs to be fixed). But perhaps you had different
semantics in mind for ED_UNLINK?

David.B> removing some of the PCI posting, which makes it easier for
David.B> the HC and its driver to disagree about schedule status.

Meaning what? Please explain what sequence of events would cause
problems that could be solved by flushing the posted writes. AFAICT,
the flushes are just expensive NO-OPs in this particular case.

--david
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/