У меня есть пользовательская конечная точка PCIe (общая конечная точка, поддерживающая основные возможности), которая устанавливает векторы IRQ с несколькими возможностями MSI на 16. Но когда я запускаю гостевую настольную ОС ubuntu x86_64 bit, у которой есть хост-контроллер PCIe, который конфигурирует векторы MSI Enable [биты 6: 4 в регистре управления MSI], он всегда возвращает 1 MSI в соответствии с настройкой.Он работает в среде virtualbox.
Следовательно, множественный MSI не поддерживается.
pci_alloc_irq_vectors () API используется для установки нескольких битов с поддержкой msi [6: 4] в ядре linuxкоторый в настоящее время возвращает 1, т.е. устанавливается только одно прерывание MSI, даже если EP поддерживает 16. pci_msi_vec_count () возвращает 16.
Мой путь кода ядра показывает, что используется контроллер PCI-MSI, который не поддерживает MULTIВозможность MSI.Я включил все необходимые IRQ_REMAP, PCI_MSI, PCI_DOMAINS * и т. Д., Которые, как мне кажется, должны включить поддержку нескольких MSI, используя домен контроллера IR-PCI-MSI.Но все пошло напрасно.
Требуется некоторая помощь от экспертов по виртуальным коробкам в отношении следующих запросов:
Влияет ли общая таблица ACPI, поставляемая в 64-битную ОС ubuntu 18.04, нарешить, какой контроллер MSI используется во время сканирования pci?Если это так, какие шаги мне нужно рассмотреть, чтобы включить поддержку нескольких msi.
Я мог видеть, что функциональность драйвера тестирования конечной точки TI работает должным образом на архитектуре ARM.Но на x86 это не получается.Я использую аналогичный драйвер, скомпилированный на моей платформе, и даже могу загрузить его для моего устройства EP.См. pci_endpoint_test.c для используемого драйвера
Любые предложения относительно этого приветствуются.
Моя текущая настройка:
обнаружен гостевой процессор: Intel Xeon E5 *
ОС: рабочий стол ubuntu 18.04.1 64 бит (amd64)
arch: x86_64
попробовано ядро linux: 4.14, 4.18
Заранее спасибо.