On 8/26/2016 3:06 AM, Felipe Balbi wrote: > > Hi, > > John Youn <John.Youn@xxxxxxxxxxxx> writes: >> On 8/25/2016 12:38 AM, Felipe Balbi wrote: >>> We need to decrement in both cases (enq > deq and >>> enq < deq) >>> >>> Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> >>> --- >>> drivers/usb/dwc3/gadget.c | 5 +---- >>> 1 file changed, 1 insertion(+), 4 deletions(-) >>> >>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c >>> index 594e82595634..e4ef9ed1a143 100644 >>> --- a/drivers/usb/dwc3/gadget.c >>> +++ b/drivers/usb/dwc3/gadget.c >>> @@ -884,12 +884,9 @@ static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep) >>> return DWC3_TRB_NUM - 1; >>> } >>> >>> - trbs_left = dep->trb_dequeue - dep->trb_enqueue; >>> + trbs_left = dep->trb_dequeue - dep->trb_enqueue - 1; >>> trbs_left &= (DWC3_TRB_NUM - 1); >>> >>> - if (dep->trb_dequeue < dep->trb_enqueue) >>> - trbs_left--; >>> - >>> return trbs_left; >>> } >>> >>> >> >> Hi Felipe, >> >> I don't think that's right. >> >> The decrement is accounting for the fact that the link TRB is taking >> up one of the free spots. That is only the case when the deq < enq. >> >> See the examples below to illustrate this >> >> >> Example 1 (DWC3_TRB_NUM = 8): After the initial state of the ring, >> queue on TRB. >> >> 0: TRB <- deq >> 1: empty <- enq >> 2: empty >> 3: empty >> 4: empty >> 5: empty >> 6: empty >> 7: LINK TRB >> >> enq=1, deq=0 >> >> num_free => >> (deq - enq) % DWC3_TRB_NUM => >> (0 - 1) % 8 => >> 0xffffffff % 8 => >> 7 slots free >> >> One of the free slots is take up by link trb so decrement by 1: >> >> 7 - 1 => 6 slots free >> >> >> Example 2 (DWC3_TRB_NUM = 8): The enqueue pointer has wrapped around >> and started enqueue from the beginning of the ring again, but the >> dequeue pointer hasn't wrapped yet. >> >> 0: TRB >> 1: empty <- enq >> 2: empty >> 3: empty >> 4: TRB <- deq >> 5: TRB >> 6: TRB >> 7: LINK TRB >> >> enq = 1, deq = 4 >> >> num_free => >> (deq - enq) % DWC3_TRB_NUM => >> (4 - 1) % 8 => >> 3 slots free >> >> No need to decrement by 1. > > Argh, you're right. Can you send a revert patch. I ended up sending this > to Greg. Sorry. > Sure. I'll send shortly. Regards, John -- 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