> Maybe it's as simple > as having separate read and write QLocks. For normal endpoints it is that simple. Control endpoints, however, are bidirectional but effectively half-duplex, so reads and writes still need to be locked against each other.
Today's version of /n/sources/contrib/miller/9/bcm/usbdwc.c should do the right things.