Was sind PCI-Macken?

10

Ich höre viel über PCI-Macken, wenn ich über den Linux-Kernel lese, aber keine Website erklärt oder definiert PCI-Macken. Was sind PCI-Macken?

Devyn Collier Johnson
quelle
1
Eine Eigenart ist nur eine nicht intuitive Inkonsistenz. Es ist kein Fachbegriff. Wir müssten wahrscheinlich den Text sehen, auf den Sie sich beziehen, um näher auf das einzugehen, was sie sagen. Obwohl es eine Datei gibt , die Routinen enthält, mit denen Treiber verschiedene Macken umgehen können, auf die sie im Laufe der Jahre gestoßen sind. Aber letztendlich ist es nur ein informeller Begriff, der im gleichen Sinne wie der reguläre englischsprachige Begriff verwendet wird.
Bratchley
1
Wenn Sie wirklich neugierig sind, ist diese Datei ziemlich gut kommentiert und erklärt, was jede Routine tut.
Bratchley

Antworten:

14

"Macken" sind Attribute eines Geräts, die als nicht mit dem erwarteten Betrieb kompatibel angesehen werden.

Hier ist ein Beispiel aus 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 */
}

Dies ist eine "Eigenart", da das Gerät falsche Fehler meldet. Wenn dieses Gerät in Betrieb ist, legt die Eigenart bestimmte Attribute fest, die andere Teile des Kernels anders verhalten lassen (möglicherweise durch Ignorieren von Störfehlern oder durch Umgehen eines bekannten Problems).

Allerdings sind nicht alle Macken im Linux-Kernel so. Anstatt die betroffene Funktion einfach zu deaktivieren, versuchen einige, sie zu umgehen, zum Beispiel:

/*
 * 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
quelle
@ Chris Down - Wie würde ich feststellen, dass mein Gerät PCI-Macken hat? Und was würde passieren, wenn ich PCI quirk workaroundsim Kernel deaktiviere ?
Martin Vegter
Das hängt ganz davon ab, welches Gerät Sie haben. Abhängig vom Gerät enthält das Kernel-Protokoll möglicherweise eine Meldung, dass eine Quirk-Problemumgehung angewendet wurde (wie im zweiten Beispiel oben), oder nicht. Der einzige todsichere Weg besteht darin, quirks.cnach dem Hersteller und / oder Gerät zu suchen . Das Deaktivieren von Macken kann unterschiedliche Auswirkungen haben, je nachdem, wie ernst die Problemumgehung ist. Es kann keine erkennbaren Nebenwirkungen haben oder dazu führen, dass das Gerät nicht richtig funktioniert.
Ruscur
Ein Beispiel für "was passieren würde" könnte beispielsweise sein, dass der Videokartentreiber das Videokarten-BIOS nicht lesen und letztendlich nicht richtig konfigurieren kann. Nachdem CONFIG_PCI_QUIRKSwieder die Frage im Kernel - Korrekturen.
PF4Public
Was passieren würde, ist spezifisch für die Eigenart. Es könnte überall sein, wo nichts passiert, wenn die Maschine hängt / abstürzt. Technisch könnte auch etwas Rauch aus einigen Komponenten austreten, was schlimmer ist als ein Hang. Jeder Eintrag ist ein eigenes spezifisches Problem, von dem nicht angenommen werden kann, dass es in irgendeiner Weise mit Problemen anderer Marken oder Modelle zusammenhängt.
old_timer