diff --git a/arch/arm64/kernel/memory.c b/arch/arm64/kernel/memory.c index 01b6f643..bb0fbf0b 100644 --- a/arch/arm64/kernel/memory.c +++ b/arch/arm64/kernel/memory.c @@ -1807,7 +1807,6 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base, ihk_mc_free_pages_user(phys_to_virt(phys), npages); dkprintf("%s: freeing regular page at 0x%lx\n", __FUNCTION__, base); } - args->vm->currss -= PTL1_SIZE; } return 0; @@ -1887,7 +1886,6 @@ static int clear_range_middle(void *args0, pte_t *ptep, uint64_t base, ihk_mc_free_pages_user(phys_to_virt(phys), npages); dkprintf("%s(level=%d): freeing large page at 0x%lx\n", __FUNCTION__, level, base); } - args->vm->currss -= tbl.pgsize; } return 0; diff --git a/arch/x86_64/kernel/memory.c b/arch/x86_64/kernel/memory.c index 74296236..c7ccee7f 100644 --- a/arch/x86_64/kernel/memory.c +++ b/arch/x86_64/kernel/memory.c @@ -1542,7 +1542,6 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base, dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL1_SIZE, PTL1_SIZE); rusage_memory_stat_sub(args->memobj, PTL1_SIZE, PTL1_SIZE); } - args->vm->currss -= PTL1_SIZE; } else { dkprintf("%s: !calling memory_stat_rss_sub(),virt=%lx,phys=%lx\n", __FUNCTION__, base, pte_get_phys(&old)); } @@ -1611,7 +1610,6 @@ static int clear_range_l2(void *args0, pte_t *ptep, uint64_t base, dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL2_SIZE, PTL2_SIZE); rusage_memory_stat_sub(args->memobj, PTL2_SIZE, PTL2_SIZE); } - args->vm->currss -= PTL2_SIZE; } } @@ -1693,7 +1691,6 @@ static int clear_range_l3(void *args0, pte_t *ptep, uint64_t base, dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL3_SIZE, PTL3_SIZE); rusage_memory_stat_sub(args->memobj, PTL3_SIZE, PTL3_SIZE); } - args->vm->currss -= PTL3_SIZE; } } diff --git a/kernel/include/rusage_private.h b/kernel/include/rusage_private.h index 4648515a..dcc8f342 100644 --- a/kernel/include/rusage_private.h +++ b/kernel/include/rusage_private.h @@ -35,6 +35,7 @@ rusage_rss_add(unsigned long size) unsigned long newval; unsigned long oldval; unsigned long retval; + struct process_vm *vm = cpu_local_var(current)->vm; newval = __sync_add_and_fetch(&rusage->rss_current, size); oldval = rusage->memory_max_usage; @@ -46,12 +47,23 @@ rusage_rss_add(unsigned long size) } oldval = retval; } + + /* process rss */ + vm->currss += size; + if (vm->currss > vm->proc->maxrss) { + vm->proc->maxrss = vm->currss; + } } static inline void rusage_rss_sub(unsigned long size) { + struct process_vm *vm = cpu_local_var(current)->vm; + __sync_sub_and_fetch(&rusage->rss_current, size); + + /* process rss */ + vm->currss -= size; } static inline void memory_stat_rss_add(unsigned long size, int pgsize) diff --git a/kernel/process.c b/kernel/process.c index 6ef9015c..4aabea19 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -1942,9 +1942,6 @@ retry: // memory_stat_rss_add() is called in downstream with !memobj check } flush_tlb_single(fault_addr); - vm->currss += pgsize; - if(vm->currss > vm->proc->maxrss) - vm->proc->maxrss = vm->currss; error = 0; page = NULL;