Saya menerapkan driver PCIe, dan saya ingin memahami pada level apa interupsi dapat atau harus diaktifkan / dinonaktifkan. Saya sengaja tidak menentukan OS, karena saya berasumsi itu harus relevan untuk platform apa pun. Yang saya maksud dengan level adalah sebagai berikut:
- Kerangka kerja penanganan OS yang spesifik
- Interupsi dapat dinonaktifkan atau diaktifkan di register ruang konfigurasi PCI / PCIe, mis. Register PERINTAH
- Interupsi juga dapat ditutup pada level perangkat, misalnya kita dapat mengkonfigurasi perangkat tidak memicu interupsi tertentu ke host
Saya mengerti bahwa apa pun jenis interupsi yang digunakan pada PCIe (emulasi INTx, MSI atau MSI-X), itu harus dikirim ke OS host.
Jadi pertanyaan saya adalah - apakah kita benar-benar harus mengaktifkan atau menonaktifkan interupsi pada setiap layer, atau itu hanya cukup di dekat perangkat keras, misalnya dalam register PCI yang relevan?
interrupts
bus
pcie
Menandai
sumber
sumber
Jawaban:
Sistem operasi umumnya mengeluh keras tentang gangguan yang tidak terduga, karena ini adalah kesalahan pemrograman yang mudah terdeteksi pada driver.
Biasanya, perangkat keras Anda akan mulai dalam keadaan yang cukup lembam setelah mengatur ulang di mana ia menunggu untuk dikonfigurasi. Dalam keadaan ini, tidak ada cara yang berarti untuk menghasilkan interupsi, karena belum ada pemetaan yang ditetapkan dan Anda tidak tahu interupsi mana.
Selama konfigurasi, pemetaan interupsi muncul, dan kartu diberi tahu jalur interupsi mana yang harus digunakan (INTA..INTD sebagai legacy PCI, atau MSI / MSI-X), tetapi masih belum ada driver untuk menangani interupsi. Linux memiliki pengendali default di sini yang mengeluh ke log sistem dan kemudian menonaktifkan sumber interupsi, karena peranti kerasnya kelihatannya rusak (yaitu secara default, semua interupsi diaktifkan, tetapi hanya mereka yang penangannya terdaftar diharapkan benar-benar terjadi) .
Pengemudi akhirnya mendaftarkan penangan interupsi dan mengaktifkan interupsi yang diinginkannya. Jika pengemudi tidak lagi tertarik pada kondisi tertentu, ia perlu menonaktifkan interupsi pada perangkat, karena di situlah penyebab interupsi spesifik perangkat ditutup - lapisan bawah hanya tahu bahwa "sesuatu terjadi".
sumber