Am Sonntag, 18. April 2004 16:36 schrieb Alan Stern:
> On Sat, 17 Apr 2004, Oliver Neukum wrote:
> > Am Samstag, 17. April 2004 22:13 schrieb Alan Stern:
> > > This sounds familiar...  How long has it been that people have been
> > > busy replacing coarse locks like BKL with finer-grained locks?
> >
> > A spinlock could replace it. But that is a small detail.
>
> Yes it could.  Then the driver would start to resemble its original form
> again, defeating Greg's point.

Where's the difference between
lock_kernel();
vs.
spin_lock(&skel_open_lock);

> > > Also, I notice that this code does indeed continue to communicate with
> > > the device after disconnect() returns.
> >
> > I see no way fixing that preserving the elegance of the design.
>
> Are you the same Oliver who always claims that correctness is more
> important than style?  If not, what have you done with him? :-)

I am the same. I just have the decency to shoot the cow cleanly
instead of dismembering it ;-)
That is to say, let's shelve it for 2.7.

> > > > The key to make reference counting work, seems to be reallocating
> > > > the data structure operations are based on.
> > >
> > > Another key aspect is performing disconnect-type operations in two
> > > steps: receive the disconnect notification and sometime afterwards
> > > acknowledge completion of the disconnect by reducing a reference count.
> >
> > Yes, and not reusing the data structure in between.
>
> No, no!  That's the whole point.  The reference counting in the driver
> model is based on the idea that you send a notification to a driver
> telling it to stop using something, but it's allowed to continue using (or
> trying to use) it until it notifies you back.  That's why we have both
> device_del() and a release() callback, for example.

Sorry. Maybe that's a linguistic problem. Let me be clearer.

Reference counting controls deallocation. In addition there's a state where
the connection between data structure and device is severed, meaning that
all io to it will cleanly fail. So far with me?
By "not reusing" I meant that there must be no way from the 'undead' state
back to functional. Once a data structure is in that state the reference
counter cannot be increased and the connection will never be reestablished.
If the physical device is still present a new data structure must be allocated.

> > > The problem is that physical USB devices aren't data structures -- you
> > > can't deallocate one and then allocate a new copy when you need it! 
> > > Some form of synchronization is needed if we want to prevent multiple
> > > drivers from talking to the same interface at the same time.
> >
> > Nothing prevents giving out 'struct usb_endpoint_binding's which URBs
> > could be addressed to. They could have proper reference counting.
> > You could have them on lists which you walk in case of disconnect(),
> > config change, etc ...
>
> That is just what David has proposed for 2.7.  We should give some extra
> thought to the problem of dealing with ep 0, however.

David is right. It seems to me that there's a problem with ep0 only if
we do reference counting on some internal representation of the device.
That would only shift the problem. We should actually allocate a data
structure with every binding which can be refcounted and io addressed to.

        Regards
                Oliver



-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to