Вот здесь
Конфликт прерываний PCI-модуля и сетевых адаптеров в QNX4.25 - достаточно любопытное обсуждение, вскрывающее некоторые детали ... то, что это QNX а не Linux - не имеет никакого значения: это вопросы касательно железа, а железо, оно и в Африке железо...
Всё, что имеет касательство и к Linux из этого обсуждения, я позже прокомментирую.
Пока могу, то что из своего опыта помню, сказать, что:
1. Для обычных типовых десктопов, похожих как близнецы братья, установка PnP OS хоть в Yes, хоть в No - особо принципиальной разницы не будет иметь, и правильнее, пожалуй, запрещать PnP OS;
2. А вот для навороченных серверов от Sun, или AMD, с большим числом интерфейсов и периферии - это может иметь значение...
3. Вообще, всё, что касается инициализации PCI устройств, стоит того, чтобы в нём поразбираться и потерять время...
4. Для настройки сложной железки ещё такое же принципиальное значение как PnP OS может иметь установка режима контроллера прерываний по фронту (Edge) или по уровню (Level). В некоторых BIOS есть такая установка -
http://computerf1.at.ua/publ/bios/nastr ... /19-1-0-88:
PCI IRQ Activated By (Активизация прерывания)
Опции: Edge, Level
Это редкая функция BIOS которая позволяет выбирать метод активизации прерываний ваших PCI карт. ISA и старые PCI карты активизируются по перепаду уровня сигнала (используя единое напряжение), тогда как новые PCI и AGP карты активизируются только по уровню сигнала (используя составное напряжение). Когда PCI устройства только появились, опцию устанавливали в значение Edge потому как эти устройства ёщё не поддерживали распределение прерываний. Однако сейчас практически все PCI устройства поддерживают распределение IRQ, поэтому ставьте опцию в положение Level чтобы работало распределение, до тех пор пока вам не понадобится использовать старые PCI карты активизирующиеся по перепаду уровня сигнала.
(то, что здесь написано - весьма поверхностно, и не нужно на 100% принимать на веру).
С другой стороны, если в BIOS даже нет такой настройки, то для перепрограммирования контроллера IRQ с одного режима на другой нужно 2-3 процессорных команды, которые могут выполнять программы инициализации ОС, или драйверы - модули ядра Linux.
5. Для тяжёлых случаем, кроме выбора PnP OS Yes/No (кто будет инициализировать и расставлять линии прерываний?) есть ещё возможность вмешаться, и вручную расставить линии прерываний (все или некоторые) между слотами PCI:
PIRQ_0 Use IRQ No. ~ PIRQ_3 Use IRQ No. (Установка IRQ индивидуально)
Опции: Auto, 3, 4, 5, 7, 9, 10, 11, 12, 14, 15
Эта опция позволяет устанавливать прерывания индивидуально каждому устройству на PCI и AGP шине. Это очень полезная функция может пригодиться, если вы переносите жесткий диск с одного компьютера на другой, и вы не хотите переустанавливать операционную систему чтобы переопределить прерывания. Тогда вы можете подогнать установки прерываний к оригинальным и избежать множество проблем при установке жесткого диска в новую систему. Заметки:
Если вы укажите прерывание, такое же как для ISA шины возникнет конфликт.
Каждый PCI слот может активизировать до четырёх прерываний - INT A, INT B, INT C и INT D
AGP слот может активизировать два прерывания - INT A и INT B
Нормально когда каждый слот назначен как INT A. Остальные прерывания как резервы если PCI/AGP устройство потребует больше чем одно прерывание или если запрашиваемое прерывание занято.
AGP слот и PCI слот#1 распределяют одинаковые прерывания (IRQ)
PCI слот #4 и #5 распределяют одинаковые прерывания (IRQ)
USB использует PIRQ_4
Таблица показывающая связь между PIRQ (programmable interrupt request - программируемый запрос прерывания) и INT (Interrupt - прерывание):
Код: Выделить всё
Сигнал AGP Slot PCI Slot 2 PCI Slot 3 PCI Slot 4
PCI Slot 1 PCI Slot 5
PIRQ_0 INT A INT D INT C INT B
PIRQ_1 INT B INT A INT D INT C
PIRQ_2 INT C INT B INT A INT D
PIRQ_3 INT D INT C INT B INT A
Обычно следует оставить опцию в положении AUTO. Но, если возникла необходимость установить индивидуальное IRQ устройству на AGP или PCI шине, вот совет как использовать эту функцию. Прежде всего определите в каком слоту установлено устройство. Потом посмотрите таблицу чтобы установить основной PIRQ. Например если сетевая карта установлена в слот 3 то основной PIRQ будет PIRQ_2 потому как все слоты назначены на INT A, если возможно. После этого, выберите то IRQ, которое хотите использовать, присваивая нужное значение PIRQ. Если сетевая карта требует IRQ 7 установите PIRQ_2 чтобы использовать IRQ 7. BIOS распределит IRQ 7 для третьего PCI слота. Только помните, что BIOS будет пытаться назначить PIRQ в INT A для каждого слота. Так что, для AGP и PCI #1 слотов основной PIRQ это PIRQ_0, тогда как для PCI слота #2 основной PIRQ это PIRQ_1 и так далее.
6. И + сложность всего происходящего умножить на то, что все описания пересказывают давнее состояние дел с контроллерами прерываний PIC, которые при какодном включении обеспечивали 15 линий прерываний IRQ 0-15. Но таких контроллеров давно уже нигде нет (только в публикациях и остались), а есть APIC, и число линий IRQ получается куда больше. Вот а моём совсем не новом ноутбуке с которого я сейчас пишу:
Код: Выделить всё
bash-4.2$ cat /proc/interrupts
CPU0 CPU1
0: 14370074 0 IO-APIC-edge timer
1: 9 0 IO-APIC-edge i8042
7: 1 0 IO-APIC-edge parport0
8: 1 0 IO-APIC-edge rtc0
9: 598 0 IO-APIC-fasteoi acpi
12: 156 0 IO-APIC-edge i8042
14: 48732 0 IO-APIC-edge ata_piix
15: 0 0 IO-APIC-edge ata_piix
16: 753680 0 IO-APIC-fasteoi i915, eth0
18: 583894 0 IO-APIC-fasteoi uhci_hcd:usb4, yenta
19: 0 0 IO-APIC-fasteoi uhci_hcd:usb5, tifm_7xx1
20: 967595 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2
21: 0 0 IO-APIC-fasteoi uhci_hcd:usb3
22: 0 0 IO-APIC-fasteoi mmc0
41: 319470 0 PCI-MSI-edge ahci
42: 482300 0 PCI-MSI-edge snd_hda_intel
43: 99 0 PCI-MSI-edge iwl3945
NMI: 6205 6142 Non-maskable interrupts
LOC: 5295004 10949478 Local timer interrupts
...
Вот здесь коротко об APIC в BIOS:
APIC Mode.
И очень коротко о прерываниях на шине PCI:
http://www.probios.ru/article/computer/bus.html
При использовании расширенного контроллера прерываний, атрибута любого современного компьютера, количество прерываний увеличивается до 24, что существенно упрощает наращивание возможностей компьютера за счет карт расширения и интегрированных контроллеров.
...
Физически контроллер прерывания «общается» с картой расширения посредством 4-х («классический» вариант) или 8-и (современные решения) сигнальных линий.
...
7. И во всё это кино
добавляет сложности то, что BIOS может не перераспределять ресурсы PCI, а просто использовать ранее записанное распределение в ESCD (
Extended System Configuration Data):
ESCD (Extended System Configuration Data) — специальная таблица, хранящаяся в CMOS, предназначенная для распределения аппаратных ресурсов компьютера.
Эта таблица заполняется в момент первого включения компьютера после изменения его конфигурации. Она значительно упрощает процесс распределения ресурсов при включении или перезагрузке.