blob: 1cefe95dcb6f61a855a135e05a90bba93a6c25da [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0-only
/*
* Simple memory verification test, used to exercise dirty memory migration.
*/
#include <libcflat.h>
#include <migrate.h>
#include <alloc.h>
#include <asm/page.h>
#include <asm/time.h>
#define NR_PAGES 32
#define SIZE (NR_PAGES * PAGE_SIZE)
static unsigned time_sec = 5;
static void do_getopts(int argc, char **argv)
{
int i;
for (i = 0; i < argc; ++i) {
if (strcmp(argv[i], "-t") == 0) {
i++;
if (i == argc)
break;
time_sec = atol(argv[i]);
}
}
printf("running for %d secs\n", time_sec);
}
int main(int argc, char **argv)
{
void *mem = memalign(PAGE_SIZE, SIZE);
bool success = true;
uint64_t ms;
long i;
do_getopts(argc, argv);
report_prefix_push("memory");
memset(mem, 0, SIZE);
migrate_begin_continuous();
ms = get_clock_ms();
i = 0;
do {
int j;
for (j = 0; j < SIZE; j += PAGE_SIZE) {
if (*(volatile long *)(mem + j) != i) {
success = false;
goto out;
}
*(volatile long *)(mem + j) = i + 1;
}
i++;
} while (get_clock_ms() - ms < time_sec * 1000);
out:
migrate_end_continuous();
report(success, "memory verification stress test");
report_prefix_pop();
return report_summary();
}