iommu_setup_default_domain[核心1] //为每个group分配并设置default_domain. 详见后文 //通过sysfs下面的type修改iommu_group的domian也是调此函数,形参是domian type //NOTE: iommu_group会有domain和default_domain成员,分配完default_domain后会将此domain //再赋值给domain成员,当unbind驱动时会替换domain的赋值,...
struct dmar_domain: dmar_domain里面存储的是iova->hpa的转换页表,一个dmar_domain可以为多个或者一个设备服务。 struct iommu_domain: 一个iommu_domain里面可以有多个iommu_group,然后每个iommu_group通过iommu_domain最终找到dmar_domain进行转换。 后记 在下一篇文章里面会详细讲一下在虚拟化和非虚拟化场景下系统如...
iommu_domain定位了asid。group 里面的设备既然公用一套iova的页表,那么只能透传给一个虚机,不能分开透传。 一个iommu_group里面既可能只有一个device,也可能有多个device。 arm smmu-v3中的 iommugroup 类型为2类 //caq:arm中针对iommu,有两类group,如果是pci的设备,用一个默认group,否则用系统的默认group,注意...
系统构建全局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_group---iommu 的组对象,多个dev 可以用同一个组,他是iommu管理的最小单元。 iommu_domain---iommu 的domain 对象,可以关联一个 group, iommu_resv_region ---保留区域,不需要iommu映射的区域。 主要的方法就是: iommu_device_register--- iommu 设备注册,简单挂一下管理链表 iommu...
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...
Container:对于虚机,Container 这里可以简单理解为一个VM Domain的物理内存空间。对于用户态驱动,Container可以是多个Group的集合。 上图中PCIe-PCI桥下的两个设备,在发送DMA请求时,PCIe-PCI桥会为下面两个设备生成Source Identifier,其中Bus域为红色总线号bus,device和func域为0。这样的话,PCIe-PCI桥下的两个设备会...
1c.0/0000:04:00.0</path><parent>pci_0000_00_1c_0</parent><capabilitytype='pci'><domain>0</domain><bus>4</bus><slot>0</slot><function>0</function><productid='0x10d3'>82574L Gigabit Network Connection</product><vendorid='0x8086'>Intel Corporation...
为了分别管理,这两种概念,iommu 框架提供了两种结构体,一个是 struct iommu_domain 这个结构抽象出了一个domain的结构,用来代表底层的arm_smmu_domain,其实最核心的是管理这个domian所拥有的io page table。另外一个是sruct iommu_group这个结构是用来管理设备的,多个设备可以在一个iommu group中,以此来共享一个iopag...
有四种domain,init_dmars中用到了IOMMU_DOMAIN_IDENTITY,这个类型的domain只能有一个,kvm和dpdk会用到IOMMU_DOMAIN_UNMANAGED,一个qemu或者一个dpdk进程一个domain。IOMMU_DOMAIN_BLOCKED和IOMMU_DOMAIN_DMA是内核用到,它和iommu group有关系,一个group对应一个domain,一个group有可能有多个dev,这个和pci硬件结构有关系...