selftests: proc: Fix proc-empty-vm build error on non x86_64

Message ID 20221109110621.1791999-1-punit.agrawal@bytedance.com
State New
Headers
Series selftests: proc: Fix proc-empty-vm build error on non x86_64 |

Commit Message

Punit Agrawal Nov. 9, 2022, 11:06 a.m. UTC
  The proc-empty-vm test is implemented for x86_64 and fails to build
for other architectures. Rather then emitting a compiler error it
would be preferable to only build the test on supported architectures.

Mark proc-empty-vm as a test for x86_64 and customise to the Makefile
to build it only when building for this target architecture.

Fixes: 5bc73bb3451b ("proc: test how it holds up with mapping'less process")
Signed-off-by: Punit Agrawal <punit.agrawal@bytedance.com>
---
 tools/testing/selftests/proc/Makefile | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
  

Comments

Alexey Dobriyan Nov. 9, 2022, 4:59 p.m. UTC | #1
On Wed, Nov 09, 2022 at 11:06:21AM +0000, Punit Agrawal wrote:
> The proc-empty-vm test is implemented for x86_64 and fails to build
> for other architectures. Rather then emitting a compiler error it
> would be preferable to only build the test on supported architectures.

Ehh, can you just port it to whatever arch you're using?
What's the address space on arm/arm64?

	#ifdef __amd64__
                munmap(NULL, ((size_t)1 << 47) - 4096);
	#else
	#error "implement 'unmap everything'"
	#endif

This program is almost arch-independent.

> +TEST_GEN_PROGS_x86_64 += proc-empty-vm
  
Punit Agrawal Nov. 9, 2022, 5:25 p.m. UTC | #2
Alexey Dobriyan <adobriyan@gmail.com> writes:

> On Wed, Nov 09, 2022 at 11:06:21AM +0000, Punit Agrawal wrote:
>> The proc-empty-vm test is implemented for x86_64 and fails to build
>> for other architectures. Rather then emitting a compiler error it
>> would be preferable to only build the test on supported architectures.
>
> Ehh, can you just port it to whatever arch you're using?
> What's the address space on arm/arm64?

On arm64, it is 0x0000ffffffffffff ((1 << 48) - 1) when using 48bit VA,
but goes up when using 52-bit VA[0].

> 	#ifdef __amd64__
>                 munmap(NULL, ((size_t)1 << 47) - 4096);
> 	#else
> 	#error "implement 'unmap everything'"
> 	#endif
>
> This program is almost arch-independent.

I did try updating the #ifdef but then hit the asm block in
vsyscall(). Also, the test would be still fail to build on other
architectures.

While support for architectures is added, it would be good to not have
the compiler throw an error on unsuspecting kselftest users.

>> +TEST_GEN_PROGS_x86_64 += proc-empty-vm

[0] https://docs.kernel.org/arm64/memory.html
  
Punit Agrawal Nov. 9, 2022, 10:07 p.m. UTC | #3
Punit Agrawal <punit.agrawal@bytedance.com> writes:

> The proc-empty-vm test is implemented for x86_64 and fails to build
> for other architectures. Rather then emitting a compiler error it
> would be preferable to only build the test on supported architectures.
>
> Mark proc-empty-vm as a test for x86_64 and customise to the Makefile
> to build it only when building for this target architecture.
>
> Fixes: 5bc73bb3451b ("proc: test how it holds up with mapping'less process")
> Signed-off-by: Punit Agrawal <punit.agrawal@bytedance.com>
> ---
>  tools/testing/selftests/proc/Makefile | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/proc/Makefile b/tools/testing/selftests/proc/Makefile
> index cd95369254c0..6b31439902af 100644
> --- a/tools/testing/selftests/proc/Makefile
> +++ b/tools/testing/selftests/proc/Makefile
> @@ -1,14 +1,18 @@
>  # SPDX-License-Identifier: GPL-2.0-only
> +
> +# When ARCH not overridden for crosscompiling, lookup machine
> +ARCH ?= $(shell uname -m 2>/dev/null || echo not)
> +
>  CFLAGS += -Wall -O2 -Wno-unused-function
>  CFLAGS += -D_GNU_SOURCE
>  LDFLAGS += -pthread
>  
> -TEST_GEN_PROGS :=
> +TEST_GEN_PROGS_x86_64 += proc-empty-vm
> +
>  TEST_GEN_PROGS += fd-001-lookup
>  TEST_GEN_PROGS += fd-002-posix-eq
>  TEST_GEN_PROGS += fd-003-kthread
>  TEST_GEN_PROGS += proc-loadavg-001
> -TEST_GEN_PROGS += proc-empty-vm
>  TEST_GEN_PROGS += proc-pid-vm
>  TEST_GEN_PROGS += proc-self-map-files-001
>  TEST_GEN_PROGS += proc-self-map-files-002

I noticed that a hunk has gone missing from the patch. Please ignore
this version - I'll post an updated one shortly.
  

Patch

diff --git a/tools/testing/selftests/proc/Makefile b/tools/testing/selftests/proc/Makefile
index cd95369254c0..6b31439902af 100644
--- a/tools/testing/selftests/proc/Makefile
+++ b/tools/testing/selftests/proc/Makefile
@@ -1,14 +1,18 @@ 
 # SPDX-License-Identifier: GPL-2.0-only
+
+# When ARCH not overridden for crosscompiling, lookup machine
+ARCH ?= $(shell uname -m 2>/dev/null || echo not)
+
 CFLAGS += -Wall -O2 -Wno-unused-function
 CFLAGS += -D_GNU_SOURCE
 LDFLAGS += -pthread
 
-TEST_GEN_PROGS :=
+TEST_GEN_PROGS_x86_64 += proc-empty-vm
+
 TEST_GEN_PROGS += fd-001-lookup
 TEST_GEN_PROGS += fd-002-posix-eq
 TEST_GEN_PROGS += fd-003-kthread
 TEST_GEN_PROGS += proc-loadavg-001
-TEST_GEN_PROGS += proc-empty-vm
 TEST_GEN_PROGS += proc-pid-vm
 TEST_GEN_PROGS += proc-self-map-files-001
 TEST_GEN_PROGS += proc-self-map-files-002