PRB: OSR 2.1 - OHCI Driver May Not Break Up Transfers Correctly
Article ID: 200916
Article Last Modified on 10/16/2002
APPLIES TO
- Microsoft Win32 Device Driver Kit for Windows 2000
This article was previously published under Q200916
SYMPTOMS
When transferring data over an OHCI controller in Windows 95 OSR 2.x, a page-fault may occur or invalid data may be transferred if the data buffer used for the transfer has physically contiguous memory that spans more than two pages of memory.
CAUSE
There is a problem in the algorithm that is used to map physical buffer addresses to transfer descriptors in the OSR 2.x version of Openhci.sys. Specifically, the ending buffer address assigned to a transfer descriptor is incorrect when the area of the buffer being mapped has physically contiguous memory that spans more than two pages, and the starting address of the data buffer is divisible by the endpoint's maximum packet size.
RESOLUTION
You can work around this problem by ensuring that the beginning address of the data buffer passed to Openhci.sys is not divisible by the maximum packet size of the endpoint used for the transfer. By forcing the buffer to not start on a maximum packet boundary, Openhci.sys always maps less than 8K for each transfer descriptor, thus avoiding this problem.
STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article. This problem has been fixed in Windows 98.
Keywords: kbbug kbprb KB200916