Bagikan melalui


Deteksi gantung UE: Langkah 1-14

Langkah 1 hingga 14 deteksi gantung UE dijelaskan di bawah ini. Langkah-langkah sesuai dengan diagram yang ditunjukkan dalam deteksi gantung UE dan alur pemulihan.

Contoh ini menggunakan OID_SET_POWER.

  1. NDIS menerima IRP daya sistem atau referensi aktif NIC turun ke 0.

  2. NDIS menghasilkan OID_SET_POWER D3 ke driver WDI.

  3. WDI menetapkan timer untuk perintah WDI (M1), termasuk tugas sebelum mengirim WDI OID ke LE. Jika perintah adalah tugas, timer tambahan untuk tugas juga diatur. Kedua timer dapat kehabisan waktu, tetapi paling banyak, hanya satu yang dapat memicu pemulihan reset.

  4. WDI mengirimkan perintah WDI ke LE. Rekomendasi untuk LE adalah mengingat WDI OID dalam struktur adaptor jika memerlukan perintah firmware untuk menyelesaikan OID. Ketika firmware menyelesaikan pekerjaan untuk WDI OID, LE menyelesaikan OID dan menghapusnya dari struktur adaptor. Karena WDI menserialisasikan OID ke LE, LE hanya membutuhkan satu slot untuk mengingat WDI OID yang tertunda. Jika perintah firmware digantung, LE dapat mengembalikan OID kapan saja tetapi tidak lebih lambat dari penghapusan kejutan (dapat dalam konteks penghapusan mendadak) pada Langkah 17 ketika firmware telah dinonaktifkan. Untuk kasus lain, LE hanya menyelesaikan WDI OID ketika firmware menyelesaikan pekerjaan yang sesuai, terlepas dari apakah itu sebelum atau sesudah panggilan balik diagnosis. Jika LE perlu mengingat WDI OID setelah Diagnosis, perlu slot lain untuk mengingatnya. Namun, untuk OID yang diterima setelah Diagnosis, LE tidak boleh menyentuh firmware untuk menghindari hang bertingkat.

  5. LE mengirimkan perintah ke firmware.

  6. Jika perintah firmware kehabisan waktu, mungkin karena firmware menggantung atau terlalu lama.

    • Jika firmware hanya membutuhkan waktu terlalu lama untuk menyelesaikan perintah setelah waktu habis, LE dapat menyelesaikan perintah WDI. UE menanganinya dengan tepat.
    • Jika firmware digantung, perintah WDI tidak segera selesai. LE harus menyelesaikannya dengan kejutan-hapus pada Langkah 16 ketika perangkat keras telah diatur ulang, sehingga aman untuk diselesaikan tanpa penanganan khusus untuk kondisi balapan potensial.
  7. Timer WDI diaktifkan untuk menghasilkan perintah Diagnosis WDI. Perintah WDI ini adalah panggilan ke driver LE, MiniportWdiAdapterHangDiagnose, bukan WDI OID.

  8. LE mengumpulkan status register kontrol perangkat keras, dan secara opsional, status firmware penuh.

    • Driver IHV diharapkan untuk mengumpulkan konten pendaftaran perangkat keras yang terbatas pada 1KB, dan mengembalikannya dalam pengembalian fungsi. Selain itu, di lingkungan pra-produksi, LE juga harus mencoba membuang konteks firmware ke dalam file sehingga IHV dapat melakukan debug pasca-mortem secara menyeluruh. Sakelar dapat diimplementasikan sebagai kunci registri untuk mengontrol pengumpulan register perangkat keras dan gambar firmware.
    • LE juga menandai perintah saat ini untuk pembatalan. Jika penyelesaian perintah berlomba untuk mengalahkan diagnosis, itu dapat diterima jika LE tidak melakukan apa pun untuk perintah ini.
    • Dengan perintah ini tertunda, UE dapat mengirim perintah WDI lebih lanjut sebagai konsekuensi dari Reset. Ini adalah perintah dalam penerbangan atau perintah pembersihan. Setelah panggilan diagnosis, LE harus memprosesnya tanpa menyentuh firmware.
  9. WDI menerima status register kontrol.

  10. WDI menandai perintah hang WDI sehingga ditunjukkan kemudian oleh LE.

  11. WDI mengembalikan (menyelesaikan) perintah NDIS tanpa penyelesaian WDI. Ini aman karena perintah NDIS buffer ganda WDI.

  12. WDI memanggil NDIS untuk mengatur ulang dan memanggil NdisWriteErrorLogEntry dengan Kode KesalahanNDIS_ERROR_CODE_HARDWARE_FAILURE (0xc000138a). Ini menghasilkan peristiwa yang dicatat dalam log peristiwa sistem dengan nama modul LE. ID peristiwa kesalahan secara otomatis muncul sebagai (0xc000138a | 0xffff) – 0n5002. Jika LE juga menggunakan kode kesalahan yang sama untuk menulis log kesalahan, DWORD pertama data harus berisi set bit tinggi (0x80000000) untuk memisahkan peristiwa dengan mudah oleh LE. WDI menggunakan 0x00000000 untuk 0x7fffffff data DWORD pertama.

  13. Panggilan kembali.

  14. NDIS menyelesaikan IRP.

Setelah titik ini, NDIS memanggil bus untuk mengherankan menghapus dan menghitung kembali kita. Penting untuk dicatat bahwa perintah NDIS buffer ganda WDI sehingga tidak perlu menunggu perintah WDI kembali untuk menyelesaikan perintah NDIS. Ini menghilangkan kebutuhan LE untuk melakukan logika pembatalan, yang terkenal kompleks untuk dilakukan.

Penyelesaian OID_SET_POWER NDIS diperlukan untuk menghindari kebuntuan operasi PnP. Semua peristiwa perubahan PnP dan status daya diserialisasikan. Ini berarti bahwa jika Atur OID daya tidak kembali, NDIS tidak dapat mengembalikan IRP Atur daya, yang berarti Reset Pemulihan terkunci dengan IRP Surprise-Remove.

MiniportWdiAdapterHangDiagnose

Reset (penghapusan mendadak): langkah 15-20

Deteksi gantung UE dan alur pemulihan