Cosa sono le stranezze PCI?


10

Ho sentito molto parlare delle stranezze PCI quando leggo del kernel Linux, ma nessun sito web spiega o definisce le stranezze PCI. Cosa sono le stranezze PCI?


1
Una stranezza è solo un'incoerenza non intuitiva. Non è un termine tecnico. Probabilmente avremmo bisogno di vedere il testo a cui ti riferisci per elaborare ciò che stanno dicendo. Sebbene esista un file che fornisce routine che i driver possono utilizzare per aggirare varie stranezze che hanno incontrato negli anni. Ma alla fine, è solo un termine informale usato nello stesso senso del normale termine in lingua inglese.
Bratchley,

1
Se sei davvero curioso, quel file è abbastanza ben commentato che spiega cosa fa ogni routine.
Bratchley,

Risposte:


14

Le "stranezze" sono attributi di un dispositivo considerati non conformi al funzionamento previsto.

Ecco un esempio da 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 */
}

Questa è una "stranezza" in quanto il dispositivo segnala errori spuri. Quando questo dispositivo è operativo, la stranezza imposta alcuni attributi che fanno agire diversamente altre parti del kernel (forse ignorando errori spuri o aggirando un problema noto).

Tuttavia, non tutte le stranezze nel kernel Linux sono così. Invece di disabilitare semplicemente la funzionalità interessata, alcuni tentano di aggirarla, ad esempio:

/*
 * 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 - come potrei notare che il mio dispositivo ha stranezze PCI? E cosa accadrebbe se disabilitassi PCI quirk workaroundsnel kernel?
Martin Vegter,

Dipende interamente da quale dispositivo hai. A seconda del dispositivo, potrebbe esserci un messaggio nel registro del kernel che menziona una soluzione alternativa (come nel secondo esempio sopra), oppure potrebbe non esserci. L'unico modo infallibile è cercare quirks.cil fornitore e / o il dispositivo. La disabilitazione delle stranezze potrebbe avere un effetto diverso a seconda della gravità della soluzione alternativa; potrebbe non avere effetti collaterali evidenti o potrebbe causare il malfunzionamento del dispositivo.
ruscur,

Un esempio di "cosa accadrebbe" potrebbe essere, ad esempio, il driver della videocard che non è in grado di leggere il BIOS della videocard e alla fine non è in grado di configurarlo correttamente. Il CONFIG_PCI_QUIRKSrientro nel kernel risolve il problema.
PF4

Quello che succederebbe è specifico della stranezza. Potrebbe essere ovunque dal nulla accade che si blocca / si blocca la macchina. Tecnicamente potrebbe fuoriuscire del fumo anche da alcuni componenti, il che è peggio di un blocco. Ogni voce ha il suo specifico problema da non assumere in alcun modo correlato a problemi di altri marchi o modelli.
old_timer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.