vma.c 700 B

12345678910111213141516171819202122232425262728
  1. #include "mm.h"
  2. #include "slab.h"
  3. /**
  4. * @brief 获取一块新的vma结构体,并将其与指定的mm进行绑定
  5. *
  6. * @param mm 与VMA绑定的内存空间分布结构体
  7. * @return struct vm_area_struct* 新的VMA
  8. */
  9. struct vm_area_struct * vm_area_alloc(struct mm_struct *mm)
  10. {
  11. struct vm_area_struct * vma = (struct vm_area_struct *)kmalloc(sizeof(struct vm_area_struct),0);
  12. if(vma)
  13. vma_init(vma, mm);
  14. return vma;
  15. }
  16. /**
  17. * @brief 释放vma结构体
  18. *
  19. * @param vma 待释放的vma结构体
  20. */
  21. void vm_area_free(struct vm_area_struct *vma)
  22. {
  23. if(list_empty(&vma->list)) // 如果当前是剩余的最后一个vma
  24. vma->vm_mm->vmas = NULL;
  25. kfree(vma);
  26. }