// SPDX-License-Identifier: GPL-2.0-only /* * Simple memory verification test, used to exercise dirty memory migration. */ #include #include #include #include #include #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(); }