MiniportProcessSGList() - Seeing out of order pkts on wire

Hi

I am seeing out of order tx pkts on the wire. I verified the protocol/NDIS/miniport do not coalesce/split he NBL chain, except miniport indicated that they do NdisMAllocateNetBufferSGList for each NBL (and does SendComplete one by one).

My question is, if we call NdisMAllocateNetBufferSGList() in the sequence of NBL 1,2,3, is it possible that the MiniportProcessSGList() can come out of order say 1,3,2. Also, do we know if callbacks are on the same core?

And both NdisMAllocateNetBufferSGList/MiniportProcessSGList are cntacted to be called at DISPTACH_LEVEL, so I guess it is yes to all of above i.e. in order callbacks, and same core as well? But just wat to confirm.

MiniportProcessSGList
http://msdn.microsoft.com/en-us/library/windows/hardware/ff559420(v=vs.85).aspx

Do you have DriverVerifier enabled with DMA verificaton?

>

I am seeing out of order tx pkts on the wire. I verified the
protocol/NDIS/miniport do not coalesce/split he NBL chain, except miniport
indicated that they do NdisMAllocateNetBufferSGList for each NBL (and does
SendComplete one by one).

My question is, if we call NdisMAllocateNetBufferSGList() in the sequence of
NBL 1,2,3, is it possible that the MiniportProcessSGList() can come out of
order say 1,3,2. Also, do we know if callbacks are on the same core?

And both NdisMAllocateNetBufferSGList/MiniportProcessSGList are cntacted
to be called at DISPTACH_LEVEL, so I guess it is yes to all of above i.e. in order
callbacks, and same core as well? But just wat to confirm.

As per the link you sent:

"
HAL can call MiniportProcessSGList before or after NDIS returns from NdisMAllocateNetBufferSGList. Therefore, driver writers should not assume that the call is made within the context of NdisMAllocateNetBufferSGList.
"

Which implies that it could be any core, which might explain what you are seeing… can you limit the system to 1 core and see if the problem goes away? That might tell you if at least the scheduling of the sending of packets is done in order.

Can you put some code in the various Process and Complete routines to track what order things get called at?

James

Thanks I will run with DV DMA check enabled and also do above instrumenattion as well.