From 73731d2a0df15ce1a1e5d15b0ab362c234f5ee5a Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Sat, 24 Mar 2018 07:56:49 +0900 Subject: [PATCH] ihk_mc_map/unmap_virtual(): do proper TLB invalidation --- kernel/mem.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/kernel/mem.c b/kernel/mem.c index a8d51d3f..e799ed86 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -1664,6 +1664,8 @@ void *ihk_mc_map_virtual(unsigned long phys, int npages, ihk_pagealloc_free(vmap_allocator, virt_to_phys(p), npages); return NULL; } + + flush_tlb_single((unsigned long)(p + (i << PAGE_SHIFT))); } barrier(); return (char *)p + offset; @@ -1676,17 +1678,14 @@ void ihk_mc_unmap_virtual(void *va, int npages, int free_physical) va = (void *)((unsigned long)va & PAGE_MASK); for (i = 0; i < npages; i++) { ihk_mc_pt_clear_page(NULL, (char *)va + (i << PAGE_SHIFT)); + flush_tlb_single((unsigned long)(va + (i << PAGE_SHIFT))); } -#ifdef POSTK_DEBUG_TEMP_FIX_42 /* add unmap virtual tlb flush. */ - flush_tlb(); -#endif /* POSTK_DEBUG_TEMP_FIX_42 */ - + #ifdef POSTK_DEBUG_TEMP_FIX_51 /* ihk_mc_unmap_virtual() free_physical disabled */ ihk_pagealloc_free(vmap_allocator, (unsigned long)va, npages); #else /* POSTK_DEBUG_TEMP_FIX_51 */ if (free_physical) { ihk_pagealloc_free(vmap_allocator, (unsigned long)va, npages); - flush_tlb_single((unsigned long)va); } #endif /* POSTK_DEBUG_TEMP_FIX_51 */ }