Apa itu kebiasaan PCI?

10

Saya mendengar banyak tentang kebiasaan PCI ketika membaca tentang kernel Linux, tetapi tidak ada situs web yang menjelaskan atau mendefinisikan kebiasaan PCI. Apa itu kebiasaan PCI?

Devyn Collier Johnson
sumber
1
Keunikan hanyalah ketidakkonsistenan non-intuitif. Itu bukan istilah teknis. Kami mungkin perlu melihat teks yang Anda maksud untuk menjelaskan apa yang mereka katakan. Meskipun ada file yang menyediakan driver rutin yang dapat digunakan untuk mengatasi berbagai keanehan yang mereka alami selama bertahun-tahun. Tetapi pada akhirnya, itu hanya istilah informal yang digunakan dalam arti yang sama dengan istilah bahasa Inggris reguler.
Bratchley
1
Jika Anda benar-benar ingin tahu, file itu cukup baik untuk menjelaskan apa yang dilakukan setiap rutinitas.
Bratchley

Jawaban:

14

"Quirks" adalah atribut perangkat yang dianggap tidak patuh dengan operasi yang diharapkan.

Ini contoh dari quirks.c:

/* The Mellanox Tavor device gives false positive parity errors
 * Mark this device with a broken_parity_status, to allow
 * PCI scanning code to "skip" this now blacklisted device.
 */
static void quirk_mellanox_tavor(struct pci_dev *dev)
{
        dev->broken_parity_status = 1;  /* This device gives false positives */
}

Ini adalah "kekhasan" karena perangkat melaporkan kesalahan palsu. Ketika perangkat ini beroperasi, quirk tersebut menetapkan atribut tertentu yang membuat bagian kernel lain bertindak berbeda (mungkin dengan mengabaikan kesalahan palsu, atau dengan mengatasi masalah yang diketahui).

Namun, tidak semua kebiasaan dalam kernel Linux seperti ini. Alih-alih hanya menonaktifkan fitur yang terpengaruh, beberapa mencoba untuk mengatasinya, misalnya:

/*
 * Some CS5536 BIOSes (for example, the Soekris NET5501 board w/ comBIOS
 * ver. 1.33  20070103) don't set the correct ISA PCI region header info.
 * BAR0 should be 8 bytes; instead, it may be set to something like 8k
 * (which conflicts w/ BAR1's memory range).
 */
static void quirk_cs5536_vsa(struct pci_dev *dev)
{
        if (pci_resource_len(dev, 0) != 8) {
                struct resource *res = &dev->resource[0];
                res->end = res->start + 8 - 1;
                dev_info(&dev->dev, "CS5536 ISA bridge bug detected "
                                "(incorrect header); workaround applied.\n");
        }
}
Chris Down
sumber
@ Chris Down - bagaimana saya melihat bahwa perangkat saya memiliki kebiasaan PCI? Dan apa yang akan terjadi, jika saya menonaktifkan PCI quirk workaroundskernel?
Martin Vegter
Itu sepenuhnya tergantung pada perangkat apa yang Anda miliki. Bergantung pada perangkat, mungkin ada pesan di log kernel yang menyebutkan solusi unik telah diterapkan (seperti pada contoh kedua di atas), atau mungkin tidak ada. Satu-satunya cara jitu adalah dengan mencari quirks.cvendor dan / atau perangkat. Menonaktifkan kebiasaan dapat memiliki efek bervariasi tergantung pada seberapa serius solusinya; itu bisa tidak memiliki efek samping yang nyata atau dapat menyebabkan perangkat tidak berfungsi dengan baik.
ruscur
Salah satu contoh "apa yang akan terjadi" bisa jadi, misalnya, driver kartu video tidak dapat membaca BIOS kartu video dan pada akhirnya tidak dapat mengkonfigurasi dengan benar. Memiliki CONFIG_PCI_QUIRKSkembali perbaikan kernel masalah ini.
PF4Public
Apa yang akan terjadi adalah khusus untuk kekhasan. Bisa di mana saja dari tidak ada yang terjadi hingga hang / crash mesin. Secara teknis, asap juga bisa keluar dari beberapa komponen yang lebih buruk daripada hang. Setiap entri adalah masalah spesifiknya sendiri untuk tidak dianggap terkait dengan masalah merek atau model lainnya.
old_timer