Що таке примхи PCI?


10

Я багато чую про хитрощі PCI, читаючи про ядро ​​Linux, але жоден веб-сайт не пояснює і не визначає химерності PCI. Що таке примхи PCI?


1
Вигадка - це просто неінтуїтивна непослідовність. Це не технічний термін. Напевно, нам потрібно буде переглянути текст, на який ви посилаєтесь, щоб детальніше розповісти про те, що вони говорять. Хоча є файл, який передбачає, що драйвери підпрограми можуть використовувати для вирішення різних химерностей, з якими вони стикалися протягом багатьох років. Але в кінцевому підсумку це просто неофіційний термін, що використовується в тому ж сенсі, що і звичайний термін англійської мови.
Братчлі

1
Якщо ви справді цікаві, цей файл досить добре прокоментується, пояснюючи, що робить кожна програма.
Братчлі

Відповіді:


14

"Примхи" - це атрибути пристрою, які вважаються невідповідними очікуваній роботі.

Ось приклад із 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в ядрі?
Мартін Вегтер

Це повністю залежить від того, який пристрій у вас є. Залежно від пристрою, у журналі ядра може бути повідомлення, в якому згадується примхливе вирішення проблеми (як у другому прикладі вище), а може і не бути. Єдиний надійний спосіб - це шукати quirks.cпродавця та / або пристрою. Відключення примх може мати різний ефект залежно від того, наскільки серйозним є рішення; це може не мати помітних побічних ефектів або може призвести до неправильної роботи пристрою.
ruscur

Одним із прикладів "що трапиться" може бути, наприклад, те, що драйвер відеокарти не в змозі прочитати BIOS з відеокарти, і врешті-решт не зможе її правильно налаштувати. Маючи CONFIG_PCI_QUIRKSще в ядрі виправляє питання.
PF4Public

Що б сталося, є специфічним для химерності. Це може бути де завгодно, нічого не трапиться, коли він висить / вибиває машину. Технічно деякий дим може бути випущений з деяких компонентів, що гірше, ніж у підвішеному. Кожен запис є власною специфічною проблемою, яку не можна вважати якось пов’язаною з проблемами інших марок чи моделей.
old_timer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.