Отключить устройство PCIe, утверждающее неизвестное прерывание - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я работаю над драйвером сетевой карты Intel на основе PCIe для своего проекта разработки ОС. Хотя драйвер, кажется, работает хорошо, как только я включаю INTA (IRQ 16, используя I / O APIC), я продолжаю получать поток прерываний, который полностью блокирует мое ядро. Они не вызваны сетевой картой (регистр причины прерывания - все нули), за исключением очень немногих случаев, когда карта фактически получила пакет.

Вещи, которые я пробовал:

  • Проверьте другие настройки триггера IRQ - уровень срабатывания на «низком уровне» должен быть правильным, поскольку в других случаях вообще ничего не происходит (прерывания сетевой карты должны работать).

  • Отключить все другие устройства PCIe: я попытался записать 0x0400 в регистр команд каждого устройства PCIe cfg space (установить флаг отключения прерывания, снять все остальные флаги); Я исключил только сетевую карту, видеокарту и мостовые устройства. Хотя эта операция завершается успешно, я не совсем уверен, что это действительно отключает данные устройства, поскольку эти прерывания все еще происходят.

Правильно ли записывать 0x0400 в регистр команд для полного отключения устройства PCIe?

...