2

我在我的 linux 驱动程序中添加了 IOMMU 支持,并注意到 IOMMU 组在引导期间分配给了设备:

[0.942274] iommu:将设备 0000:03:00.0 添加到组 28

虽然,当我尝试iommu_attach_device()进入驱动程序时,它失败了。我发现它在调用iommu_group_get()我的设备时失败了。

如何为我的设备获取分配的组并在我的驱动程序中使用它?
我正在使用 Ubuntu 4.15.0-45-generic 内核。

编辑:
iommu_group_get()struct device字段iommu_group未初始化时失败。另外,我在启动后手动加载驱动程序。

Edit2: 我确实看到该设备已添加到 dmesg 输出中的第 28 组。我的驱动程序探测例程中有以下序列,这是通过引用现有内核驱动程序源获得的:

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 是否有效?

4

0 回答 0