On Thu, Mar 07, 2013 at 03:38:46PM +0530, Vivek Gautam wrote: > Hi Sarah, > > > While going through the code for Handling Transfer Events > (drivers/usb/host/xhci-ring.c), i hit upon this problem. > As defined in "drivers/usb/host/xhci.h" > > /* Normal TRB fields */ > /* transfer_len bitmasks - bits 0:16 */ > #define TRB_LEN(p) ((p) & 0x1ffff) > > And the same macro i could see being used while Handling Trasfer > events "handle_tx_event()", and further in > process_ctrl_td(), process_isoc_td(), and process_bulk_intr_td(). > > However, as per XHCI specs (Rev 1.0, 5/21/10) section 6.4.2.1 for > Transfer event TRBs, the transfer length is bits 0:23 > thereby something like below could be valid: > > /* Transfer event TRB length bit mask */ > /* bits 0:23 */ > #define EVENT_TRB_LEN(p) ((p) & 0xffffff) > > This difference is confusing somewhat. > I hope the current code must be pretty much fine, and there could be > something that i might be stupidly missing. Nope, you've caught an honest-to-goodness bug. :) Would you like to submit a patch to fix this? It should be pretty easy to look at the context in xhci-ring.c and figure out whether the function is queueing a TRB (and thus should use the TRB_LEN macro) or handling a event TRB (and should be using the new EVENT_TRB_LEN macro). Sarah Sharp -- 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