[USBEHCI][USBOHCI]
authorThomas Faber <thomas.faber@reactos.org>
Wed, 26 Apr 2017 10:53:32 +0000 (10:53 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Wed, 26 Apr 2017 10:53:32 +0000 (10:53 +0000)
- Touch the virtual address of DMA buffers before calling MmGetPhysicalAddress on them. This ensures page directories are correctly set up for the current process context, and fixes random DMA operation failures ("MM:MmGetPhysicalAddressFailed"). This is not a hack -- using MmGetPhysicalAddress for DMA in the first place is.
CORE-9224 #resolve

svn path=/trunk/; revision=74408

reactos/drivers/usb/usbehci/usb_request.cpp
reactos/drivers/usb/usbohci/usb_request.cpp

index 39c58f4..abffd0d 100644 (file)
@@ -615,8 +615,9 @@ CUSBRequest::InitDescriptor(
     do
     {
         //
-        // get address
+        // get address (HACK)
         //
+        *(volatile char *)TransferBuffer;
         Address = MmGetPhysicalAddress(TransferBuffer);
 
         //
index 1531306..1fb126a 100644 (file)
@@ -784,8 +784,9 @@ CUSBRequest::BuildIsochronousEndpoint(
         }
 
         //
-        // get physical page
+        // get physical page (HACK)
         //
+        *(volatile char *)TransferBuffer;
         Page = MmGetPhysicalAddress(Buffer).LowPart;
 
         //