函数逻辑报告 |
Source Code:mm\hugetlb.c |
Create Date:2022-07-27 17:00:10 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:copy_hugetlb_page_range
函数原型:int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
struct mm_struct * | dst | |
struct mm_struct * | src | |
struct vm_area_struct * | vma |
3307 | h等于hstate_vma(vma) |
3308 | sz等于huge_page_size(h) |
3310 | ret等于0 |
3312 | cow等于Flags, see mm.h. 按位与VM_SHARED按位或VM_MAYWRITE的值的值恒等于VM_MAYWRITE |
3314 | 如果cow则 |
3315 | mmu_notifier_range_init( & range, MMU_NOTIFY_CLEAR, 0, vma, src, Our start address within vm_mm. , The first byte after our end addresswithin vm_mm. ) |
3318 | mmu_notifier_invalidate_range_start( & range) |
3323 | src_pte等于huge_pte_offset(src, addr, sz) |
3324 | 如果非src_pte则继续下一循环 |
3326 | dst_pte等于arch callbacks |
3327 | 如果非dst_pte则 |
3341 | dst_entry等于huge_ptep_get(dst_pte) |
3342 | 如果dst_pte恒等于src_pte或非huge_pte_none(dst_entry)则继续下一循环 |
3345 | dst_ptl等于huge_pte_lock(h, dst, dst_pte) |
3346 | src_ptl等于huge_pte_lockptr(h, src, src_pte) |
3348 | entry等于huge_ptep_get(src_pte) |
3349 | dst_entry等于huge_ptep_get(dst_pte) |
3359 | swp_entry等于Convert the arch-dependent pte representation of a swp_entry_t into an* arch-independent swp_entry_t. |
3361 | 如果is_write_migration_entry(swp_entry)且cow则 |
3372 | 否则 |
3373 | 如果cow则 |
3381 | huge_ptep_set_wrprotect(src, addr, src_pte) |
3383 | entry等于huge_ptep_get(src_pte) |
3386 | page_dup_rmap(ptepage, true) |
3387 | set_huge_pte_at(dst, addr, dst_pte, entry) |
3388 | hugetlb_count_add(pages_per_huge_page(h), dst) |
3390 | 自旋锁解锁 |
3391 | 自旋锁解锁 |
3394 | 如果cow则mmu_notifier_invalidate_range_end( & range) |
3397 | 返回:ret |
名称 | 描述 |
---|---|
copy_page_range |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |