PRB: OSR 2.1 - OHCI Driver May Not Break Up Transfers Correctly

ID: Q200916


The information in this article applies to:


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 this to be a problem in the Microsoft products listed at the beginning of this article. This problem has been fixed in Windows 98.


Keywords          : kbDDK kbWinOS95bug 
Version           : WINDOWS:Windows 95
Platform          : WINDOWS 
Issue type        : kbprb 

Last Reviewed: March 6, 1999