Function report |
Source Code:mm\mremap.c |
Create Date:2022-07-28 14:53:41 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:Expand (or shrink) an existing mapping, potentially moving it at the* same time (controlled by the MREMAP_MAYMOVE flag and available VM space)* MREMAP_FIXED option added 5-Dec-1999 by Benjamin LaHaise* This option implies MREMAP_MAYMOVE.
Proto:SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long, new_len, unsigned long, flags, unsigned long, new_addr)
Type:
Parameter:Nothing
| 602 | charged = 0 |
| 603 | bool locked = false |
| 604 | bool downgraded = false |
| 605 | uf = NULL_VM_UFFD_CTX |
| 606 | LIST_HEAD(uf_unmap_early) |
| 611 | If flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE) Then Return ret |
| 614 | If flags & MREMAP_FIXED && Not (flags & MREMAP_MAYMOVE) Then Return ret |
| 617 | If offset_in_page(addr) Then Return ret |
| 631 | If lock for writing Then Return -EINTR |
| 634 | If flags & MREMAP_FIXED Then |
| 637 | Go to out |
| 649 |
retval = Munmap is split into 2 main parts -- this part which finds* what needs doing, and the areas themselves, which do the* work. This now handles partial unmappings.* Jeremy Fitzhardinge |
| 655 | Else if retval == 1 Then downgraded = true |
| 658 | Go to out |
| 672 | If old_len == The first byte after our end addresswithin vm_mm. - addr Then |
| 674 | If vma_expandable(vma, new_len - old_len) Then |
| 675 | pages = new_len - old_len >> PAGE_SHIFT determines the page size |
| 677 | If vma_adjust(vma, Our start address within vm_mm. , addr + new_len, Offset (within vm_file) in PAGE_SIZEunits , NULL) Then |
| 683 | vm_stat_account(mm, Flags, see mm.h. , pages) |
| 684 | If Flags, see mm.h. & VM_LOCKED Then |
| 690 | Go to out |
| 699 | If flags & MREMAP_MAYMOVE Then |
| 700 | map_flags = 0 |
| 701 | If Flags, see mm.h. & VM_MAYSHARE Then map_flags |= Share changes |
| 708 | If IS_ERR_VALUE(new_addr) Then |
| 716 | out : |
| 717 | If offset_in_page(ret) Then |
| 718 | vm_unacct_memory(charged) |
| 719 | locked = 0 |
| 721 | If downgraded Then lease a read lock |
| 723 | Else lease a write lock |
| 728 | mremap_userfaultfd_complete( & uf, addr, new_addr, old_len) |
| 729 | userfaultfd_unmap_complete(mm, & uf_unmap) |
| 730 | Return ret |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |