All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avinesh Kumar <akumar@suse.de>
To: Yang Xu <xuyang2018.jy@fujitsu.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH 3/4] syscalls/mlock03: Convert into new api
Date: Wed, 19 Apr 2023 17:15:16 +0530	[thread overview]
Message-ID: <1827762.iFF2E32hkL@localhost> (raw)
In-Reply-To: <1680604594-16596-3-git-send-email-xuyang2018.jy@fujitsu.com>

Hi,

On Tuesday, April 4, 2023 4:06:33 PM IST Yang Xu wrote:
> Also remove tst_require_root. Test mlock/munlock instead of mlock by default.
> 
> Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
> ---
>  testcases/kernel/syscalls/mlock/mlock03.c | 137 +++++++---------------
>  1 file changed, 43 insertions(+), 94 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/mlock/mlock03.c b/testcases/kernel/syscalls/mlock/mlock03.c
> index 8bc65701c..0fc3fa8ed 100644
> --- a/testcases/kernel/syscalls/mlock/mlock03.c
> +++ b/testcases/kernel/syscalls/mlock/mlock03.c
> @@ -1,119 +1,68 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
Original test only has GPLv2

>  /*
> - * Stack size mapping is decreased through mlock/munlock call.
> - *
> - * This is to test kernel if it has a problem with shortening [stack]
> - * mapping through several loops of mlock/munlock of /proc/self/maps.
> - *
> - * From:
> - * munlock     76KiB bfef2000-bff05000 rw-p 00000000 00:00 0          [stack]
> - *
> - * To:
> - * munlock     44KiB bfefa000-bff05000 rw-p 00000000 00:00 0          [stack]
> - *
> - * with more iterations - could drop to 0KiB.
> - *
>   * Copyright (C) 2010  Red Hat, Inc.
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of version 2 of the GNU General Public
> - * License as published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope that it would be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> - *
> - * Further, this software is distributed without any warranty that it
> - * is free of the rightful claim of any third person regarding
> - * infringement or the like.  Any license provided herein, whether
> - * implied or otherwise, applies only to this software file.  Patent
> - * licenses, if any, provided herein do not apply to combinations of
> - * this program with other software, or any other product whatsoever.
> + */
> +
> +/*\
> + * [Description]
>   *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> - * 02110-1301, USA.
> + * This case is designed to test kernel whether met a problem with shortening
> + * [stack] mapping through several loops of mlock/munlock of /proc/self/maps.
I don't understand how shortening of stack by calling to mlock/munlock
for maps regions may work, so no comments on actual patch.

>   */
> +
>  #include <sys/mman.h>
>  #include <stdio.h>
>  #include <string.h>
> -#include "test.h"
> +#include <pwd.h>
> +#include "tst_test.h"
> +#include "tst_safe_stdio.h"
>  
>  #define KB 1024
>  
> -char *TCID = "mlock03";
> -int TST_TOTAL = 1;
> -
> -static void setup(void);
> -static void cleanup(void);
> -
> -int main(int argc, char *argv[])
> +static void verify_mlock(void)
>  {
> -	int lc;
>  	long from, to;
>  	long first = -1, last = -1;
>  	char b[KB];
>  	FILE *fp;
>  
> -	tst_parse_opts(argc, argv, NULL, NULL);
> -
> -	setup();
> +	fp = SAFE_FOPEN("/proc/self/maps", "r");
> +	while (!feof(fp)) {
> +		if (!fgets(b, KB - 1, fp))
> +			break;
> +		b[strlen(b) - 1] = '\0';
> +		if (sscanf(b, "%lx-%lx", &from, &to) != 2) {
> +			tst_res(TFAIL, "parse %s start and end address failed",
> +					b);
> +			continue;
> +		}
>  
> -	for (lc = 0; TEST_LOOPING(lc); lc++) {
> -		fp = fopen("/proc/self/maps", "r");
> -		if (fp == NULL)
> -			tst_brkm(TBROK | TERRNO, cleanup, "fopen");
> -		while (!feof(fp)) {
> -			if (!fgets(b, KB - 1, fp))
> -				break;
> -			b[strlen(b) - 1] = '\0';
> -			sscanf(b, "%lx-%lx", &from, &to);
> +		/* Record the initial stack size. */
> +		if (strstr(b, "[stack]") != NULL)
> +			first = (to - from) / KB;
>  
> -			/* Record the initial stack size. */
> -			if (lc == 0 && strstr(b, "[stack]") != NULL)
> -				first = (to - from) / KB;
> +		tst_res(TINFO, "mlock[%lx,%lx]", from, to);
> +		if (mlock((const void *)from, to - from) == -1)
> +			tst_res(TINFO | TERRNO, "mlock failed");
>  
> -			switch (lc & 1) {
> -			case 0:
> -				if (mlock((const void *)from, to - from) == -1)
> -					tst_resm(TINFO | TERRNO,
> -						 "mlock failed");
> -				break;
> -			case 1:
> -				if (munlock((void *)from, to - from) == -1)
> -					tst_resm(TINFO | TERRNO,
> -						 "munlock failed");
> -				break;
> -			default:
> -				break;
> -			}
> -			tst_resm(TINFO, "%s from %lx to %0lx",
> -				 (lc & 1) ? "munlock" : "mlock", from, to);
> +		tst_res(TINFO, "munlock [%lx,%lx]", from, to);
> +		if (munlock((void *)from, to - from) == -1)
> +			tst_res(TINFO | TERRNO, "munlock failed");
>  
> -			/* Record the final stack size. */
> -			if (strstr(b, "[stack]") != NULL)
> -				last = (to - from) / KB;
> -		}
> -		fclose(fp);
> +		/* Record the final stack size. */
> +		if (strstr(b, "[stack]") != NULL)
> +			last = (to - from) / KB;
>  	}
> -	tst_resm(TINFO, "starting stack size is %ld", first);
> -	tst_resm(TINFO, "final stack size is %ld", last);
> +	SAFE_FCLOSE(fp);
> +
> +	tst_res(TINFO, "starting stack size is %ld", first);
> +	tst_res(TINFO, "final stack size is %ld", last);
>  	if (last < first)
> -		tst_resm(TFAIL, "stack size is decreased.");
> +		tst_res(TFAIL, "stack size is decreased.");
>  	else
> -		tst_resm(TPASS, "stack size is not decreased.");
> -
> -	cleanup();
> -	tst_exit();
> +		tst_res(TPASS, "stack size is not decreased.");
>  }
>  
> -void setup(void)
> -{
> -	tst_require_root();
> -
> -	tst_sig(FORK, DEF_HANDLER, cleanup);
> -	TEST_PAUSE;
> -}
> -
> -void cleanup(void)
> -{
> -}
> +static struct tst_test test = {
> +	.test_all = verify_mlock,
> +};
> 

--
Regards,
Avinesh



-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2023-04-19 11:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-04 10:36 [LTP] [PATCH 1/4] syscalls/mlock01: Convert into new api Yang Xu
2023-04-04 10:36 ` [LTP] [PATCH 2/4] syscalls/mlock02: " Yang Xu
2023-04-19 11:22   ` Avinesh Kumar
2023-04-24  8:48     ` Yang Xu (Fujitsu)
2023-04-04 10:36 ` [LTP] [PATCH 3/4] syscalls/mlock03: " Yang Xu
2023-04-19 11:45   ` Avinesh Kumar [this message]
2023-04-24  8:19     ` Yang Xu (Fujitsu)
2023-04-27  5:44     ` [LTP] [PATCH v2 1/2] syscalls/mlock03:Remove meaningless case Yang Xu
2023-04-27  5:44       ` [LTP] [PATCH v2 2/2] syscalls/mlock04: Convert into new api Yang Xu
2023-05-02 12:13         ` Cyril Hrubis
2023-05-02 12:03       ` [LTP] [PATCH v2 1/2] syscalls/mlock03:Remove meaningless case Cyril Hrubis
2023-05-08  2:32         ` Yang Xu (Fujitsu)
2023-04-04 10:36 ` [LTP] [PATCH 4/4] syscalls/mlock04: Convert into new api Yang Xu
2023-04-19 11:21 ` [LTP] [PATCH 1/4] syscalls/mlock01: " Avinesh Kumar

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=1827762.iFF2E32hkL@localhost \
    --to=akumar@suse.de \
    --cc=ltp@lists.linux.it \
    --cc=xuyang2018.jy@fujitsu.com \
    /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: link
Be 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.