什么是PCI怪癖?


10

在阅读有关Linux内核的文章时,我听到很多关于PCI怪癖的信息,但是没有网站解释或定义PCI怪癖。什么是PCI怪癖?


1
怪癖只是一种非直觉的不一致。这不是一个技术术语。我们可能需要查看您所指的文字,以详细说明他们在说什么。尽管有一个文件提供了例程,驾驶员可以使用它们来解决他们多年来遇到的各种怪癖。但最终,它只是一个非正式术语,与常规英语术语含义相同。
布拉奇利

1
如果您真的很好奇,那么该文件将得到很好的注释,以解释每个例程的作用。
布拉奇利

Answers:


14

“ Quirks”是被认为与预期操作不兼容的设备属性。

这是来自的示例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 */
}

当设备报告虚假错误时,这是​​一个“怪癖”。当该设备可操作时,该怪癖会设置某些属性,这些属性使内核的其他部分以不同的方式起作用(也许通过忽略虚假错误或解决已知问题)。

但是,并非Linux内核中的所有怪癖都像这样。与其简单地禁用受影响的功能,不如尝试解决它,例如:

/*
 * 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-我怎么注意到我的设备有PCI怪癖?如果我PCI quirk workarounds在内核中禁用,将会发生什么?
Martin Vegter 2014年

这完全取决于您拥有的设备。根据设备的不同,内核日志中可能会出现一条消息,指出已应用了一个怪异的解决方法(如上面的第二个示例所示),或者可能没有。唯一的保证方法是寻找quirks.c供应商和/或设备。根据解决方法的严重程度,禁用怪癖可能会产生不同的效果。它可能没有明显的副作用,或者可能导致设备无法正常工作。
ruscur

“将发生的事情”的一个示例可能是,例如,视频卡驱动程序无法读取视频卡BIOS,最终无法正确配置它。其CONFIG_PCI_QUIRKS内核修复后面的问题。
PF4Public,

会发生什么是特定于怪癖的。它可能在任何地方挂起或摔碎机器都没有任何反应。从技术上讲,某些成分也可能散发出烟,这比吊死更糟。每个条目都是其自己的特定问题,不应假定与任何其他品牌或型号问题相关。
old_timer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.