multiple interface test case
Roman Kagan
rkagan at mail.ru
Wed Apr 13 07:33:58 EDT 2005
On Wed, Apr 13, 2005 at 01:17:37PM +0200, Duncan Sands wrote:
> > > release_interfaces: interface 0
> > > usb_driver_release_interface: skipping <= somehow I failed to see this!
> > > release_interfaces: interface 1
> > > usb_driver_release_interface: skipping
> > > release_interfaces: interface 2
> > > usb_driver_release_interface: skipping
> >
> > That is weird then: who has removed _all_ interfaces from the driver's
> > list? On the first disconnect(), the other two interfaces must still
> > remain on the list. Otherwise what does driver_detach() iterate over?
>
> I think it's this one, in device_release_driver:
>
> klist_del(&dev->knode_driver);
>
> it's called just before doing the disconnect call
>
> if (drv->remove)
> drv->remove(dev);
Exactly, that's what I meant, but that means that device_release_driver
has already been called for all three interfaces, but we were talking
about the _first_ disconnect() which is called from the _first_
device_release_driver().
> I suppose klist_del removes the driver from the list of drivers,
> which means that this test in usb_driver_release_interface fires:
>
> klist_node_attached(&dev->knode_driver)
>
> driver_detach iterates over devices, but this is a test on the
> driver.
klist_del() does both (similar to list_del_init()): it removes the node
from the list, and removes the reference to the list from the node. So
there's nothing new in -mm compared to vanilla -rc2 (BTW I've fetched
-mm3, there are no relevant changes wrt -mm2).
Frankly, I can't explain the messages above... Can you please
double-check it?
Thanks and cheers,
Roman.
More information about the Usbatm
mailing list