On 04/21/15 05:04, Tian, Feng wrote: > Baranee & Laszlo, > > I agree this is a bug and I made a unit test on this logic and found why this > issue didn't get raised before is because Fat&DiskIo driver will split big > data transfer request (>64K) to multiple of 64K. This way will cause a > request, that is a URB, only needs a transfer TRB, so it will not return > wrong completed data length as the Urb->DataLen is only accumulated once for > every URB request. > > But if a URB request needs multiple TRBs, then the Urb->Completed is > calculated wrongly. > > Here is my proposed fix, could you help review it? > > Index: XhciSched.c > =================================================================== > --- XhciSched.c (revision 17189) > +++ XhciSched.c (working copy) > @@ -1137,7 +1137,7 @@ > if ((TRBType == TRB_TYPE_DATA_STAGE) || > (TRBType == TRB_TYPE_NORMAL) || > (TRBType == TRB_TYPE_ISOCH)) { > - CheckedUrb->Completed += (CheckedUrb->DataLen - EvtTrb->Lenth); > + CheckedUrb->Completed += (((TRANSFER_TRB_NORMAL*)TRBPtr)->Length - > EvtTrb->Lenth); > } > > The TRBPtr->Length field means expected transfer length, and the > EvtTrb->Lenth means the residual number of bytes not transferred.
Can you please explain why "EvtTrb->Lenth" is the residue (ie. the number of bytes *not* transferred) instead of the number of bytes that have been transferred? My understanding would be helped most if you could provide: - an explanation of the code that implies this (it's quite complicated code...) - and a reference from the XHCI spec that the code implements. I'm asking because (as I wrote earlier) the XHCI spec defines EvtTrb->Lenth with different meanings in different contexts. In some contexts it is indeed a residue, but in other contexts EvtTrb->Lenth is the number of bytes actually transferred. I'm unsure which case we have at hand. Thanks! Laszlo ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel