소스 검색

bugfix: mmio区域的vma的page已存在时,会重新创建新的page的问题

fslongjin 2 년 전
부모
커밋
1e8e6523df
1개의 변경된 파일6개의 추가작업 그리고 1개의 파일을 삭제
  1. 6 1
      kernel/mm/mmap.c

+ 6 - 1
kernel/mm/mmap.c

@@ -352,7 +352,12 @@ int mm_map_vma(struct vm_area_struct *vma, uint64_t paddr)
     // 获取物理地址对应的页面
     struct Page *pg;
     if (vma->vm_flags & VM_IO) // 对于mmio的内存,创建新的page结构体
-        pg = __create_mmio_page_struct(paddr);
+    {
+        if (unlikely(vma->anon_vma == NULL || vma->anon_vma->page == NULL))
+            pg = __create_mmio_page_struct(paddr);
+        else
+            pg = vma->anon_vma->page;
+    }
     else
         pg = Phy_to_2M_Page(paddr);