¿Qué son las peculiaridades de PCI?

10

Escucho mucho sobre las peculiaridades de PCI cuando leo sobre el kernel de Linux, pero ningún sitio web explica o define las peculiaridades de PCI. ¿Qué son las peculiaridades de PCI?

Devyn Collier Johnson
fuente
1
Una peculiaridad es solo una inconsistencia no intuitiva. No es un término técnico. Probablemente tendremos que ver el texto al que te refieres para elaborar lo que están diciendo. Aunque hay un archivo que proporciona rutinas que los controladores pueden usar para solucionar varias peculiaridades con las que se han encontrado a lo largo de los años. Pero, en última instancia, es solo un término informal utilizado en el mismo sentido que el término regular en inglés.
Bratchley
1
Si tienes curiosidad, ese archivo está bastante bien comentado y explica qué hace cada rutina.
Bratchley

Respuestas:

14

Las "peculiaridades" son atributos de un dispositivo que se consideran no conformes con la operación esperada.

Aquí hay un ejemplo 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 */
}

Esta es una "peculiaridad" ya que el dispositivo informa errores espurios. Cuando este dispositivo está operativo, la peculiaridad establece ciertos atributos que hacen que otras partes del núcleo actúen de manera diferente (tal vez al ignorar errores espurios o al solucionar un problema conocido).

Sin embargo, no todas las peculiaridades en el kernel de Linux son así. En lugar de simplemente deshabilitar la función afectada, algunos intentan evitarla, por ejemplo:

/*
 * 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
fuente
@Chris Down: ¿cómo notaría que mi dispositivo tiene peculiaridades PCI? ¿Y qué pasaría si desactivo PCI quirk workaroundsen el núcleo?
Martin Vegter
Eso depende completamente de qué dispositivo tienes. Dependiendo del dispositivo, puede haber un mensaje en el registro del kernel que menciona que se ha aplicado una solución alternativa (como en el segundo ejemplo anterior), o puede que no lo haya. La única forma segura es buscar quirks.cel proveedor y / o dispositivo. Deshabilitar las peculiaridades podría tener un efecto variado dependiendo de la gravedad de la solución; podría no tener efectos secundarios notables o podría hacer que el dispositivo no funcione correctamente.
ruscur
Un ejemplo de "lo que sucedería" podría ser, por ejemplo, que el controlador de la tarjeta de video no puede leer el BIOS de la tarjeta de video y al final no puede configurarlo correctamente. Tener de CONFIG_PCI_QUIRKSvuelta en el núcleo soluciona el problema.
PF4Public
Lo que sucedería es específico de la peculiaridad. Podría estar en cualquier lugar desde que no pasa nada, cuelga / bloquea la máquina. Técnicamente, también se puede dejar salir algo de humo de algunos componentes, lo que es peor que una caída. Cada entrada es su propio problema específico que no debe suponerse relacionado de ninguna manera con otros problemas de marcas o modelos.
old_timer