Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gambar berikut menunjukkan cara kerja sinkronisasi utas untuk driver miniport tampilan mode kernel (KMD) di WDDM.
Jika timeout perangkat keras terjadi, sistem memulai proses Deteksi dan Pemulihan Batas Waktu (TDR). Penjadwal GPU memanggil fungsi DxgkDdiResetFromTimeout driver, yang mengatur ulang GPU:
- DxgkDdiResetFromTimeout dipanggil secara sinkron dengan fungsi KMD lainnya, kecuali untuk fungsi manajemen daya runtime DxgkDdiSetPowerComponentFState dan DxgkDdiPowerRuntimeControlRequest. Artinya, OS menjamin bahwa tidak ada utas lain yang berjalan di driver sementara utas DxgkDdiResetFromTimeout berjalan.
- OS juga menjamin bahwa aplikasi tidak dapat mengakses buffer bingkai selama panggilan ke DxgkDdiResetFromTimeout. Oleh karena itu, driver dapat mengatur ulang pengontrol memori pengunci fase (PLL) dan seterusnya.
Meskipun utas pemulihan menjalankan DxgkDdiResetFromTimeout, interupsi dan panggilan prosedur yang ditangguhkan (DPC) dapat terus dipanggil. Fungsi KeSynchronizeExecution dapat digunakan untuk menyinkronkan bagian prosedur reset dengan gangguan perangkat.
Setelah driver kembali dari DxgkDdiResetFromTimeout, sebagian besar fungsi driver dapat kembali dipanggil, dan OS mulai membersihkan sumber daya yang tidak lagi diperlukan. Selama periode pembersihan, fungsi driver berikut dipanggil karena alasan yang ditunjukkan:
Driver dipanggil untuk memberi tahu tentang alokasi yang dipindahkan.
Misalnya, jika alokasi dilakukan di segmen memori, fungsi DxgkDdiBuildPagingBuffer driver dipanggil dengan anggota Operation dari struktur DXGKARG_BUILDPAGINGBUFFER diatur ke DXGK_OPERATION_TRANSFER dan anggota Transfer.Size diatur ke nol untuk memberi tahu driver tentang pengusiran. Tidak ada transfer konten yang terlibat karena konten hilang selama reset.
Jika alokasi dilakukan paging dalam segmen aperture, fungsi DxgkDdiBuildPagingBuffer driver dipanggil dengan anggota Operation DXGKARG_BUILDPAGINGBUFFER diatur ke DXGK_OPERATION_UNMAP_APERTURE_SEGMENT untuk memberi instruksi kepada driver agar melepaskan pemetaan alokasi dari aperture.
Fungsi driver DxgkDdiReleaseSwizzlingRange dipanggil untuk merilis apertur unswizzling dan rentang aperture segmen.
Driver tidak boleh mengakses GPU selama panggilan sebelumnya kecuali benar-benar diperlukan.
Setelah periode pembersihan selesai, OS memanggil fungsi DxgkDdiRestartFromTimeout pada driver untuk memberi tahu driver bahwa pembersihan telah selesai serta bahwa OS akan kembali menggunakan kartu grafis untuk pemrosesan.