From c4e5bf6d6b30b27e4ac8b1890a81f39d29c4a1e0 Mon Sep 17 00:00:00 2001 From: "TOIDA,Suguru" Date: Fri, 30 Nov 2018 09:18:28 +0900 Subject: [PATCH] ContiguousPTE[8/12] modify page_fault_process_memory_range Change-Id: I79ecd08cf83aeacd3e20a7720bad66ef19573402 --- kernel/process.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/process.c b/kernel/process.c index 75527e20..e326dffd 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -1861,6 +1861,9 @@ static int page_fault_process_memory_range(struct process_vm *vm, struct vm_rang } pgaddr = (void *)(fault_addr & ~(pgsize - 1)); } + + arch_adjust_allocate_page_size(fault_addr, ptep, &pgaddr, &pgsize); + /*****/ dkprintf("%s: ptep=%lx,pte_is_null=%d,pte_is_fileoff=%d\n", __FUNCTION__, ptep, ptep ? pte_is_null(ptep) : -1, ptep ? pte_is_fileoff(ptep, pgsize) : -1); if (!ptep || pte_is_null(ptep) || pte_is_fileoff(ptep, pgsize)) { @@ -1993,7 +1996,7 @@ retry: #endif /*POSTK_DEBUG_ARCH_DEP_21*/ /*****/ - if (ptep) { + if (ptep && !pgsize_is_contiguous(pgsize)) { //if(rusage_memory_stat_add_with_page(range, phys, pgsize, pgsize, page)) { if(rusage_memory_stat_add(range, phys, pgsize, pgsize)) { /* on-demand paging, phys pages are obtained by ihk_mc_alloc_aligned_pages_user() or get_page() */ @@ -2016,7 +2019,7 @@ retry: else { error = ihk_mc_pt_set_range(vm->address_space->page_table, vm, pgaddr, pgaddr + pgsize, phys, - attr, range->pgshift, range, 0); + attr, range->pgshift, range, 1); if (error) { kprintf("page_fault_process_memory_range(%p,%lx-%lx %lx,%lx,%lx):set_range failed. %d\n", vm, range->start, range->end, range->flag, fault_addr, reason, error); goto out;