当前位置:网站首页>Iommu/smmuv3 code analysis (10) page table operation
Iommu/smmuv3 code analysis (10) page table operation
2022-07-01 16:57:00 【Linux decoder】
From the front IOMMU DMA MAP/UNMAP API Call to know ,DMA MAP Whether it is dma_alloc_coherent() still dma_map_sg(), Finally call the function __iommu_map() function . It will calculate what needs to be mapped pgsize Page table size and count Number . When supported ops->map_pages when , Represents that multiple consecutive pages can be mapped at a time , This will call arm_lpae_map_pages(),SMMUv3 Support this method .

about DMA UNMAP API, Whether it's dma_free_coherent(), still dma_unmap_sg(), The function will eventually be called __iommu_dma_unmap(), First of all, it is also acquisition unmap Of pgsize Page size and count Number , Then, according to whether it supports multiple pages unamp, Call page table unmap function , about SMMUv3, call arm_lpae_unamp_pages(), Finally, we need to TLB Invalidate the cache in .

1 A brief introduction to the page table
SMMU Page table and MMU The page table of is the same , Will be in ARMv8-A Programming Guide to do a detailed introduction , This is only about ARM64 Some basic concepts of , It is easy to understand the code and the process of mapping and unmapping .
Here we use 4K System as an example , stay 4K The page table size supported on the system is 4K/2M/1G. among level3 Page table item ( Become page The descriptor ) Point to 4K Size of memory page ,level2 Page table entries usually point to level3 Base address of page table entry ( At this time, the page table item is called table The descriptor ), But it can also point directly to 2M Size of memory ( Page entries are called block The descriptor ). The following figure gives a simple description of the three .

in addition SMMU Page table properties of and CPU The properties of the page table are the same .
2 Initialization of page table
stay SMMU And IO When the device is associated, it will be for each IO Equipment setup iommu_domain, In the final stage, it will establish a connection with the page table . By function alloc_io_pgtable_ops() and free_io_pgtable_ops() Allocate and release page tables .
There are many page table formats , Such as 32 Bit LPAE,64 Bit LPAE, At the same time, they are divided into stage1 and stage2 The format of . This is only about ARM_64_LPAE_S1 namely 64 Bit LPAE Of stage1 Page table operation .
A page table ARM_64_LPAE_S1 Distribution function of alloc_io_pgtable_ops() The callback will be called arm_64_lpae_alloc_pgtable_s1(), It assigns a structure for representing page table operations arm_lpae_io_pgtable, And fill in its callback functions, including map/map_pages/unmap/unmap_pages/iova_to_phys. These callback functions do the real mapping and unmapping of the page table . Later, we will focus on map_pages and unmap_pages. The other is to set the page table TCR and TTBR register , And assign PGD A page table ( Other levels of page tables are dynamically added and released ).
A page table ARM_64_LPAE_S1 The release function of free_io_pgtable_ops() Would call __arm_lpae_free_pgtable() Recursively release the page table level by level , And brush TLB.
3 Operation of page table
3.1 Mapping process of page table
The mapping of the page table first passes through the function arm_lpae_prot_to_pte() Convert and set page table properties , And then through the function __arm_lpae_map() Search recursively at each level , And finally fill in the physical address in the finally found page table item , That is, create page table entries and point to the corresponding physical memory .

There are two situations here :
- When searching the table items of subordinate pages , No mapping has been established in the next level page table , That is, the current page table item points to NULL, At this time, you need to allocate the next level of page table entries , And point the current page table item to the allocated next level page table item , Go to the next level of search ;
- When looking up entries in summer pages , If the next level page entry already exists , At this time, find the corresponding page table item in the next level page table item , Go to the next level of search ;
Here are the following figure examples to illustrate these two situations :

Set up two 4K Page mapping , The above situation is in level2 You can find the next level page table ( There should be other mappings before ), Now find level3 The corresponding page table entry in , Just establish the mapping ;
The following is level2 Point to the level3 The page table has not been established , At this time, you need to allocate physical memory to create a page table , And will level2 The page table entry of points to level3 Page table of .
3.2 Unmapping process of page table
The unmapping process of the page table passes through the function arm_lpae_unmap_pages() Realization , It needs to find the corresponding page table entry , Clear page table , And carry on TLB To invalidate .

Current level block Size and need unmap When the page size of is equal , It indicates that the corresponding mapping location is found , But there are also several situations :
- The current page table item is a non leaf node , This means that the next level belongs to the current mapping , At this time, you need to invalidate the next level page table , And release the physical page ;
- The current page table item is a leaf node , This situation is block/page Page table , At this time, you can invalidate the leaf node page table entry ;
Here are the following figures to illustrate these two situations :

Pictured above , need unmap The size is 2M size , So the size is the same as level2 Of block equal , Now find level2 The corresponding page table entry , In the above case , Page table entries are non leaf nodes , At this time, the next level page table pointed to is the mapping range that needs to be cancelled , At this time, you need to clear all page table entries of the next level page table , And carry on TLB To invalidate . In the following case , Page table items are leaf nodes , Point directly to a piece 2M Size of physical memory , At this time, clear the table items of the current page , And carry on TLB Just invalidate .
In fact, there is another situation : Although need unmap The page size of is the same as that of the current level block equal , But need unmap The size of needs to span two page tables , At this time, we need to separate the two parts unmap.
Here is still a picture to illustrate :

In this case unmap The size of is still 2M, But not in level2 To represent , Instead, it spans two page entries , And each occupies 1M, At this moment in level3 There are two page tables corresponding to it , At this time, we need to deal with the first page table first , In the section dealing with the second page table .
边栏推荐
- 重磅披露!上百个重要信息系统被入侵,主机成为重点攻击目标
- unity3d扩展工具栏
- Leetcode 216 combined summation III -- backtracking method
- Is the securities account given by the head teacher of goucai school safe? Can I open an account?
- How to use F1 to F12 correctly on laptop keyboard
- 巴比特 | 元宇宙每日必读:奈雪币、元宇宙乐园、虚拟股票游戏...奈雪的茶这波“操作拉满”的营销活动你看懂了吗?...
- Redis6.0 新功能
- C language input / output stream and file operation
- How to solve the keyboard key failure of notebook computer
- SystemVerilog-结构体(二)
猜你喜欢

sql刷题627. 变更性别

Computed property “xxx“ was assigned to but it has no setter.

How to restore the system with one click on Lenovo laptop

【C补充】【字符串】按日期排序显示一个月的日程

C language input / output stream and file operation

Babbitt | yuan universe daily must read: Naixue coin, Yuan universe paradise, virtual stock game Do you understand Naixue's tea's marketing campaign of "operation pull full"

Bugku's file contains

【C语言基础】12 字符串

ACM MM 2022视频理解挑战赛视频分类赛道冠军AutoX团队技术分享

How to solve the keyboard key failure of notebook computer
随机推荐
独家消息:阿里云悄然推出RPA云电脑,已与多家RPA厂商开放合作
Advantages, values and risks of chain games compared with traditional games
存在安全隐患 起亚召回部分K3新能源
Graduation season | Huawei experts teach the interview secret: how to get a high paying offer from a large factory?
C语言输入/输出流和文件操作
Machine learning 11 clustering, outlier discrimination
Research and investment strategy report of China's sodium sulfate industry (2022 Edition)
mysql -- explain性能优化
VMware virtual machine failed during startup: VMware Workstation is incompatible with hyper-v
Leetcode 77 combination -- backtracking method
SystemVerilog structure (II)
Dataframe gets the number of words in the string
How to use etcd to realize distributed /etc directory
智能运维实战:银行业务流程及单笔交易追踪
Please, stop painting star! This has nothing to do with patriotism!
C language input / output stream and file operation
China BMS battery management system Market Research Report (2022 Edition)
sql刷题1050. 合作过至少三次的演员和导演
Sword finger offer II 015 All modifiers in the string
PR basic clip operation / video export operation