page_fault_process_memory_range: Remove ihk_mc_map_virtual for CoW of device map

Device map with MAP_PRIVATE is copied when forking using copy_user_pte.
So the map isn't copied by those statements.

Futjitsu: POSTK_TEMP_FIX_14
Refs: #1039
Change-Id: I1a697ed2e003055d66a8eebd3e8d5e9e49d094ad
This commit is contained in:
Tomoki Shirasawa
2018-08-19 15:59:35 +09:00
committed by Masamichi Takagi
parent 9a20cfaefb
commit 5fcbfa2eb5
5 changed files with 141 additions and 21 deletions

View File

@@ -1868,29 +1868,8 @@ retry:
}
dkprintf("%s: cow,copying virt:%lx<-%lx,phys:%lx<-%lx,pgsize=%lu\n",
__FUNCTION__, virt, phys_to_virt(phys), virt_to_phys(virt), phys, pgsize);
#ifdef POSTK_DEBUG_TEMP_FIX_14
if (page) {
// McKernel memory space
memcpy(virt, phys_to_virt(phys), pgsize);
} else {
// Host Kernel memory space
const enum ihk_mc_pt_attribute attr = 0;
void* vmap;
vmap = ihk_mc_map_virtual(phys, npages, attr);
if (!vmap) {
error = -ENOMEM;
kprintf("page_fault_process_memory_range(%p,%lx-%lx %lx,%lx,%lx):cannot virtual mapping. %d\n", vm, range->start, range->end, range->flag, fault_addr, reason, error);
ihk_mc_free_pages(virt, npages);
goto out;
}
memcpy(virt, vmap, pgsize);
ihk_mc_unmap_virtual(vmap, npages);
}
#else /*POSTK_DEBUG_TEMP_FIX_14*/
memcpy(virt, phys_to_virt(phys), pgsize);
#endif /*POSTK_DEBUG_TEMP_FIX_14*/
/* Call rusage_memory_stat_add() because remote page fault may create a page not pointed-to by PTE */
if(rusage_memory_stat_add(range, phys, pgsize, pgsize)) {
dkprintf("%lx+,%s: remote page fault + cow, calling memory_stat_rss_add(),pgsize=%ld\n",