?????????Щ??????????????????????SMMU??????????????????????£???д???????????????Щ???
???????????SMMU????????????????Σ???????????????????????????????????????????????SMMU???????????????????????????豸?????????DMA????????????????????????????????????SMMU???????????????????????????ж???????????棬??????????????????????????????????????????????????????????????????????????????????????????????“?豸??????VA”??????Substream ID???????????VA???????????????64λ??????????????????????????????????Substream ID?????????Substream ID????????ASID???????PASID????????PCIE???????????????????ASID?????????壬??ASID???Substream ID????????????????????????????????
????????????????????????????????????????????????????
????SMMU?????????CPU?????豸??VA?????????????VA???????????豸?????????????????????????????????????????
????MMU????????????????SMMU????????SMMU??????MMU??????????????????????
????????????SMMU???????????ж???豸??????????豸???????????????????????????????SMMU??stream id???????????
?????????????豸??????????????????????????????????????豸????????????SMMU???substream id??????????
???????????豸????????????????????????stream id?? substream id??VA???????????????λ???????MMU?????????????????????????MMU?????????
?????SMMU???????????????CPU??????????????????????????????????????DFD????????????????????????????????

?????????????????????????“????”??????????????????????????MMU???????????????????????????б??????????????????????ARM??VA->IPA->PA??????????????Intel??GVA->GPA->HVA->HPA??????????????????????
??????????????????????????????????????????????????????????????????????????????DMA??64λ?????????????32λ????????????????а汾??????????汾????????????????????????Linux???4.11?????????????????????ж?????????????????????????????????Σ????????δ????????
?????????????VFIO???????iommu???????
??????Linux????????У???????豸????device????????豸??????????bus_type????????????????????pci_device?????????????platform_device??smmu?????????????????device??????ARM???????????????????豸??????????????豸???????/sys/bus/<bus>/devices/????????г?????
????bus_type???????????豸??????????????豸???????豸???????class?????/sys/class?г???????????豸?????????????????smmu?????iommu class???豸??????????smmu????iommu?????intel????????????????intel???????????????????????????????????????ζ???????????????
????????????????????device??iommu??????????????????device??iommu????????????????????????????device????????iommu???????????????????????????????????????????豸????????streamid????????????????豸??????????????????????????豸??????????????????????С??λ?????豸??????stream id??????Linux??????????????iommu_group?????iommu_group???????????streamid?????device????????/sys/kernel/iommu_group?У???
??????????????????????
????SMMU?????????????????????跢???豸(device????ARM?????豸?????豸???SMMU??????ARM??????drivers/iommu/arm-smmu*.c????SMMU????probe?????????????????????bus->iommu_ops?????????????iommu attach????????
?????豸??SMMU????????????跢?????????豸????????????????????iommu_ops??????豸????iommu_group???????iommu_group???????iommu????????
?????????????????SMMU????????豸??SMMU Topo???????????Topo??????????????????????????????????????PCIE??????????????????????????DTS????ACPI???????????????iommu_fwspec??????device????device??????????????ɡ?
?????????????????????????????

????IOMMU????????????????????????豸??DMA?????????????????????dma_map??????豸??λ??streamid???????λ??substreamid???????????iommu_device???iommu_domain??????VA??????????????豸??λgroup??group????iommu_device??device??????iommu_domain?????????????????????д??SMMU????????
????????????VFIO??
????VFIO????????SMMU?????????????豸??DMA?????????????????todo: ?????????????????
????todo??????????????????????????