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

Reply via email to