[kvm-unit-tests PATCH v1 1/1] s390x: edat: test 2G large page spanning end of memory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Create a region 3 table with fc=1 (i.e. a 2G large page) mapping across the
end of memory.

Check that the part of the large page before the end of memory is accessible,
and the part that is after the end of memory is not.

Also fix a typo in the existing edat2 test.

Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
---
 s390x/edat.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/s390x/edat.c b/s390x/edat.c
index 16138397..1f582efc 100644
--- a/s390x/edat.c
+++ b/s390x/edat.c
@@ -196,6 +196,8 @@ static void test_edat1(void)
 
 static void test_edat2(void)
 {
+	uint64_t mem_end, i;
+
 	report_prefix_push("edat2");
 	p[0] = 42;
 
@@ -206,7 +208,21 @@ static void test_edat2(void)
 	/* Prefixing should not work with huge pages, just like large pages */
 	report(!memcmp(0, VIRT(prefix_buf), LC_SIZE) &&
 		!memcmp(prefix_buf, VIRT(0), LC_SIZE),
-		"pmd, large, prefixing");
+		"pud, large, prefixing");
+
+	mem_end = get_ram_size();
+	if (mem_end >= BIT_ULL(REGION3_SHIFT)) {
+		report_skip("pud spanning end of memory");
+	} else {
+		for (i = 0; i < mem_end; i += PAGE_SIZE)
+			READ_ONCE(*(uint64_t *)VIRT(i));
+		for (i = mem_end; i < BIT_ULL(REGION3_SHIFT); i += PAGE_SIZE) {
+			expect_pgm_int();
+			READ_ONCE(*(uint64_t *)VIRT(i));
+			assert(clear_pgm_int() == PGM_INT_CODE_ADDRESSING);
+		}
+		report_pass("pud spanning end of memory");
+	}
 
 	report_prefix_pop();
 }
-- 
2.46.2





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux