Re: [linux-usb-devel] Re: [OOPS, usbcore, releaseintf] 2.6.0-test10-mm1

From: Duncan Sands
Date: Tue Dec 09 2003 - 15:32:16 EST


> Here's how I see it.
>
> dev->serialize is meant to protect significant state changes, things like
> set_configuration and device disconnect. ps->devsem is meant to protect
> against usbfs trying to do two things to the device at the same time.

Actually no: it is a read lock and all routines take it with down_read except
for the disconnect routine. So it is only there to guard against disconnect.

> But you also want to protect against usbfs using the device during a state
> change. (The normal protection mechanisms don't work because usbfs might
> be using a device without having a driver bound to any of its interfaces.)
> Given that, there's no reason usbfs shouldn't just use serialize instead
> of devsem.
>
> The fact that the core calls driver_disconnect with serialize already held
> then just makes your life simpler: You don't need to acquire the lock
> yourself!
>
> The only tricky part is that you have to release serialize (which now is
> your only lock) before calling set_configuration. But as you said, you
> would have to release ps->devsem anyway, so nothing's lost there.
>
> Anything wrong with this approach?

Nothing - that is exactly what my patch does. And it works... except
for the Oops in usb_put_dev.

All the best,

Duncan.
-
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/