From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> To: akpm@linux-foundation.org, "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH] selftests/vm: Update max va test to check for high address return. Date: Wed, 28 Feb 2018 13:38:05 +0530 [thread overview] Message-ID: <87vaeha656.fsf@linux.vnet.ibm.com> (raw) In-Reply-To: <20180228035830.10089-1-aneesh.kumar@linux.vnet.ibm.com> "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> writes: > mmap(-1,..) is expected to search from max supported VA top down. It should find > an address above ADDR_SWITCH_HINT. Explicitly check for this. > > Also derefer the address even if we failed the addr check. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> One issue I noticed is how to make this conditional so that we can still run the test on x86 with 4 level page table? > --- > tools/testing/selftests/vm/va_128TBswitch.c | 27 ++++++++++++++++++++------- > 1 file changed, 20 insertions(+), 7 deletions(-) > > diff --git a/tools/testing/selftests/vm/va_128TBswitch.c b/tools/testing/selftests/vm/va_128TBswitch.c > index e7fe734c374f..f68fa4bd8179 100644 > --- a/tools/testing/selftests/vm/va_128TBswitch.c > +++ b/tools/testing/selftests/vm/va_128TBswitch.c > @@ -44,6 +44,7 @@ struct testcase { > unsigned long flags; > const char *msg; > unsigned int low_addr_required:1; > + unsigned int high_addr_required:1; > unsigned int keep_mapped:1; > }; > > @@ -108,6 +109,7 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > @@ -115,12 +117,14 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR) again", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > .size = 2 * PAGE_SIZE, > .flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > .msg = "mmap(HIGH_ADDR, MAP_FIXED)", > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > @@ -128,12 +132,14 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > .size = 2 * PAGE_SIZE, > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1) again", > + .high_addr_required = 1, > }, > { > .addr = ((void *)(ADDR_SWITCH_HINT - PAGE_SIZE)), > @@ -193,6 +199,7 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR, MAP_HUGETLB)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > @@ -200,12 +207,14 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR, MAP_HUGETLB) again", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > .size = HUGETLB_SIZE, > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > .msg = "mmap(HIGH_ADDR, MAP_FIXED | MAP_HUGETLB)", > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > @@ -213,12 +222,14 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1, MAP_HUGETLB)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > .size = HUGETLB_SIZE, > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1, MAP_HUGETLB) again", > + .high_addr_required = 1, > }, > { > .addr = (void *)(ADDR_SWITCH_HINT - PAGE_SIZE), > @@ -257,14 +268,16 @@ static int run_test(struct testcase *test, int count) > if (t->low_addr_required && p >= (void *)(ADDR_SWITCH_HINT)) { > printf("FAILED\n"); > ret = 1; > - } else { > - /* > - * Do a dereference of the address returned so that we catch > - * bugs in page fault handling > - */ > - memset(p, 0, t->size); > + } else if (t->high_addr_required && p < (void *)(ADDR_SWITCH_HINT)) { > + printf("FAILED\n"); > + ret = 1; > + } else > printf("OK\n"); > - } > + /* > + * Do a dereference of the address returned so that we catch > + * bugs in page fault handling > + */ > + memset(p, 0, t->size); > if (!t->keep_mapped) > munmap(p, t->size); > } > -- > 2.14.3 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> To: akpm@linux-foundation.org, "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH] selftests/vm: Update max va test to check for high address return. Date: Wed, 28 Feb 2018 13:38:05 +0530 [thread overview] Message-ID: <87vaeha656.fsf@linux.vnet.ibm.com> (raw) In-Reply-To: <20180228035830.10089-1-aneesh.kumar@linux.vnet.ibm.com> "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> writes: > mmap(-1,..) is expected to search from max supported VA top down. It should find > an address above ADDR_SWITCH_HINT. Explicitly check for this. > > Also derefer the address even if we failed the addr check. > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> One issue I noticed is how to make this conditional so that we can still run the test on x86 with 4 level page table? > --- > tools/testing/selftests/vm/va_128TBswitch.c | 27 ++++++++++++++++++++------- > 1 file changed, 20 insertions(+), 7 deletions(-) > > diff --git a/tools/testing/selftests/vm/va_128TBswitch.c b/tools/testing/selftests/vm/va_128TBswitch.c > index e7fe734c374f..f68fa4bd8179 100644 > --- a/tools/testing/selftests/vm/va_128TBswitch.c > +++ b/tools/testing/selftests/vm/va_128TBswitch.c > @@ -44,6 +44,7 @@ struct testcase { > unsigned long flags; > const char *msg; > unsigned int low_addr_required:1; > + unsigned int high_addr_required:1; > unsigned int keep_mapped:1; > }; > > @@ -108,6 +109,7 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > @@ -115,12 +117,14 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR) again", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > .size = 2 * PAGE_SIZE, > .flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > .msg = "mmap(HIGH_ADDR, MAP_FIXED)", > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > @@ -128,12 +132,14 @@ static struct testcase testcases[] = { > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > .size = 2 * PAGE_SIZE, > .flags = MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1) again", > + .high_addr_required = 1, > }, > { > .addr = ((void *)(ADDR_SWITCH_HINT - PAGE_SIZE)), > @@ -193,6 +199,7 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR, MAP_HUGETLB)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > @@ -200,12 +207,14 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(HIGH_ADDR, MAP_HUGETLB) again", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = HIGH_ADDR, > .size = HUGETLB_SIZE, > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, > .msg = "mmap(HIGH_ADDR, MAP_FIXED | MAP_HUGETLB)", > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > @@ -213,12 +222,14 @@ static struct testcase hugetlb_testcases[] = { > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1, MAP_HUGETLB)", > .keep_mapped = 1, > + .high_addr_required = 1, > }, > { > .addr = (void *) -1, > .size = HUGETLB_SIZE, > .flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS, > .msg = "mmap(-1, MAP_HUGETLB) again", > + .high_addr_required = 1, > }, > { > .addr = (void *)(ADDR_SWITCH_HINT - PAGE_SIZE), > @@ -257,14 +268,16 @@ static int run_test(struct testcase *test, int count) > if (t->low_addr_required && p >= (void *)(ADDR_SWITCH_HINT)) { > printf("FAILED\n"); > ret = 1; > - } else { > - /* > - * Do a dereference of the address returned so that we catch > - * bugs in page fault handling > - */ > - memset(p, 0, t->size); > + } else if (t->high_addr_required && p < (void *)(ADDR_SWITCH_HINT)) { > + printf("FAILED\n"); > + ret = 1; > + } else > printf("OK\n"); > - } > + /* > + * Do a dereference of the address returned so that we catch > + * bugs in page fault handling > + */ > + memset(p, 0, t->size); > if (!t->keep_mapped) > munmap(p, t->size); > } > -- > 2.14.3 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2018-02-28 8:08 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-02-28 3:58 [PATCH] selftests/vm: Update max va test to check for high address return Aneesh Kumar K.V 2018-02-28 3:58 ` Aneesh Kumar K.V 2018-02-28 8:08 ` Aneesh Kumar K.V [this message] 2018-02-28 8:08 ` Aneesh Kumar K.V 2018-02-28 10:58 ` Kirill A. Shutemov 2018-02-28 10:58 ` Kirill A. Shutemov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87vaeha656.fsf@linux.vnet.ibm.com \ --to=aneesh.kumar@linux.vnet.ibm.com \ --cc=akpm@linux-foundation.org \ --cc=kirill.shutemov@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linuxppc-dev@lists.ozlabs.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.