unplugged-system/external/ltp/testcases/kernel/syscalls/madvise/madvise03.c

67 lines
1.2 KiB
C

// 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]
*
* Check that successful madvise(2) MADV_DONTNEED operation will result in
* zero-fill-on-demand pages for anonymous private mappings.
*/
#include "tst_test.h"
#define MAP_SIZE (8 * 1024)
static char *addr;
static void run(void)
{
int i;
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");
return;
}
}
if (i == MAP_SIZE) {
tst_res(TPASS,
"There are zero-fill-on-demand pages "
"for anonymous private mappings");
}
}
static void setup(void)
{
addr = SAFE_MMAP(NULL, MAP_SIZE,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);
}
static void cleanup(void)
{
if (addr)
SAFE_MUNMAP(addr, MAP_SIZE);
}
static struct tst_test test = {
.test_all = run,
.setup = setup,
.cleanup = cleanup,
};