diff --git a/reactos/drivers/usb/usbehci/usb_queue.cpp b/reactos/drivers/usb/usbehci/usb_queue.cpp index ae40c263adb..df473174e39 100644 --- a/reactos/drivers/usb/usbehci/usb_queue.cpp +++ b/reactos/drivers/usb/usbehci/usb_queue.cpp @@ -478,14 +478,6 @@ CUSBQueue::LinkQueueHead( //ASSERT(IsListEmpty(&HeadQueueHead->LinkedQueueHeads)); InsertTailList(&HeadQueueHead->LinkedQueueHeads, &NewQueueHead->LinkedQueueHeads); - // - // Update HLP for Previous QueueHead, which should be the last in list. - // - Entry = NewQueueHead->LinkedQueueHeads.Blink; - LastQueueHead = CONTAINING_RECORD(Entry, QUEUE_HEAD, LinkedQueueHeads); - //ASSERT(LastQueueHead == HeadQueueHead); - LastQueueHead->HorizontalLinkPointer = (NewQueueHead->PhysicalAddr | QH_TYPE_QH); - // // Update HLP for NewQueueHead to point to next, which should be the HeadQueueHead // @@ -494,6 +486,16 @@ CUSBQueue::LinkQueueHead( //ASSERT(NextQueueHead == HeadQueueHead); NewQueueHead->HorizontalLinkPointer = (NextQueueHead->PhysicalAddr | QH_TYPE_QH); + _ReadWriteBarrier(); + + // + // Update HLP for Previous QueueHead, which should be the last in list. + // + Entry = NewQueueHead->LinkedQueueHeads.Blink; + LastQueueHead = CONTAINING_RECORD(Entry, QUEUE_HEAD, LinkedQueueHeads); + //ASSERT(LastQueueHead == HeadQueueHead); + LastQueueHead->HorizontalLinkPointer = (NewQueueHead->PhysicalAddr | QH_TYPE_QH); + // // head queue head must be halted //