O que são peculiaridades do PCI?

10

Eu ouço muito sobre peculiaridades do PCI ao ler sobre o kernel do Linux, mas nenhum site explica ou define as peculiaridades do PCI. O que são peculiaridades do PCI?

Devyn Collier Johnson
fonte
1
Uma peculiaridade é apenas uma inconsistência não intuitiva. Não é um termo técnico. Provavelmente precisaríamos ver o texto a que você está se referindo para elaborar o que eles estão dizendo. Embora exista um arquivo que fornece rotinas que os drivers podem usar para solucionar várias peculiaridades nas quais eles se depararam ao longo dos anos. Mas, no final das contas, é apenas um termo informal usado no mesmo sentido que o termo regular no idioma inglês.
Bratchley
1
Se você estiver realmente curioso, esse arquivo é muito bem comentado, explicando o que cada rotina faz.
Bratchley

Respostas:

14

"Peculiaridades" são atributos de um dispositivo considerado não compatível com a operação esperada.

Aqui está um exemplo 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 */
}

Isso é uma "peculiaridade", pois o dispositivo relata erros espúrios. Quando esse dispositivo está operacional, a peculiaridade define certos atributos que fazem com que outras partes do kernel atuem de maneira diferente (talvez ignorando erros espúrios ou resolvendo um problema conhecido).

Nem todas as peculiaridades do kernel do Linux são assim. Em vez de simplesmente desabilitar o recurso afetado, alguns tentam contorná-lo, por exemplo:

/*
 * 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
fonte
@ Chris Down - como eu notaria que meu dispositivo possui peculiaridades PCI? E o que aconteceria se eu desativar PCI quirk workaroundsno kernel?
Martin Vegter 28/09
Isso depende inteiramente de qual dispositivo você possui. Dependendo do dispositivo, pode haver uma mensagem no log do kernel mencionando que uma solução alternativa foi aplicada (como no segundo exemplo acima) ou pode não haver. A única maneira infalível é procurar quirks.co fornecedor e / ou o dispositivo. Desativar peculiaridades pode ter um efeito variado, dependendo da gravidade da solução alternativa; pode não ter efeitos colaterais visíveis ou fazer com que o dispositivo não funcione corretamente.
ruscur
Um exemplo de "o que aconteceria" poderia ser, por exemplo, o driver da placa de vídeo incapaz de ler o BIOS da placa de vídeo e, no final, incapaz de configurá-lo adequadamente. Ter CONFIG_PCI_QUIRKSde volta em correções de kernel a questão.
PF4Public
O que aconteceria é específico para a peculiaridade. Poderia estar em qualquer lugar, desde que nada aconteça, ele trava / trava a máquina. Tecnicamente, também pode ser liberado algum fumo de alguns componentes, o que é pior do que um problema. Cada entrada é um problema específico que não se supõe que esteja relacionado de forma alguma a problemas de outras marcas ou modelos.
old_timer 8/01