该函数首先判断设备是否已经有iommu group,有的话直接返回。然后调用device_group分配一个group对象。arm下调用的就是arm_smmu_device_group,然后根据设备是否是PCI,分别调用generic_device_group或pci_device_group。最终调用的是iommu_group_alloc分配内存空间。然后给刚创建的iommu_group对象分配domain空间,调用__iommu...
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的赋值,...
//caq:arm中针对iommu,有两类group,如果是pci的设备,用一个默认group,否则用系统的默认group,注意是两类,不是两个,个数可以建很多个。staticstructiommu_group *arm_smmu_device_group(structdevice *dev) {structiommu_group *group;/* * We don't support devices sharing stream IDs other than PCI RID ...
Group:group 是IOMMU能够进行DMA隔离的最小硬件单元,一个group内可能只有一个device,也可能有多个device,这取决于物理平台上硬件的IOMMU拓扑结构。设备直通的时候一个group里面的设备必须都直通给一个虚拟机。不能够让一个group里的多个device分别从属于2个不同的VM,也不允许部分device在host上而另一部分被分配到guest...
IOMMU Group 从IOMMU地址转换的机制可以知道,IOMMU根据source-id从Root Table/Context Table中查找页表,当两个IO设备都透传给同一个虚机时,IOMMU根据这两个IO设备的source-id查找到的页表必然是同一个。 有这么一种情况,如下图所示。两个不同的IO设备在DMA请求时有相同的source-id。PCIe-PCI桥下的设备就属于这种...
这张图中很明显的写出来smmu domian和 iommu的domain的关系,以及iommu group的作用;不再过多解释。 2.3 dma iova 与iommu dma 和 iommu 息息相关,iommu的产生其实很大的原因就是避免dma的时候直接使用物理地址而导致的不安全性,所以就产生了iova, 我们在调用dma alloc的时候,首先在io 的地址空间中分配你一个iova...
根据IOMMU拓扑结构,一个iommu group里可能有一个或多个设备。设备透传的时候一个group里面的设备必须都给一个虚拟机,不能给不同的VM,也不能部分被分配到给虚拟机。 下面看一下为什么要对PCI设备进行iommu分组。 我们知道PCIe允许peer-to-peer通信,即PCIe设备发出的数据包可以不一直往上提交到PCIe的根节点,而是在...
步骤1:通过以下 "list_iommu_group.sh"可以看到所有的iommu分组和其分组内的设备信息: list_iommu_group.sh 脚本内容如下: 1#!/bin/bash2fordin$(find/sys/kernel/iommu_groups/ -type l |sort-n -k5 -t/);do3n=${d#*/iommu_groups/*}; n=${n%%/*}4printf 'IOMMU Group %s ' "$n"5lspci...
最后,pci_bus通过iommu_ops进行设置,初始化回调和iommu_group,调用pci_device_group分配设备到特定的iommu_group。后续章节将深入探讨虚拟化场景下iommu如何处理DMA操作,iommu_pass_through=pt与disabled模式的差异,以及不同硬件平台上的直通策略,以及iommu中断remapping的具体实现。通过以上描述,我们全面...
...IOMMU Group 在虚拟化设备透传时还涉及到PCI设备的iommu group分组问题。 根据IOMMU拓扑结构,一个iommu group里可能有一个或多个设备。...另外PCI总线上的设备都归一个iommu group。最后同一个iommu group中所有的设备将会共享一个IOVA地址空间。 关于IOMMU的介绍以及在虚拟化中的作用就介绍这些。