函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\userfaultfd.c Create Date:2022-07-29 10:52:39
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:userfaultfd_unregister

函数原型:static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, unsigned long arg)

返回类型:int

参数:

类型参数名称
struct userfaultfd_ctx *ctx
unsigned longarg
1518  mm等于mm with one ore more vmas attached to this userfaultfd_ctx
1525  __userbuf等于arg
1527  ret等于负EFAULT
1528  如果copy_from_user( & uffdio_unregister, buf, uffdio_unregister的长度)则转到:out
1531  ret等于validate_range(mm, & start, len)
1533  如果ret则转到:out
1536  start等于start
1537  end等于startlen
1539  ret等于负ENOMEM
1540  如果非mmget_not_zero(mm)则转到:out
1543  lock for writing
1544  如果非This has to be called after a get_task_mm()/mmget_not_zero()* followed by taking the mmap_sem for writing before modifying the* vmas or anything the coredump pretends not to change from under it则转到:out_unlock
1546  vma等于Same as find_vma, but also return a pointer to the previous VMA in *pprev.
1547  如果非vma则转到:out_unlock
1551  ret等于负EINVAL
1552  如果Our start address within vm_mm. 大于等于end则转到:out_unlock
1559  如果is_vm_hugetlb_page(vma)则
1560  vma_hpagesize等于Return the size of the pages allocated when backing a VMA. In the majority* cases this will be same size as used by the page table entries.
1562  如果start按位与vma_hpagesize减1则转到:out_unlock
1569  found = false
1570  ret等于负EINVAL
1571 curOur start address within vm_mm. 小于end循环
1572  cond_resched()
1574  BUG_ON(!!ctx ^ !!(Flags, see mm.h. & (missing pages tracking | wrprotect pages tracking )))
1584  如果非vma_can_userfault(cur)则转到:out_unlock
1587  found = true
1589  BUG_ON(!found)
1591  如果Our start address within vm_mm. 小于startprev等于vma
1594  ret等于0
1595  循环
1596  cond_resched()
1598  BUG_ON(!vma_can_userfault(vma))
1604  如果非ctx则转到:skip
1607  WARN_ON(!(Flags, see mm.h. & VM_MAYWRITE))
1609  如果Our start address within vm_mm. 大于startstart等于Our start address within vm_mm.
1611  vma_end等于两数取小(end, The first byte after our end addresswithin vm_mm. )
1613  如果userfaultfd_missing(vma)则
1621  start等于start
1622  len等于vma_endstart
1623  wake_userfault(ctx, & range)
1626  new_flags等于Flags, see mm.h. 按位与missing pages tracking 按位或wrprotect pages tracking 的值的反
1627  prev等于Given a mapping request (addr,end,vm_flags,file,pgoff), figure out* whether that can be merged with its predecessor or its successor
1631  如果prev
1632  vma等于prev
1633  转到:next
1637  如果ret退出
1642  如果ret退出
1645  :
1651  Flags, see mm.h. 等于new_flags
1652  vm_userfaultfd_ctx等于NULL_VM_UFFD_CTX
1654  :
1655  prev等于vma
1656  start等于The first byte after our end addresswithin vm_mm.
1657  vma等于linked list of VM areas per task, sorted by address
1658 vmaOur start address within vm_mm. 小于end循环
1659  out_unlock :
1660  lease a write lock
1661  Decrement the use count and release all resources for an mm.
1662  out :
1663  返回:ret
调用者
名称描述
userfaultfd_ioctl