public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Zhao Gongyi <zhaogongyi@huawei.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] syscalls/madvise11: new test for madvise(MADV_DONTNEED)
Date: Mon, 10 Oct 2022 15:19:51 +0200	[thread overview]
Message-ID: <Y0Qb9we0RmN4emPt@yuki> (raw)
In-Reply-To: <20221010030759.248442-1-zhaogongyi@huawei.com>

Hi!
> Test cases for madvise(2) system call, advise value as "MADV_MADV_DONTNEED":
> 1. After a successful MADV_DONTNEED operation, it will result in
> zero-fill-on-demand pages for anonymous private mappings
> 2. MADV_DONTNEED cannot be applied to Huge TLB pages
> 
> Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
> ---
>  runtest/syscalls                              |  1 +
>  testcases/kernel/syscalls/madvise/.gitignore  |  1 +
>  testcases/kernel/syscalls/madvise/madvise11.c | 87 +++++++++++++++++++

At the moment we do not have madvise03.c and madvise04.c, why don't we
use them first?

>  3 files changed, 89 insertions(+)
>  create mode 100644 testcases/kernel/syscalls/madvise/madvise11.c
> 
> diff --git a/runtest/syscalls b/runtest/syscalls
> index 61a7b7677..a8ed9d65e 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -946,6 +946,7 @@ madvise07 madvise07
>  madvise08 madvise08
>  madvise09 madvise09
>  madvise10 madvise10
> +madvise11 madvise11
> 
>  newuname01 newuname01
> 
> diff --git a/testcases/kernel/syscalls/madvise/.gitignore b/testcases/kernel/syscalls/madvise/.gitignore
> index 002d8e5d9..6e5b92ab7 100644
> --- a/testcases/kernel/syscalls/madvise/.gitignore
> +++ b/testcases/kernel/syscalls/madvise/.gitignore
> @@ -6,3 +6,4 @@
>  /madvise08
>  /madvise09
>  /madvise10
> +/madvise11
> diff --git a/testcases/kernel/syscalls/madvise/madvise11.c b/testcases/kernel/syscalls/madvise/madvise11.c
> new file mode 100644
> index 000000000..358c07d3a
> --- /dev/null
> +++ b/testcases/kernel/syscalls/madvise/madvise11.c
> @@ -0,0 +1,87 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved.
> + * Author: Zhao Gongyi <zhaogongyi@huawei.com>
> + */
> +
> +/*\
> + * [Description]
> + *
> + * Test cases for madvise(2) system call, advise value as "MADV_MADV_DONTNEED":
> + * 1. After a successful MADV_DONTNEED operation, it will result in
> + *    zero-fill-on-demand pages for anonymous private mappings
> + * 2. MADV_DONTNEED cannot be applied to Huge TLB pages
> + */
> +
> +#include "tst_test.h"
> +
> +#define MAP_SIZE (8 * 1024)
> +
> +static char *addr;

There is no need for this to be a global variable.

> +static void test_madvise01(void)
> +{
> +	int i;
> +
> +	addr = SAFE_MMAP(NULL, MAP_SIZE,
> +			PROT_READ | PROT_WRITE,
> +			MAP_PRIVATE | MAP_ANONYMOUS,
> +			-1, 0);
> +	memset(addr, 1, MAP_SIZE);
> +
> +	TEST(madvise(addr, MAP_SIZE, MADV_DONTNEED));
> +	if (TST_RET == -1) {
> +		tst_brk(TBROK | TTERRNO, "madvise(%p, %d, 0x%x) failed",
> +			addr, MAP_SIZE, MADV_DONTNEED);
> +	}
> +
> +	for (i = 0; i < MAP_SIZE; i++) {
> +		if (addr[i]) {
> +			tst_res(TFAIL,
> +				"There are no zero-fill-on-demand pages "
> +				"for anonymous private mappings");
> +			break;

I would do goto ret; here insetad and point ret just before the unmap at
the end, that way there would be no reason to add the if (i == MAP_SIZE)
before the TPASS message.

> +		}
> +	}
> +
> +	if (i == MAP_SIZE) {
> +		tst_res(TPASS,
> +			"There are zero-fill-on-demand pages "
> +			"for anonymous private mappings");
> +	}
> +
> +	SAFE_MUNMAP(addr, MAP_SIZE);
> +}
> +
> +static void test_madvise02(void)
> +{
> +	int mapsz = tst_get_hugepage_size();
> +
> +	addr = SAFE_MMAP(NULL, mapsz,
> +			PROT_READ | PROT_WRITE,
> +			MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
> +			-1, 0);
> +
> +	TEST(madvise(addr, mapsz, MADV_DONTNEED));
> +	if (TST_RET != -1) {
> +		tst_res(TFAIL, "madvise(%p, %d, 0x%x) succeed unexpectedly",
> +			addr, mapsz, MADV_DONTNEED);
> +	} else {
> +		tst_res(TPASS, "madvise test for 'MADV_DONTNEED' passed");
> +	}

Please make use of TST_EXP_FAIL()

> +	SAFE_MUNMAP(addr, mapsz);
> +}
> +
> +static void test_madvise(void)
> +{
> +	test_madvise01();
> +	test_madvise02();
> +}
> +
> +static struct tst_test test = {
> +	.test_all = test_madvise,
> +	.needs_root = 1,
> +	.hugepages = {1, TST_NEEDS},

This would mean that the first case would be skipped in case where
hugepages are not supported or if the allocation failed. The best option
here would be splitting the test into two so that the functional test is
not disabled when hugepages are not supported.

> +};
> +
> --
> 2.17.1
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

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

  reply	other threads:[~2022-10-10 13:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-10  3:07 [LTP] [PATCH] syscalls/madvise11: new test for madvise(MADV_DONTNEED) Zhao Gongyi via ltp
2022-10-10 13:19 ` Cyril Hrubis [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-10-11 12:23 zhaogongyi via ltp

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=Y0Qb9we0RmN4emPt@yuki \
    --to=chrubis@suse.cz \
    --cc=ltp@lists.linux.it \
    --cc=zhaogongyi@huawei.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox