Skip to content

Commit 0f55b67

Browse files
Andrew Jonesbonzini
authored andcommitted
KVM: selftests: Don't require THP to run tests
Unless we want to test with THP, then we shouldn't require it to be configured by the host kernel. Unfortunately, even advising with MADV_NOHUGEPAGE does require it, so check for THP first in order to avoid madvise failing with EINVAL. Signed-off-by: Andrew Jones <drjones@redhat.com> Message-Id: <20201029201703.102716-2-drjones@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent 064eedf commit 0f55b67

1 file changed

Lines changed: 16 additions & 7 deletions

File tree

tools/testing/selftests/kvm/lib/kvm_util.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <sys/mman.h>
1515
#include <sys/types.h>
1616
#include <sys/stat.h>
17+
#include <unistd.h>
1718
#include <linux/kernel.h>
1819

1920
#define KVM_UTIL_PGS_PER_HUGEPG 512
@@ -664,13 +665,21 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm,
664665

665666
/* As needed perform madvise */
666667
if (src_type == VM_MEM_SRC_ANONYMOUS || src_type == VM_MEM_SRC_ANONYMOUS_THP) {
667-
ret = madvise(region->host_mem, npages * vm->page_size,
668-
src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
669-
TEST_ASSERT(ret == 0, "madvise failed,\n"
670-
" addr: %p\n"
671-
" length: 0x%lx\n"
672-
" src_type: %x",
673-
region->host_mem, npages * vm->page_size, src_type);
668+
struct stat statbuf;
669+
670+
ret = stat("/sys/kernel/mm/transparent_hugepage", &statbuf);
671+
TEST_ASSERT(ret == 0 || (ret == -1 && errno == ENOENT),
672+
"stat /sys/kernel/mm/transparent_hugepage");
673+
674+
TEST_ASSERT(ret == 0 || src_type != VM_MEM_SRC_ANONYMOUS_THP,
675+
"VM_MEM_SRC_ANONYMOUS_THP requires THP to be configured in the host kernel");
676+
677+
if (ret == 0) {
678+
ret = madvise(region->host_mem, npages * vm->page_size,
679+
src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
680+
TEST_ASSERT(ret == 0, "madvise failed, addr: %p length: 0x%lx src_type: %x",
681+
region->host_mem, npages * vm->page_size, src_type);
682+
}
674683
}
675684

676685
region->unused_phy_pages = sparsebit_alloc();

0 commit comments

Comments
 (0)