Как подключить мое устройство с каркасом IOMMU? - PullRequest
0 голосов
/ 12 февраля 2019

Я добавляю поддержку IOMMU в мой драйвер linux и замечаю, что группы IOMMU назначаются устройству во время загрузки:

[0.942274] iommu: Добавление устройства 0000: 03: 00.0 в группу 28

Хотя, когда я пытаюсь iommu_attach_device() внутри драйвера, он терпит неудачу.Я обнаружил, что происходит сбой, когда он вызывает iommu_group_get() для моего устройства.

Как получить назначенную группу для моего устройства и использовать ее в своем драйвере?
Я использую универсальное ядро ​​Ubuntu 4.15.0-45.

Редактировать:
iommu_group_get() завершается ошибкой, если struct device поле iommu_group не инициализировано.Кроме того, я вручную загружаю драйвер после загрузки.

Edit2: Я вижу устройство, добавленное в группу 28 в выводе dmesg.У меня есть следующая последовательность в моей процедуре проверки драйвера, которую я получил, ссылаясь на существующие источники драйверов ядра:

if iommu_present()
    iommu_domain_alloc(&pci_bus_type) 
    iommu_set_fault_handler() 
    group = iommu_group_get(); 
    // added group check since iommu_attach_device is failing 
    // group is NULL, was expecting group_28 
    iommu_attach_device() 
    init_iova_domain() 

У меня есть вызовы IOCTL для закрепления виртуального адреса пространства пользователя (get_user_pages_fast) и выполнения iommu_map.Допустимо ли это для включения DMA на устройстве с использованием области пользовательского пространства?

...