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;