do_munmap 函数, 定义在 Linux 内核源码 linux-4.12\mm\mmap.c#2620 位置 ; do_munmap 函数源码如下 : 代码语言:javascript 代码运行次数:0 运行 AI代码解释 /* Munmap is split into 2 main parts -- this part which finds * what needs doing, and the
一、do_munmap 函数执行流程 do_munmap 函数执行流程 : 根据unsigned long start参数的起始地址 , 找到要删除的 第一个 虚拟内存区域 vm_area_struct 结构体实例 , int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf) ... struct vm_area_struct *vma, *pre...
int do_munmap(struct mm_struct *mm, unsigned long start, size_t len,struct list_head *uf) 用于释放通过do_mmap 映射的内存 其源码分析如下: int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf) { unsigned long end; struct vm_area_struct *vma, *...
The kernel panics with panic stringBUG: unable to handle kernel NULL pointer dereference at XXXXXXXXXXXXXXXXat function offsetdo_munmap+0x1dcwhile trying to unmap somevm_areasfrom themm_struct: Raw PID: 12853 TASK: ffff88132bf73f40 CPU: 4 COMMAND: "java" #0 [ffff88122ca97b68] machine_kexe...
extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior); #ifdef CONFIG_MMU extern int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, struct list_head *uf, bool downgrade); extern int...
extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior); #ifdef CONFIG_MMU extern int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, unsigned long start, unsigned long end, struct list_head *uf, bool unlock); extern int _...
用于释放通过do_mmap 映射的内存 其源码分析如下: int do_munmap(struct mm_struct *mm, unsigned long start, size_t len, struct list_head *uf) { unsigned long end; struct vm_area_struct *vma, *prev, *last; if ((offset_in_page(start)) || start > TASK_SIZE || len > TASK_SIZE-star...
* do_vma_munmap() may downgrade the lock, so update it * do_vma_munmap() will drop the lock on success, so update it * before calling do_vma_munmap(). */ mm->brk = brk; ret = do_vma_munmap(&vmi, brkvma, newbrk, oldbrk, &uf, true); if (ret == 1) { downgraded = tr...
@@ -2539,6 +2533,11 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, if (unlock) mmap_write_downgrade(mm);prev = vma_iter_prev_range(vmi); next = vma_next(vmi); if (next) vma_iter_prev_range(vmi);/...
@@ -2447,10 +2437,12 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma, } #endif /* Point of no return */ error = -ENOMEM; vma_iter_set(vmi, start); if (vma_iter_clear_gfp(vmi, start, end, GFP_KERNEL)) ...