[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1a5c39e5-a138-4713-bfbb-54f62896a702@redhat.com>
Date: Fri, 10 Jan 2025 16:37:09 +0100
From: David Hildenbrand <david@...hat.com>
To: Thomas Weißschuh <thomas.weissschuh@...utronix.de>,
Andrew Morton <akpm@...ux-foundation.org>, Shuah Khan <shuah@...nel.org>,
Dev Jain <dev.jain@....com>, Thomas Gleixner <tglx@...utronix.de>
Cc: linux-mm@...ck.org, linux-kselftest@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 2/3] selftests/mm: virtual_address_range: Unmap chunks
after validation
On 10.01.25 14:05, Thomas Weißschuh wrote:
> For each accessed chunk a PTE is created.
> More than 1GiB of PTEs is used in this way.
> Remove each PTE after validating a chunk to reduce peak memory usage.
>
> It is important to only unmap memory that previously mmap()ed,
> as unmapping other mappings like the stack, heap or executable mappings
> will crash the process.
> The mappings read from /proc/self/maps and the return values from mmap()
> don't allow a simple correlation due to merging and no guaranteed order.
> To correlate the pointers and mappings use prctl(PR_SET_VMA_ANON_NAME).
> While it introduces a test dependency, other alternatives would
> introduce runtime or development overhead.
>
> Fixes: 010409649885 ("selftests/mm: confirm VA exhaustion without reliance on correctness of mmap()")
> Signed-off-by: Thomas Weißschuh <thomas.weissschuh@...utronix.de>
> ---
> tools/testing/selftests/mm/config | 1 +
> tools/testing/selftests/mm/virtual_address_range.c | 26 ++++++++++++++++++++--
> 2 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/config b/tools/testing/selftests/mm/config
> index 4309916f629e36498efb07eb606b2f0c49ee6211..a28baa536332f3fcfb1b83759b5fbb432ae80178 100644
> --- a/tools/testing/selftests/mm/config
> +++ b/tools/testing/selftests/mm/config
> @@ -7,3 +7,4 @@ CONFIG_TEST_HMM=m
> CONFIG_GUP_TEST=y
> CONFIG_TRANSPARENT_HUGEPAGE=y
> CONFIG_MEM_SOFT_DIRTY=y
> +CONFIG_ANON_VMA_NAME=y
I'm afraid, nobody uses these :) People run these tests against
arbitrary kernels (i.e., distro kernels).
In addition to that, we should handle it like uffd-unit-tests.c and
sense support for CONFIG_ANON_VMA_NAME in the current kernel.
If not around skip the test, like uffd-unit-tests.c does.
> diff --git a/tools/testing/selftests/mm/virtual_address_range.c b/tools/testing/selftests/mm/virtual_address_range.c
> index ea6ccf49ef4c552f26317c2a40b09bca1a677f8f..4fc1c21a5e218eaec4d059b75c31a21dd4e8a215 100644
> --- a/tools/testing/selftests/mm/virtual_address_range.c
> +++ b/tools/testing/selftests/mm/virtual_address_range.c
> @@ -10,6 +10,7 @@
> #include <string.h>
> #include <unistd.h>
> #include <errno.h>
> +#include <sys/prctl.h>
> #include <sys/mman.h>
> #include <sys/time.h>
> #include <fcntl.h>
> @@ -82,6 +83,17 @@ static void validate_addr(char *ptr, int high_addr)
> ksft_exit_fail_msg("Bad address %lx\n", addr);
> }
>
> +static void mark_addr(char *ptr)
I would call this "mark_range" and pass the size (MAP_CHUNK_SIZE) as well.
> +{
> + if (prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, ptr, MAP_CHUNK_SIZE, "virtual_address_range"))
> + ksft_exit_fail_msg("prctl(PR_SET_VMA_ANON_NAME) failed: %s\n", strerror(errno));
> +}
> +
> +static int is_marked_addr(const char *vma_name)
"is_marked_vma" / "is_marked_mapping" ?
Because you are not passing an address ...
Apart from that LGTM.
--
Cheers,
David / dhildenb
Powered by blists - more mailing lists