xpmem: Use correct process_vm in xpmem functions

This reverts commit 29d27b7c8d.

Change-Id: I1863cddcffa67c60e5f93d874447db9919e519dc
This commit is contained in:
Yoshihisa Morizumi
2021-01-08 17:04:43 +09:00
committed by Masamichi Takagi
parent 63443383e9
commit 4ac9dcdccd
3 changed files with 370 additions and 12 deletions

View File

@ -1421,10 +1421,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_rwspinlock_read_lock_noirq(&vm->memory_range_lock);
@ -1438,7 +1437,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) {
@ -1475,8 +1474,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);
@ -1673,8 +1671,7 @@ int xpmem_remove_process_memory_range(
xpmem_att_ref(att);
ihk_rwspinlock_read_lock_noirq(
&cpu_local_var(current)->vm->memory_range_lock);
ihk_rwspinlock_read_lock_noirq(&vm->memory_range_lock);
mcs_rwlock_writer_lock(&att->at_lock, &at_lock);
@ -1711,7 +1708,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__);
@ -1732,7 +1729,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__);
@ -1756,8 +1753,7 @@ int xpmem_remove_process_memory_range(
out:
mcs_rwlock_writer_unlock(&att->at_lock, &at_lock);
ihk_rwspinlock_read_unlock_noirq(
&cpu_local_var(current)->vm->memory_range_lock);
ihk_rwspinlock_read_unlock_noirq(&vm->memory_range_lock);
xpmem_att_deref(att);

View File

@ -0,0 +1,184 @@
*** C1259T01 start *******************************
** 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
** [ OK ] xpmem_addr (100000400000) is allocated using large pages
pageshift: 29
** [ OK ] seg_addr (100020000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (100020000000) is allocated using large pages
pageshift: 34
** [ OK ] seg_addr (100400000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (100400000000) is allocated using large pages
*** C1259T01: PASSED
*** C1259T02 start *******************************
** 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
** [ OK ] xpmem_addr (100000400000) is allocated using large pages
pageshift: 29
** [ OK ] seg_addr (100020000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (100020000000) is allocated using large pages
pageshift: 34
** [ OK ] seg_addr (100400000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (100400000000) is allocated using large pages
*** C1259T02: PASSED
*** C1259T03 start *******************************
** xpmem_attach to small mapped memory range
pageshift: small page
** [ OK ] xpmem_addr (100000210000) is allocated using small pages
*** C1259T03: PASSED
*** C1259T04 start *******************************
** xpmem_attach to multi pagesize range
pageshift: 21
** [ OK ] xpmem_addr (100000600000) is allocated using large pages
*** C1259T04: PASSED
*** C1259T05 start *******************************
** xpmem testsuite
XPMEM version = 26003
==== test_base STARTS ====
xpmem_proc1: mypid = 38514
xpmem_proc1: sharing 262144 bytes
xpmem_proc1: segid = 200009672 at 0x100000210000
xpmem_proc2: mypid = 38711
xpmem_proc2: segid = 200009672
xpmem_proc2: attached at 0x100000210000
xpmem_proc2: adding 1 to all elems
xpmem_proc1: verifying data...done
==== test_base PASSED ====
==== test_two_attach STARTS ====
xpmem_proc1: mypid = 39028
xpmem_proc1: sharing 262144 bytes
xpmem_proc1: segid = 200009874 at 0x100000210000
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
xpmem_proc2: adding 1 to all elems using 0x100000250000
xpmem_proc1: verifying data...done
==== test_two_attach PASSED ====
==== test_two_shares STARTS ====
xpmem_proc1: mypid = 39429
xpmem_proc1: sharing 2 segments, 262144 bytes each
xpmem_proc1: segid[0] = 200009a05 at 0x100000210000
xpmem_proc1: segid[1] = 400009a05 at 0x100000250000
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
xpmem_proc2: adding 1 to all elems using 0x100000250000
xpmem_proc1: verifying data...done
==== test_two_shares PASSED ====
==== test_fork STARTS ====
xpmem_proc1: mypid = 39831
xpmem_proc1: sharing 262144 bytes
xpmem_proc1: segid = 200009b97 at 0x100000210000
xpmem_proc2: mypid = 40027
xpmem_proc2: segid = 200009b97
xpmem_proc2: attached at 0x100000220000
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_child: hello from pid 40224
xpmem_proc1: give control back to xpmem_proc2
xpmem_proc2: adding 1 to all elems
xpmem_proc1: verifying data...done
==== test_fork PASSED ====
*** XTP_001 start ***
[OK] xpmem_make
[OK] xpmem_get
[OK] xpmem_attach
[OK] xpmem_detach
[OK] xpmem_remove
*** XTP_001 PASSED
*** XTP_002 start ***
[OK] xpmem_make in child
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] xpmem_remove in child
*** XTP_002 PASSED
*** XTP_003 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_003 PASSED
*** XTP_004 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_004 PASSED
*** XTP_005 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_005 PASSED
*** XTP_006 start ***
[OK] xpmem_make
[OK] xpmem_get in child failed (parent process exited already
*** XTP_006 PASSED
*** XTP_007 start ***
[OK] xpmem_make failed (invalid address)
[OK] xpmem_make succeed(do twice to same address)
*** XTP_007 PASSED
*** XTP_008 start ***
[OK] xpmem_get in child failed (invalid segid)
[OK] xpmem_get in child (do twice to same segid
*** XTP_008 PASSED
*** XTP_009 start ***
[OK] xpmem_attach in childi failed (invalid apid)
[OK] xpmem_attach in child succeed (do twice to same apid)
*** XTP_009 PASSED
*** XTP_010 start ***
[OK] xpmem_detach in child succeed (invalid address)
[OK] xpmem_detach in child succeed (do twice to same address)
*** XTP_010 PASSED
*** XTP_011 start ***
[OK] xpmem_remove failed (invalid segid)
[OK] xpmem_remove failed (do twice to same segid)
*** XTP_011 PASSED

View File

@ -0,0 +1,178 @@
*** C1259T01 start *******************************
** 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
** [ OK ] xpmem_addr (2aaaab000000) is allocated using large pages
pageshift: 30
** [ OK ] seg_addr (2aaac0000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (2aaac0000000) is allocated using large pages
*** C1259T01: PASSED
*** C1259T02 start *******************************
** 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
** [ OK ] xpmem_addr (2aaaab000000) is allocated using large pages
pageshift: 30
** [ OK ] seg_addr (2aaac0000000) is allocated until xpmem_attach
** [ OK ] xpmem_addr (2aaac0000000) is allocated using large pages
*** C1259T02: PASSED
*** C1259T03 start *******************************
** xpmem_attach to small mapped memory range
pageshift: small page
** [ OK ] xpmem_addr (2aaaaafee000) is allocated using small pages
*** C1259T03: PASSED
*** C1259T04 start *******************************
** xpmem_attach to multi pagesize range
pageshift: 21
** [ OK ] xpmem_addr (2aaaab200000) is allocated using large pages
*** C1259T04: PASSED
*** C1259T05 start *******************************
** xpmem testsuite
XPMEM version = 26003
==== test_base STARTS ====
xpmem_proc1: mypid = 20070
xpmem_proc1: sharing 16384 bytes
xpmem_proc1: segid = 200004e66 at 0x2aaaaafee000
xpmem_proc2: mypid = 20490
xpmem_proc2: segid = 200004e66
xpmem_proc2: attached at 0x2aaaaafee000
xpmem_proc2: adding 1 to all elems
xpmem_proc1: verifying data...done
==== test_base PASSED ====
==== test_two_attach STARTS ====
xpmem_proc1: mypid = 20913
xpmem_proc1: sharing 16384 bytes
xpmem_proc1: segid = 2000051b1 at 0x2aaaaafee000
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
xpmem_proc2: adding 1 to all elems using 0x2aaaaaff2000
xpmem_proc1: verifying data...done
==== test_two_attach PASSED ====
==== test_two_shares STARTS ====
xpmem_proc1: mypid = 21758
xpmem_proc1: sharing 2 segments, 16384 bytes each
xpmem_proc1: segid[0] = 2000054fe at 0x2aaaaafee000
xpmem_proc1: segid[1] = 4000054fe at 0x2aaaaaff2000
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
xpmem_proc2: adding 1 to all elems using 0x2aaaaaff2000
xpmem_proc1: verifying data...done
==== test_two_shares PASSED ====
==== test_fork STARTS ====
xpmem_proc1: mypid = 22599
xpmem_proc1: sharing 16384 bytes
xpmem_proc1: segid = 200005847 at 0x2aaaaafee000
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_proc2: adding 1 to all elems
xpmem_proc1: verifying data...done
==== test_fork PASSED ====
*** XTP_001 start ***
[OK] xpmem_make
[OK] xpmem_get
[OK] xpmem_attach
[OK] xpmem_detach
[OK] xpmem_remove
*** XTP_001 PASSED
*** XTP_002 start ***
[OK] xpmem_make in child
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] xpmem_remove in child
*** XTP_002 PASSED
*** XTP_003 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_003 PASSED
*** XTP_004 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] xpmem_detach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_004 PASSED
*** XTP_005 start ***
[OK] xpmem_make
[OK] xpmem_get in child
[OK] xpmem_attach in child
[OK] validate TEST_VAL
[OK] xpmem_remove
*** XTP_005 PASSED
*** XTP_006 start ***
[OK] xpmem_make
[OK] xpmem_get in child failed (parent process exited already
*** XTP_006 PASSED
*** XTP_007 start ***
[OK] xpmem_make failed (invalid address)
[OK] xpmem_make succeed(do twice to same address)
*** XTP_007 PASSED
*** XTP_008 start ***
[OK] xpmem_get in child failed (invalid segid)
[OK] xpmem_get in child (do twice to same segid
*** XTP_008 PASSED
*** XTP_009 start ***
[OK] xpmem_attach in childi failed (invalid apid)
[OK] xpmem_attach in child succeed (do twice to same apid)
*** XTP_009 PASSED
*** XTP_010 start ***
[OK] xpmem_detach in child succeed (invalid address)
[OK] xpmem_detach in child succeed (do twice to same address)
*** XTP_010 PASSED
*** XTP_011 start ***
[OK] xpmem_remove failed (invalid segid)
[OK] xpmem_remove failed (do twice to same segid)
*** XTP_011 PASSED