diff --git a/arch/x86/mm/svm.c b/arch/x86/mm/svm.c index 497dc655..3eb4f7fa 100644 --- a/arch/x86/mm/svm.c +++ b/arch/x86/mm/svm.c @@ -35,7 +35,7 @@ #include #include -#define USE_PERFCOUNTERS 1 +#define USE_PERFCOUNTERS 0 #define SHARED_PAGES (4*(RCCE_SHM_SIZE_MAX >> PAGE_SHIFT)) #define OWNER_SIZE ((SHARED_PAGES * sizeof(uint8_t) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) @@ -304,7 +304,8 @@ int svm_access_request(size_t addr) max_wait = res; #endif - ret = change_page_permissions(addr, addr+PAGE_SIZE, VMA_READ|VMA_WRITE|VMA_CACHEABLE); + addr &= 0xFFFFF000; // align address to page boundary + ret = change_page_permissions(addr, addr + PAGE_SIZE, VMA_READ|VMA_WRITE|VMA_CACHEABLE); #if USE_PERFCOUNTERS request_ticks += rdtsc() - start; @@ -324,7 +325,7 @@ void* svm_malloc(size_t size, uint32_t consistency) uint32_t map_flags = MAP_KERNEL_SPACE|MAP_SVM_INIT; uint8_t buffer[RCCE_LINE_SIZE]= {[0 ... RCCE_LINE_SIZE-1] = 0}; - if( !(consistency & SVM_L2) ) + if(!(consistency & SVM_L2)) map_flags |= MAP_MPE; else task->flags |= TASK_L2; @@ -419,8 +420,9 @@ void* svm_malloc(size_t size, uint32_t consistency) #endif viraddr = map_region(0, 0, size >> PAGE_SHIFT, map_flags); - kprintf("svmmalloc: viraddr 0x%x, size 0x%x\n", viraddr, size); + kprintf("svmmalloc: viraddr 0x%x, size 0x%x, flags 0x%x\n", viraddr, size, map_flags); + map_flags |= MAP_REMAP; for(i=0, j=0, mpb_addr=0; i