blob: c2deab477ff62c31f60cbefeb98962857b05f2d9 [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
/*
* Copyright (C) 2005-2006 IBM Corporation.
* Author: David Gibson & Adam Litke
*/
/*\
* [Description]
*
* This baseline test validates that a mapping of a certain size can be
* created, correctly. Once created, all the pages are filled with a
* pattern and rechecked to test for corruption. The mapping is then
* released. This process is repeated for a specified number of
* iterations.
*/
#include "hugetlb.h"
#define NR_HUGEPAGES 2
#define MNTPOINT "hugetlbfs/"
static unsigned long hpage_size;
static int fd = -1;
static void run_test(unsigned int iter)
{
char *m;
size_t i, j;
char pattern = 'A';
size_t size = NR_HUGEPAGES*hpage_size;
fd = tst_creat_unlinked(MNTPOINT, 0);
m = SAFE_MMAP(NULL, size, (PROT_READ|PROT_WRITE), MAP_SHARED, fd, 0);
for (i = 0; i < NR_HUGEPAGES; i++) {
for (j = 0; j < hpage_size; j++) {
if (*(m+(i*hpage_size)+j) != 0) {
tst_res(TFAIL, "Iter %u: Verifying the mmap area failed. "
"Got %c, expected 0", iter,
*(m+(i*hpage_size)+j));
goto cleanup;
}
}
}
for (i = 0; i < NR_HUGEPAGES; i++) {
pattern = 65+(i%26);
memset(m+(i*hpage_size), pattern, hpage_size);
}
for (i = 0; i < NR_HUGEPAGES; i++) {
pattern = 65+(i%26);
for (j = 0; j < hpage_size; j++) {
if (*(m+(i*hpage_size)+j) != pattern) {
tst_res(TFAIL, "Iter %u: Verifying the mmap area failed. "
"got: %c, expected: %c", iter,
*(m+(i*hpage_size)+j), pattern);
goto cleanup;
}
}
}
tst_res(TPASS, "Iter %u: Successfully verified the mmap area.", iter);
cleanup:
SAFE_MUNMAP(m, size);
SAFE_CLOSE(fd);
}
static void setup(void)
{
hpage_size = tst_get_hugepage_size();
}
static void cleanup(void)
{
if (fd >= 0)
SAFE_CLOSE(fd);
}
static struct tst_test test = {
.tcnt = 2,
.needs_root = 1,
.mntpoint = MNTPOINT,
.needs_hugetlbfs = 1,
.needs_tmpdir = 1,
.setup = setup,
.cleanup = cleanup,
.test = run_test,
.hugepages = {NR_HUGEPAGES, TST_NEEDS},
};