From 1e8e6523dfde96cf359c5f329123f7cc0ca62d67 Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sat, 20 Aug 2022 18:08:34 +0800 Subject: [PATCH] =?UTF-8?q?bugfix:=20mmio=E5=8C=BA=E5=9F=9F=E7=9A=84vma?= =?UTF-8?q?=E7=9A=84page=E5=B7=B2=E5=AD=98=E5=9C=A8=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E9=87=8D=E6=96=B0=E5=88=9B=E5=BB=BA=E6=96=B0=E7=9A=84?= =?UTF-8?q?page=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/mm/mmap.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kernel/mm/mmap.c b/kernel/mm/mmap.c index cd4b897a..b6fb249d 100644 --- a/kernel/mm/mmap.c +++ b/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);