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



The information in this article applies to:

  • Microsoft Win32 Device Driver Kit (DDK) Windows 95

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.

Modification Type:MajorLast Reviewed:10/16/2002
Keywords:kbBug kbprb KB200916