static int __iommu_domain_alloc_dev(struct device *dev, void *data) { const struct iommu_ops **ops = data; if (!dev_has_iommu(dev)) return 0; if (WARN_ONCE(*ops && *ops != dev_iommu_ops(dev), "Multiple IOMMU drivers present for bus %s, which the public IOMMU API can't f...
iommu->domain_ids=bitmap_zalloc(ndomains) //ndomains表示dmar能支持的最大domain数,capability寄存器[2:0] set_bit(0, iommu->domain_ids) //将domain0预留并置位,无效的转换都会被标记成domain0 //例:domain_detach_iommu时会把此domian info中对应iommu中所记录的domian_id改成0 set_bit(1, iommu->...
最终调用的是iommu_group_alloc分配内存空间。然后给刚创建的iommu_group对象分配domain空间,调用__iommu_domain_alloc。该函数会将domain结构中包含的的ops赋值为bus->iommu_ops; 最后重点是调用iommu_group_add_device将设备添加到iommu_group中去。 该函数首先创建一个struct group_device对象。 struct group_device...
if (!group->default_domain) { struct iommu_domain *dom; dom = __iommu_domain_alloc(dev->bus, iommu_def_domain_type); if (!dom && iommu_def_domain_type != IOMMU_DOMAIN_DMA) { dom = __iommu_domain_alloc(dev->bus, IOMMU_DOMAIN_DMA); # 略略略... ... } group->default_domain ...
IOMMU_DOMAIN_ATTACH_DEVICE fonction de rappel IOMMU_DOMAIN_ATTACH_DEVICE_EX fonction de rappel IOMMU_DOMAIN_CONFIGURE fonction de rappel IOMMU_DOMAIN_CREATE fonction de rappel IOMMU_DOMAIN_CREATE_EX fonction de rappel IOMMU_DOMAIN_DELETE fonction de rappel IOMMU_DOMAIN_DETACH_DEVICE fonction de rapp...
Wenn die zu konfigurierende Domäne vom Betriebssystem verwaltet wird (über IOMMU_DOMAIN_CREATE) oder nicht vom Typ DomainTypeUnmanaged (über IOMMU_DOMAIN_CREATE_EX) ist, kann sie nicht konfiguriert werden, und die Funktion gibt STATUS_INVALID_PARAMETER_1...
5. domain alloc iommu_domain_alloc -> rk_iommu_domain_alloc 申请页表基地址,用于attach/detach操作...
├─if(iommu_no_mapping)returnpaddr;├─intel_alloc_iova └─domain_pfn_mapping 发现kvm/vfio/i40e都调用到了函数domain_pfn_mapping,相比于kvm和vfio,i40e多了一个if判断,条件是函数iommu_no_mapping的返回值。 代码语言:javascript 代码运行次数:0 ...
int domain_num, int partition_num, unsigned long align, unsigned long iova_length, ion_phys_addr_t *iova, unsigned long *buffer_size, unsigned long flags, unsigned long iommu_flags) 调用ion_map_iommu()函数的例子,可以看msm_smem.c文件中的get_device_address()函数里, ...
这张图中很明显的写出来smmu domian和 iommu的domain的关系,以及iommu group的作用;不再过多解释。 2.3 dma iova 与iommu dma 和 iommu 息息相关,iommu的产生其实很大的原因就是避免dma的时候直接使用物理地址而导致的不安全性,所以就产生了iova, 我们在调用dma alloc的时候,首先在io 的地址空间中分配你一个iova...