Code was recently added to the xhci driver to dynamically add extra ring segments if there is insufficient space for all the fragments of the URB being sent. ISTM that it would be better to just queue the URB (on the ring) and process it when space becomes available. This wouldn't solve the problem of pathologically badly fragmented, or very long URB, but there are simpler solutions to that. I believe that very long bulk transfers can be split into separate TD on USB block boundaries - so they can be safely added to the ring in several pieces. I don't know if any other data type is allowed to exceed the block length? Badly fragmented URB are probably best copied into a linear buffer. This would make the code a lot simpler, especially since the tx setup could be started if there were a 'reasonable' number of free entries in the TRB ring without having to calculate the actual number needed (and Additionally it would make it possible to ensure that LINK TRB only happen on the appropriate boundary. This might require some fragments be copied to a linear buffer. If this is a reasonable idea I'll volunteer to do the changes. We are seeing some issues with the xhci driver, and parts of it are just to contorted! David -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html