[LTP] [PATCH] max_map_count: fix error by using runtime check

Jan Stancek jstancek@redhat.com
Wed Mar 23 11:22:39 CET 2016





----- Original Message -----
> From: "Cui Bixuan" <cuibixuan@huawei.com>
> To: "Cyril Hrubis" <chrubis@suse.cz>
> Cc: zhuyanpeng@huawei.com, zhanyongming@huawei.com, ltp@lists.linux.it
> Sent: Wednesday, 23 March, 2016 9:53:59 AM
> Subject: [LTP]  [PATCH] max_map_count: fix error by using runtime check
> 
> There is a error when compile the case to 32bit binary and
> run it on 64bit arm kernel, which will wrongly skip one mapping.
> 
> Do runtimg check using the machine from uname(2) to fix it.
> 
> Signed-off-by: Cui Bixuan <cuibixuan@huawei.com>
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> ---
>  testcases/kernel/mem/tunable/max_map_count.c | 32
>  +++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/testcases/kernel/mem/tunable/max_map_count.c
> b/testcases/kernel/mem/tunable/max_map_count.c
> index 295a47b..a69e560 100644
> --- a/testcases/kernel/mem/tunable/max_map_count.c
> +++ b/testcases/kernel/mem/tunable/max_map_count.c
> @@ -59,6 +59,7 @@
>  #include <stdbool.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <sys/utsname.h>
>  #include "test.h"
>  #include "mem.h"
> 
> @@ -70,6 +71,7 @@ int TST_TOTAL = 1;
> 
>  static long old_max_map_count;
>  static long old_overcommit;
> +struct utsname un;
> 
>  static long count_maps(pid_t pid);
>  static void max_map_count_test(void);
> @@ -104,6 +106,9 @@ void setup(void)
>  	old_max_map_count = get_sys_tune("max_map_count");
>  	old_overcommit = get_sys_tune("overcommit_memory");
>  	set_sys_tune("overcommit_memory", 2, 1);
> +
> +	if (uname(&un) != 0)
> +		tst_brkm(TBROK | TERRNO, NULL, "uname error");
>  }
> 
>  void cleanup(void)
> @@ -124,19 +129,20 @@ static bool filter_map(const char *line)
>  	if (ret != 1)
>  		return false;
> 
> -#if defined(__x86_64__) || defined(__x86__)
> -	/* On x86, there's an old compat vsyscall page */
> -	if (!strcmp(buf, "[vsyscall]"))
> -		return true;
> -#elif defined(__ia64__)
> -	/* On ia64, the vdso is not a proper mapping */
> -	if (!strcmp(buf, "[vdso]"))
> -		return true;
> -#elif defined(__arm__)
> -	/* Older arm kernels didn't label their vdso maps */
> -	if (!strncmp(line, "ffff0000-ffff1000", 17))
> -		return true;
> -#endif
> +	if (strstr(un.machine, "x86") != NULL)

What if uname contains i386?

Can we relax the pass condition to allow map_count to be
within some tolerance? Then we wouldn't have to worry so much about
all arch specifics.


> +		/* On x86, there's an old compat vsyscall page */
> +		if (!strcmp(buf, "[vsyscall]"))
> +			return true;
> +
> +	if (strstr(un.machine, "ia64") != NULL)
> +		/* On ia64, the vdso is not a proper mapping */
> +		if (!strcmp(buf, "[vdso]"))
> +			return true;
> +
> +	if (strstr(un.machine, "armv") != NULL)
> +		/* Older arm kernels didn't label their vdso maps */
> +		if (!strncmp(line, "ffff0000-ffff1000", 17))
> +			return true;
> 
>  	return false;
>  }
> --
> 1.8.3.4
> 
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
> 


More information about the ltp mailing list