//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
//
//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
//