Sdílet prostřednictvím


Detekce zablokování UE: Kroky 1–14

Kroky 1 až 14 pro detekci zablokování UE jsou popsány níže. Kroky odpovídají diagramu uvedenému v zjišťování zablokování UE atoku obnovení .

Tento příklad používá OID_SET_POWER.

  1. NDIS obdrží IRP pro systémové napájení nebo aktivní reference síťové karty klesnou na 0.

  2. NDIS vygeneruje OID_SET_POWER D3 pro ovladač WDI.

  3. WDI nastaví časovač pro příkaz WDI (M1), včetně úkolu před odesláním identifikátoru WDI dolů do LE. Pokud je příkazem úkol, nastaví se také další časovač úkolu. Oba časovače mohou vypršet, ale nejvýše jeden může aktivovat obnovení.

  4. WDI odešle příkaz WDI do LE. Doporučení pro LE je zapamatovat si WDI OID ve struktuře adaptéru, pokud k dokončení OID potřebuje příkaz firmwaru. Jakmile firmware dokončí úlohu pro WDI OID, LE dokončí identifikátor OID a odebere ho ze struktury adaptéru. Vzhledem k tomu, že WDI serializuje identifikátory OID do LE, LE potřebuje pouze jeden slot, aby si pamatoval čekající OID. Pokud je příkaz firmwaru zablokovaný, LE může kdykoliv vrátit identifikátor OID, ale nejpozději při neočekávaném odebrání (může být v kontextu neočekávaného odebrání) ve kroku 17, když je firmware zakázán. V jakýchkoli jiných případech LE jednoduše dokončí WDI OID, když firmware dokončí odpovídající úlohu, a to bez ohledu na to, zda je to před, nebo po zpětném volání diagnostiky. Pokud si LE potřebuje zapamatovat WDI OID po Diagnostiku, potřebuje další slot, aby si ho zapamatovalo. U identifikátorů OID přijatých po diagnostice by se však LE nemělo dotýkat firmwaru, aby se zabránilo postupnému zablokování.

  5. LE odešle příkaz do firmwaru.

  6. Pokud vypršel časový limit příkazu firmwaru, může to být způsobeno zaseknutím firmwaru nebo tím, že trvá příliš dlouho.

    • Pokud dokončení příkazu po vypršení časového limitu jednoduše trvá příliš dlouho, LE může dokončit příkaz WDI. UE ho správně zpracuje.
    • Pokud se firmware zablokuje, příkaz WDI se brzy nedokončí. LE musí dokončit při překvapivém odstranění v kroku 16, když byl hardware resetován, takže je bezpečné dokončit bez speciální manipulace pro potenciální podmínky závodu.
  7. Časovač WDI se aktivuje a vygeneruje příkaz WDI Diagnose. Tento příkaz WDI je volání ovladače LE, MiniportWdiAdapterHangDiagnose, místo WDI OID.

  8. LE shromažďuje stavy registru hardwarového řízení a volitelně úplný stav firmwaru.

    • Očekává se, že ovladač IHV bude shromažďovat obsah hardwarových registrů, který je omezen na 1 kB, a vrátit ho v rámci návratové hodnoty funkce. V předprodukčním prostředí by se LE také měl pokusit vypsat kontext firmwaru do souborů, aby IHV mohl provést důkladné posmrtné ladění. Přepínač lze implementovat jako klíč registru pro řízení shromažďování hardwarových registrů a image firmwaru.
    • LE také označuje aktuální příkaz pro zrušení. Pokud dokončení příkazu snaží se překonat diagnostiku, je přijatelné, pokud LE neprovádí žádnou akci pro tento příkaz.
    • Při čekání na tento příkaz může UE odesílat další příkazy WDI v důsledku resetování. Jedná se o příkazy v letu nebo příkazy pro vyčištění. Po diagnostickém hovoru by mělo LE je zpracovat, aniž by se dotýkalo firmwaru.
  9. WDI obdrží stav řídicího registru.

  10. WDI označí příkaz WDI hang, aby jej později označilo LE.

  11. WDI vrátí (dokončí) příkaz NDIS bez dokončení procesu WDI. To je bezpečné, protože WDI používá dvojité ukládání do vyrovnávací paměti pro příkazy NDIS.

  12. WDI volá rozhraní NDIS k resetování a volá na rozhraní NdisWriteErrorLogEntry s chybovým kódem NDIS_ERROR_CODE_HARDWARE_FAILURE (0xc000138a). Výsledkem je událost zaznamenáná v protokolu událostí systému s názvem modulu LE. ID události chyby se automaticky zobrazí jako (0xc000138a | 0xffff) – 0n5002. Pokud LE také používá stejný kód chyby k zápisu protokolů chyb, první DWORD dat by měl mít nastavený vysoký bit (0x80000000) pro snadnou separaci událostí LE. WDI používá 0x00000000 do 0x7fffffff pro první DWORD data.

  13. Volání se vrátí.

  14. NDIS dokončí IRP.

Po tomto bodu volá NDIS autobus, aby nás překvapil a znovu vypočítá. Je důležité poznamenat, že WDI dvakrát uloží příkazy NDIS do vyrovnávací paměti, aby nemusel čekat, až se příkaz WDI vrátí k dokončení příkazu NDIS. Tím se eliminuje nutnost, aby LE prováděla rušení logiky, které je nesmírně složité.

Dokončení NDIS OID_SET_POWER je nezbytné, aby se zabránilo uváznutí operací PnP. Všechny události změny stavu napájení a PnP jsou serializovány. To znamená, že pokud se identifikátor OID napájení sady nevrátí, NDIS nemůže vrátit hodnotu IRP set, což znamená, že obnovení resetování se uzamkne s Surprise-Remove IRP.

MiniportWdiAdapterHangDiagnose

Reset (neočekávané odebrání): kroky 15–20

Detekce zablokování UE a obnovení průběhu