Co to są dziwactwa PCI?

10

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?

Devyn Collier Johnson
źródło
1
Dziwactwo to po prostu nieintuicyjna niekonsekwencja. To nie jest termin techniczny. Prawdopodobnie musielibyśmy zobaczyć tekst, do którego się odwołujesz, aby rozwinąć to, co mówią. Chociaż istnieje plik, który zawiera procedury, których kierowcy mogą używać do obejścia różnych dziwactw, na które natrafili przez lata. Ale ostatecznie jest to tylko nieformalny termin używany w tym samym znaczeniu, co zwykły termin języka angielskiego.
Bratchley,
1
Jeśli jesteś naprawdę ciekawy, ten plik jest dość dobrze skomentowany, wyjaśniając, co robi każda procedura.
Bratchley,

Odpowiedzi:

14

„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");
        }
}
Chris Down
źródło
@Chris Down - jak mogę zauważyć, że moje urządzenie ma dziwactwa PCI? A co by się stało, jeśli wyłączę PCI quirk workaroundsw jądrze?
Martin Vegter
To zależy całkowicie od posiadanego urządzenia. W zależności od urządzenia w dzienniku jądra może znajdować się komunikat informujący o zastosowaniu dziwnego obejścia (jak w drugim przykładzie powyżej) lub może nie być. Jedynym pewnym sposobem jest poszukiwanie quirks.cdostawcy 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.
ruscur
Jednym z przykładów „tego, co by się stało” może być na przykład sterownik karty wideo, który nie może odczytać BIOS-u karty wideo, a ostatecznie nie może poprawnie go skonfigurować. Mając na CONFIG_PCI_QUIRKSplecach w poprawek jądra problem.
PF4Publiczny
To, co by się stało, jest specyficzne dla dziwactwa. Może być gdziekolwiek, nic się nie dzieje, zawiesza / powoduje awarię komputera. Technicznie rzecz biorąc, niektóre komponenty mogą wydostawać się z dymu, co jest gorsze niż zawieszenie. Każdy wpis ma swój konkretny problem, którego nie można w żaden sposób wiązać z problemami innych marek lub modeli.
old_timer