3.5s delay between OperStatus Down and Up on NIC

Hi everyone,

I'm observing a consistent 3.5-second delay during the transition from IfOperStatusDown (2) to IfOperStatusUp (1) on a Realtek PCIe 2.5GbE Family Controller during the system boot process.

I am developing/monitoring an NDIS Filter Driver and noticed the following sequence in my logs:

  • T+3.265s: Filter driver's FilterAttach and FilterRestart handlers are called.

  • T+3.857s: The miniport reports OperStatus = 2 (Down).

  • T+7.388s: The miniport finally reports OperStatus = 1 (Up).

Log:

00:00:03.265 [NsmNF] HAttachHandler() #5 Realtek PCIe 2.5GbE...
00:00:03.265 [NsmNF] HRestartHandler() #5 Realtek PCIe 2.5GbE...
00:00:03.857 [NsmS] #5 Realtek ... OperStatus=2, AdminStatus=1
00:00:07.388 [NsmS] #5 Realtek ... OperStatus=1, AdminStatus=1

Context & Questions:

  1. Source of Delay: Is this ~3.5s gap typical for Realtek 2.5GbE NICs during hardware initialization (Auto-negotiation/PHY link-up), or could this be induced by NDIS stack serialization during boot?

  2. Filter Driver Impact: My FilterRestart completes almost immediately. Could the presence of a filter driver cause the underlying miniport to delay its media state notification, or is the miniport purely waiting for the PHY link?

  3. Internal Mechanism: Does anyone know if this specific Realtek hardware/driver waits for a specific timeout before signaling MediaConnectStateConnected to NDIS?

I want to determine if this is a "normal" hardware/link-layer characteristic or if there's something in the NDIS binding/restart sequence I should optimize.

Any insights would be greatly appreciated.

One way to solve this issue is to trace the calls to KeStallExecutionProcessor. I've quickly disassembled rt640x64.sys to find some device accesses are prefixed by a 30 ms delay.

Set up a kernel target, with a "touch-and-go" breakpoint when reading IAT.

ie. ba r8 rt640x64!_imp_KeStallExecutionProcessor ".printf \"us = %N\n\", @rcx; k; gc"

and the same for the rt640x64!RTDelay wrapper. The breakpoints can be improved.