Que sont les bizarreries PCI?

10

J'entends beaucoup parler des bizarreries PCI en lisant sur le noyau Linux, mais aucun site Web n'explique ni ne définit les bizarreries PCI. Que sont les bizarreries PCI?

Devyn Collier Johnson
la source
1
Une bizarrerie n'est qu'une incohérence non intuitive. Ce n'est pas un terme technique. Nous aurions probablement besoin de voir le texte dont vous parlez afin de préciser ce qu'ils disent. Bien qu'il existe un fichier qui fournit des routines que les pilotes peuvent utiliser pour contourner diverses bizarreries qu'ils ont rencontrées au fil des ans. Mais en fin de compte, c'est juste un terme informel utilisé dans le même sens que le terme anglais courant.
Bratchley
1
Si vous êtes vraiment curieux, ce fichier est assez bien commenté expliquant ce que fait chaque routine.
Bratchley

Réponses:

14

Les «bizarreries» sont des attributs d'un périphérique qui sont considérés comme non conformes au fonctionnement attendu.

Voici un exemple de 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 */
}

Il s'agit d'une "bizarrerie" car l'appareil signale des erreurs parasites. Lorsque ce périphérique est opérationnel, le quirk définit certains attributs qui font agir différemment d'autres parties du noyau (peut-être en ignorant les erreurs parasites ou en contournant un problème connu).

Cependant, toutes les bizarreries du noyau Linux ne sont pas comme ça. Au lieu de simplement désactiver la fonctionnalité affectée, certains essaient de contourner ce problème, par exemple:

/*
 * 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
la source
@Chris Down - comment pourrais-je remarquer que mon appareil a des bizarreries PCI? Et que se passerait-il si je désactivais PCI quirk workaroundsdans le noyau?
Martin Vegter
Cela dépend entièrement de l'appareil que vous possédez. Selon le périphérique, il peut y avoir un message dans le journal du noyau mentionnant qu'une solution de contournement a été appliquée (comme dans le deuxième exemple ci-dessus), ou il peut ne pas y en avoir. Le seul moyen infaillible consiste à rechercher quirks.cle fournisseur et / ou l'appareil. La désactivation des bizarreries pourrait avoir un effet varié selon la gravité de la solution de contournement; cela pourrait n'avoir aucun effet secondaire notable ou entraîner un dysfonctionnement de l'appareil.
ruscur
Un exemple de «ce qui se passerait» pourrait être, par exemple, le pilote de la carte vidéo incapable de lire le BIOS de la carte vidéo et, finalement, incapable de le configurer correctement. Le CONFIG_PCI_QUIRKSretour dans le noyau résout le problème.
PF4Public
Ce qui se passerait est spécifique à la bizarrerie. Il se peut que rien ne se produise s'il bloque / plante la machine. Techniquement, une partie de la fumée peut également s'échapper de certains composants, ce qui est pire qu'un blocage. Chaque entrée est un problème spécifique qui ne doit en aucun cas être lié à des problèmes d'autres marques ou modèles.
old_timer