mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
selftests: KVM: skip hugetlb tests if huge pages are not available
Right now, if KVM memory stress tests are run with hugetlb sources but hugetlb is not available (either in the kernel or because /proc/sys/vm/nr_hugepages is 0) the test will fail with a memory allocation error. This makes it impossible to add tests that default to hugetlb-backed memory, because on a machine with a default configuration they will fail. Therefore, check HugePages_Total as well and, if zero, direct the user to enable hugepages in procfs. Furthermore, return KSFT_SKIP whenever hugetlb is not available. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
53293cb81b
commit
3dc40cf89b
@ -165,26 +165,33 @@ size_t get_trans_hugepagesz(void)
|
||||
size_t get_def_hugetlb_pagesz(void)
|
||||
{
|
||||
char buf[64];
|
||||
const char *tag = "Hugepagesize:";
|
||||
const char *hugepagesize = "Hugepagesize:";
|
||||
const char *hugepages_total = "HugePages_Total:";
|
||||
FILE *f;
|
||||
|
||||
f = fopen("/proc/meminfo", "r");
|
||||
TEST_ASSERT(f != NULL, "Error in opening /proc/meminfo");
|
||||
|
||||
while (fgets(buf, sizeof(buf), f) != NULL) {
|
||||
if (strstr(buf, tag) == buf) {
|
||||
if (strstr(buf, hugepages_total) == buf) {
|
||||
unsigned long long total = strtoull(buf + strlen(hugepages_total), NULL, 10);
|
||||
if (!total) {
|
||||
fprintf(stderr, "HUGETLB is not enabled in /proc/sys/vm/nr_hugepages\n");
|
||||
exit(KSFT_SKIP);
|
||||
}
|
||||
}
|
||||
if (strstr(buf, hugepagesize) == buf) {
|
||||
fclose(f);
|
||||
return strtoull(buf + strlen(tag), NULL, 10) << 10;
|
||||
return strtoull(buf + strlen(hugepagesize), NULL, 10) << 10;
|
||||
}
|
||||
}
|
||||
|
||||
if (feof(f))
|
||||
TEST_FAIL("HUGETLB is not configured in host kernel");
|
||||
else
|
||||
TEST_FAIL("Error in reading /proc/meminfo");
|
||||
if (feof(f)) {
|
||||
fprintf(stderr, "HUGETLB is not configured in host kernel");
|
||||
exit(KSFT_SKIP);
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
return 0;
|
||||
TEST_FAIL("Error in reading /proc/meminfo");
|
||||
}
|
||||
|
||||
#define ANON_FLAGS (MAP_PRIVATE | MAP_ANONYMOUS)
|
||||
|
Loading…
Reference in New Issue
Block a user