"failed to allocate default IOMMU domain of type %u; falling back to IOMMU_DOMAIN_DMA", iommu_def_domain_type); dom = __iommu_domain_alloc(dev->bus, IOMMU_DOMAIN_DMA); } group->default_domain = dom; if (!group->domain) group->domain = dom; } ret = iommu_group_add_device(group...
struct dmar_domain: dmar_domain里面存储的是iova->hpa的转换页表,一个dmar_domain可以为多个或者一个设备服务。 struct iommu_domain: 一个iommu_domain里面可以有多个iommu_group,然后每个iommu_group通过iommu_domain最终找到dmar_domain进行转换。 后记 在下一篇文章里面会详细讲一下在虚拟化和非虚拟化场景下系统如...
不能够让一个group里的多个device分别从属于2个不同的VM,也不允许部分device在host上而另一部分被分配到guest里, 因为就这样一个guest中的device可以利用DMA攻击获取另外一个guest里的数据,就无法做到物理上的DMA隔离。 Container:对于虚机,Container 这里可以简单理解为一个VM Domain的物理内存空间。对于用户态驱动,Co...
iommu_domain定位了asid。group 里面的设备既然公用一套iova的页表,那么只能透传给一个虚机,不能分开透传。 一个iommu_group里面既可能只有一个device,也可能有多个device。 arm smmu-v3中的 iommugroup 类型为2类 //caq:arm中针对iommu,有两类group,如果是pci的设备,用一个默认group,否则用系统的默认group,注意...
为了分别管理,这两种概念,iommu 框架提供了两种结构体,一个是 struct iommu_domain 这个结构抽象出了一个domain的结构,用来代表底层的arm_smmu_domain,其实最核心的是管理这个domian所拥有的io page table。另外一个是sruct iommu_group这个结构是用来管理设备的,多个设备可以在一个iommu group中,以此来共享一个iopag...
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 rappel IOMMU_DOMAIN_DETACH_DEVICE_EX fonction de rappel IOMMU_FLUSH_DOMAIN fonction de rappel IOMMU...
iommu_group---iommu 的组对象,多个dev 可以用同一个组,他是iommu管理的最小单元。 iommu_domain---iommu 的domain 对象,可以关联一个 group, iommu_resv_region ---保留区域,不需要iommu映射的区域。 主要的方法就是: iommu_device_register--- iommu 设备注册,简单挂一下管理链表 iommu...
系统构建全局si_domain,负责地址转换页表,为每个节点内存建立IOVA与HPA间的映射。接着,设备与iommu_domain相关联,通过设备bus号定位root_table并创建context_entry,同时更新si_domain的pgd。最后,pci_bus通过iommu_ops进行设置,初始化回调和iommu_group,调用pci_device_group分配设备到特定的iommu_group...
IOMMU_DOMAIN_BLOCKED和IOMMU_DOMAIN_DMA是内核用到,它和iommu group有关系,一个group对应一个domain,一个group有可能有多个dev,这个和pci硬件结构有关系,详见函数pci_device_group。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /* * This are the possible domain-types...
(1)group: pass through给同一个虚拟机的io device集合。Group 是IO MMU能够进行DMA隔离的最小硬件单元(隔离:即使用不同的页表)。 (2)container: 对于虚拟机,container这里可以简单理解为一个VM Domain(虚拟机)的物理内存空间,对于用户态驱动,container可以是多个group的集合。从这里看出——虚拟机其实是一个特殊...