Dużo słyszę o dziwactwach PCI podczas czytania o jądrze Linuksa, ale żadna strona internetowa nie wyjaśnia ani nie definiuje dziwactw PCI. Co to są dziwactwa PCI?
Dużo słyszę o dziwactwach PCI podczas czytania o jądrze Linuksa, ale żadna strona internetowa nie wyjaśnia ani nie definiuje dziwactw PCI. Co to są dziwactwa PCI?
Odpowiedzi:
„Dziwactwa” to atrybuty urządzenia, które uważa się za niezgodne z oczekiwanym działaniem.
Oto przykład z 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 */
}
Jest to „dziwactwo”, ponieważ urządzenie zgłasza fałszywe błędy. Kiedy to urządzenie działa, dziwactwo ustawia pewne atrybuty, które powodują, że inne części jądra działają inaczej (być może poprzez ignorowanie fałszywych błędów lub obejście znanego problemu).
Jednak nie wszystkie dziwactwa w jądrze Linuksa są takie. Zamiast po prostu wyłączyć funkcję, której dotyczy problem, niektórzy próbują ją obejść, na przykład:
/*
* 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");
}
}
PCI quirk workarounds
w jądrze?
quirks.c
dostawcy i / lub urządzenia. Wyłączenie dziwactw może mieć różny wpływ w zależności od tego, jak poważne jest to obejście; może nie powodować zauważalnych skutków ubocznych lub może powodować nieprawidłowe działanie urządzenia.
CONFIG_PCI_QUIRKS
plecach w poprawek jądra problem.