From b4910ec33f0786b15e461ee3f0848604f5d1439d Mon Sep 17 00:00:00 2001 From: NAKAMURA Gou Date: Thu, 7 Aug 2014 16:03:36 +0900 Subject: [PATCH] use vm_insert_page() if 'struct page' exists --- executer/kernel/syscall.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/executer/kernel/syscall.c b/executer/kernel/syscall.c index c2257d02..f41f993d 100644 --- a/executer/kernel/syscall.c +++ b/executer/kernel/syscall.c @@ -405,6 +405,19 @@ static int rus_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) pfn = phys >> PAGE_SHIFT; #if USE_VM_INSERT_PFN for (pix = 0; pix < (pgsize / PAGE_SIZE); ++pix) { + struct page *page; + + if (pfn_valid(pfn+pix)) { + page = pfn_to_page(pfn+pix); + if (!page_count(page)) { + get_page(page); + } + error = vm_insert_page(vma, rva+(pix*PAGE_SIZE), page); + if (error) { + printk("vm_insert_page: %d\n", error); + } + } + else error = vm_insert_pfn(vma, rva+(pix*PAGE_SIZE), pfn+pix); if (error) { break;