From 0c63a2a3cd3d23c3822e1af447e1c404030ac645 Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Tue, 12 Nov 2019 10:07:00 +0900 Subject: [PATCH] xpmem: Use correct process_vm in xpmem functions Change-Id: I94c06ec69d0fe1e07d0b14bb44b448bbc63b9b63 --- kernel/xpmem.c | 20 +++++------- test/issues/1259/aarch64_result.log | 49 ++++++++++++++-------------- test/issues/1259/x86_64_result.log | 50 ++++++++++++++--------------- 3 files changed, 57 insertions(+), 62 deletions(-) diff --git a/kernel/xpmem.c b/kernel/xpmem.c index d1157888..cb0205eb 100644 --- a/kernel/xpmem.c +++ b/kernel/xpmem.c @@ -1412,10 +1412,9 @@ static void xpmem_detach_att( XPMEM_DEBUG("call: apid=0x%lx, att=0x%p", ap->apid, att); - XPMEM_DEBUG("detaching current->vm=0x%p, att->vm=0x%p", - (void *)cpu_local_var(current)->vm, (void *)att->vm); + XPMEM_DEBUG("detaching att->vm=0x%p", (void *)att->vm); - vm = cpu_local_var(current)->vm ? cpu_local_var(current)->vm : att->vm; + vm = att->vm; ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock); @@ -1429,7 +1428,7 @@ static void xpmem_detach_att( } att->flags |= XPMEM_FLAG_DESTROYING; - range = lookup_process_memory_range(cpu_local_var(current)->vm, + range = lookup_process_memory_range(vm, att->at_vaddr, att->at_vaddr + 1); if (!range || range->start > att->at_vaddr) { @@ -1466,8 +1465,7 @@ static void xpmem_detach_att( XPMEM_DEBUG("xpmem_vm_munmap(): start=0x%lx, len=0x%lx", range->start, att->at_size); - ret = xpmem_vm_munmap(cpu_local_var(current)->vm, (void *)range->start, - att->at_size); + ret = xpmem_vm_munmap(vm, (void *)range->start, att->at_size); if (ret) { ekprintf("%s: ERROR: xpmem_vm_munmap() failed %d\n", __FUNCTION__, ret); @@ -1664,8 +1662,7 @@ int xpmem_remove_process_memory_range( xpmem_att_ref(att); - ihk_mc_spinlock_lock_noirq( - &cpu_local_var(current)->vm->memory_range_lock); + ihk_mc_spinlock_lock_noirq(&vm->memory_range_lock); mcs_rwlock_writer_lock(&att->at_lock, &at_lock); @@ -1702,7 +1699,7 @@ int xpmem_remove_process_memory_range( else { remaining_vaddr = vmr->end; remaining_vmr = lookup_process_memory_range( - cpu_local_var(current)->vm, remaining_vaddr - 1, + vm, remaining_vaddr - 1, remaining_vaddr); if (!remaining_vmr) { ekprintf("%s: ERROR: vm_range is NULL\n", __FUNCTION__); @@ -1723,7 +1720,7 @@ int xpmem_remove_process_memory_range( } remaining_vmr = lookup_process_memory_range( - cpu_local_var(current)->vm, remaining_vaddr, + vm, remaining_vaddr, remaining_vaddr + 1); if (!remaining_vmr) { ekprintf("%s: ERROR: vm_range is NULL\n", __FUNCTION__); @@ -1747,8 +1744,7 @@ int xpmem_remove_process_memory_range( out: mcs_rwlock_writer_unlock(&att->at_lock, &at_lock); - ihk_mc_spinlock_unlock_noirq( - &cpu_local_var(current)->vm->memory_range_lock); + ihk_mc_spinlock_unlock_noirq(&vm->memory_range_lock); xpmem_att_deref(att); diff --git a/test/issues/1259/aarch64_result.log b/test/issues/1259/aarch64_result.log index a2183ae5..adbca9a7 100644 --- a/test/issues/1259/aarch64_result.log +++ b/test/issues/1259/aarch64_result.log @@ -1,5 +1,5 @@ *** C1259T01 start ******************************* -** xpem_attach to Huge mapped memory range +** xpmem_attach to Huge mapped memory range ** end of range is aligned with Large page size pageshift: 21 ** [ OK ] seg_addr (100000400000) is allocated until xpmem_attach @@ -13,7 +13,7 @@ pageshift: 34 *** C1259T01: PASSED *** C1259T02 start ******************************* -** xpem_attach to Huge mapped memory range +** xpmem_attach to Huge mapped memory range ** end of range is NOT aligned with Large page size pageshift: 21 ** [ OK ] seg_addr (100000400000) is allocated until xpmem_attach @@ -27,15 +27,15 @@ pageshift: 34 *** C1259T02: PASSED *** C1259T03 start ******************************* -** xpem_attach to small mapped memory range +** xpmem_attach to small mapped memory range pageshift: small page ** [ OK ] xpmem_addr (100000210000) is allocated using small pages *** C1259T03: PASSED *** C1259T04 start ******************************* -** xpem_attach to multi pagesize range +** xpmem_attach to multi pagesize range pageshift: 21 -** [ OK ] xpmem_addr (100000400000) is allocated using large pages +** [ OK ] xpmem_addr (100000600000) is allocated using large pages *** C1259T04: PASSED *** C1259T05 start ******************************* @@ -43,12 +43,12 @@ pageshift: 21 XPMEM version = 26003 ==== test_base STARTS ==== -xpmem_proc1: mypid = 10105 +xpmem_proc1: mypid = 38514 xpmem_proc1: sharing 262144 bytes -xpmem_proc1: segid = 200002779 at 0x100000210000 +xpmem_proc1: segid = 200009672 at 0x100000210000 -xpmem_proc2: mypid = 10303 -xpmem_proc2: segid = 200002779 +xpmem_proc2: mypid = 38711 +xpmem_proc2: segid = 200009672 xpmem_proc2: attached at 0x100000210000 xpmem_proc2: adding 1 to all elems @@ -56,13 +56,12 @@ xpmem_proc1: verifying data...done ==== test_base PASSED ==== ==== test_two_attach STARTS ==== -xpmem_proc1: mypid = 10528 +xpmem_proc1: mypid = 39028 xpmem_proc1: sharing 262144 bytes -xpmem_proc1: segid = 200002920 at 0x100000210000 +xpmem_proc1: segid = 200009874 at 0x100000210000 -xpmem_proc2: line 228: 11049 Segmentation fault rm -f "$progdir/$file" -xpmem_proc2: mypid = 10733 -xpmem_proc2: segid = 200002920 +xpmem_proc2: mypid = 39233 +xpmem_proc2: segid = 200009874 xpmem_proc2: attached at 0x100000210000 xpmem_proc2: attached at 0x100000250000 xpmem_proc2: adding 1 to all elems using 0x100000210000 @@ -72,14 +71,14 @@ xpmem_proc1: verifying data...done ==== test_two_attach PASSED ==== ==== test_two_shares STARTS ==== -xpmem_proc1: mypid = 11064 +xpmem_proc1: mypid = 39429 xpmem_proc1: sharing 2 segments, 262144 bytes each -xpmem_proc1: segid[0] = 200002b38 at 0x100000210000 -xpmem_proc1: segid[1] = 400002b38 at 0x100000250000 +xpmem_proc1: segid[0] = 200009a05 at 0x100000210000 +xpmem_proc1: segid[1] = 400009a05 at 0x100000250000 -xpmem_proc2: mypid = 11261 -xpmem_proc2: segid[0] = 200002b38 -xpmem_proc2: segid[1] = 400002b38 +xpmem_proc2: mypid = 39625 +xpmem_proc2: segid[0] = 200009a05 +xpmem_proc2: segid[1] = 400009a05 xpmem_proc2: data[0] attached at 0x100000210000 xpmem_proc2: data[1] attached at 0x100000250000 xpmem_proc2: adding 1 to all elems using 0x100000210000 @@ -89,12 +88,12 @@ xpmem_proc1: verifying data...done ==== test_two_shares PASSED ==== ==== test_fork STARTS ==== -xpmem_proc1: mypid = 11598 +xpmem_proc1: mypid = 39831 xpmem_proc1: sharing 262144 bytes -xpmem_proc1: segid = 200002d4e at 0x100000210000 +xpmem_proc1: segid = 200009b97 at 0x100000210000 -xpmem_proc2: mypid = 11803 -xpmem_proc2: segid = 200002d4e +xpmem_proc2: mypid = 40027 +xpmem_proc2: segid = 200009b97 xpmem_proc2: attached at 0x100000220000 xpmem_proc2: reading to pin pages xpmem_proc2: waiting for COW... @@ -102,7 +101,7 @@ xpmem_proc2: waiting for COW... xpmem_proc1: forking a child xpmem_proc1: adding 1 to all elems to induce COW -xpmem_child: hello from pid 12004 +xpmem_child: hello from pid 40224 xpmem_proc1: give control back to xpmem_proc2 diff --git a/test/issues/1259/x86_64_result.log b/test/issues/1259/x86_64_result.log index 90e0d352..2308bd3d 100644 --- a/test/issues/1259/x86_64_result.log +++ b/test/issues/1259/x86_64_result.log @@ -1,5 +1,5 @@ *** C1259T01 start ******************************* -** xpem_attach to Huge mapped memory range +** xpmem_attach to Huge mapped memory range ** end of range is aligned with Large page size pageshift: 21 ** [ OK ] seg_addr (2aaaab000000) is allocated until xpmem_attach @@ -10,7 +10,7 @@ pageshift: 30 *** C1259T01: PASSED *** C1259T02 start ******************************* -** xpem_attach to Huge mapped memory range +** xpmem_attach to Huge mapped memory range ** end of range is NOT aligned with Large page size pageshift: 21 ** [ OK ] seg_addr (2aaaab000000) is allocated until xpmem_attach @@ -21,15 +21,15 @@ pageshift: 30 *** C1259T02: PASSED *** C1259T03 start ******************************* -** xpem_attach to small mapped memory range +** xpmem_attach to small mapped memory range pageshift: small page ** [ OK ] xpmem_addr (2aaaaafee000) is allocated using small pages *** C1259T03: PASSED *** C1259T04 start ******************************* -** xpem_attach to multi pagesize range +** xpmem_attach to multi pagesize range pageshift: 21 -** [ OK ] xpmem_addr (2aaaab000000) is allocated using large pages +** [ OK ] xpmem_addr (2aaaab200000) is allocated using large pages *** C1259T04: PASSED *** C1259T05 start ******************************* @@ -37,12 +37,12 @@ pageshift: 21 XPMEM version = 26003 ==== test_base STARTS ==== -xpmem_proc1: mypid = 13702 +xpmem_proc1: mypid = 20070 xpmem_proc1: sharing 16384 bytes -xpmem_proc1: segid = 200003586 at 0x2aaaaafee000 +xpmem_proc1: segid = 200004e66 at 0x2aaaaafee000 -xpmem_proc2: mypid = 14123 -xpmem_proc2: segid = 200003586 +xpmem_proc2: mypid = 20490 +xpmem_proc2: segid = 200004e66 xpmem_proc2: attached at 0x2aaaaafee000 xpmem_proc2: adding 1 to all elems @@ -50,12 +50,12 @@ xpmem_proc1: verifying data...done ==== test_base PASSED ==== ==== test_two_attach STARTS ==== -xpmem_proc1: mypid = 14543 +xpmem_proc1: mypid = 20913 xpmem_proc1: sharing 16384 bytes -xpmem_proc1: segid = 2000038cf at 0x2aaaaafee000 +xpmem_proc1: segid = 2000051b1 at 0x2aaaaafee000 -xpmem_proc2: mypid = 14963 -xpmem_proc2: segid = 2000038cf +xpmem_proc2: mypid = 21336 +xpmem_proc2: segid = 2000051b1 xpmem_proc2: attached at 0x2aaaaafee000 xpmem_proc2: attached at 0x2aaaaaff2000 xpmem_proc2: adding 1 to all elems using 0x2aaaaafee000 @@ -65,14 +65,14 @@ xpmem_proc1: verifying data...done ==== test_two_attach PASSED ==== ==== test_two_shares STARTS ==== -xpmem_proc1: mypid = 15383 +xpmem_proc1: mypid = 21758 xpmem_proc1: sharing 2 segments, 16384 bytes each -xpmem_proc1: segid[0] = 200003c17 at 0x2aaaaafee000 -xpmem_proc1: segid[1] = 400003c17 at 0x2aaaaaff2000 +xpmem_proc1: segid[0] = 2000054fe at 0x2aaaaafee000 +xpmem_proc1: segid[1] = 4000054fe at 0x2aaaaaff2000 -xpmem_proc2: mypid = 15807 -xpmem_proc2: segid[0] = 200003c17 -xpmem_proc2: segid[1] = 400003c17 +xpmem_proc2: mypid = 22179 +xpmem_proc2: segid[0] = 2000054fe +xpmem_proc2: segid[1] = 4000054fe xpmem_proc2: data[0] attached at 0x2aaaaafee000 xpmem_proc2: data[1] attached at 0x2aaaaaff2000 xpmem_proc2: adding 1 to all elems using 0x2aaaaafee000 @@ -82,23 +82,23 @@ xpmem_proc1: verifying data...done ==== test_two_shares PASSED ==== ==== test_fork STARTS ==== -xpmem_proc1: mypid = 16227 +xpmem_proc1: mypid = 22599 xpmem_proc1: sharing 16384 bytes -xpmem_proc1: segid = 200003f63 at 0x2aaaaafee000 +xpmem_proc1: segid = 200005847 at 0x2aaaaafee000 -xpmem_proc2: mypid = 16647 -xpmem_proc2: segid = 200003f63 +xpmem_proc2: mypid = 23022 +xpmem_proc2: segid = 200005847 xpmem_proc2: attached at 0x2aaaaafef000 xpmem_proc2: reading to pin pages xpmem_proc2: waiting for COW... xpmem_proc1: forking a child xpmem_proc1: adding 1 to all elems to induce COW + xpmem_proc1: give control back to xpmem_proc2 +xpmem_child: hello from pid 23443 -xpmem_child: hello from pid 17067 - xpmem_proc2: adding 1 to all elems xpmem_proc1: verifying data...done