mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
064eedf2c5
commit
0f55b67e5a
|
@ -14,6 +14,7 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#define KVM_UTIL_PGS_PER_HUGEPG 512
|
||||
|
@ -664,13 +665,21 @@ void vm_userspace_mem_region_add(struct kvm_vm *vm,
|
|||
|
||||
/* As needed perform madvise */
|
||||
if (src_type == VM_MEM_SRC_ANONYMOUS || src_type == VM_MEM_SRC_ANONYMOUS_THP) {
|
||||
ret = madvise(region->host_mem, npages * vm->page_size,
|
||||
src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
|
||||
TEST_ASSERT(ret == 0, "madvise failed,\n"
|
||||
" addr: %p\n"
|
||||
" length: 0x%lx\n"
|
||||
" src_type: %x",
|
||||
region->host_mem, npages * vm->page_size, src_type);
|
||||
struct stat statbuf;
|
||||
|
||||
ret = stat("/sys/kernel/mm/transparent_hugepage", &statbuf);
|
||||
TEST_ASSERT(ret == 0 || (ret == -1 && errno == ENOENT),
|
||||
"stat /sys/kernel/mm/transparent_hugepage");
|
||||
|
||||
TEST_ASSERT(ret == 0 || src_type != VM_MEM_SRC_ANONYMOUS_THP,
|
||||
"VM_MEM_SRC_ANONYMOUS_THP requires THP to be configured in the host kernel");
|
||||
|
||||
if (ret == 0) {
|
||||
ret = madvise(region->host_mem, npages * vm->page_size,
|
||||
src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
|
||||
TEST_ASSERT(ret == 0, "madvise failed, addr: %p length: 0x%lx src_type: %x",
|
||||
region->host_mem, npages * vm->page_size, src_type);
|
||||
}
|
||||
}
|
||||
|
||||
region->unused_phy_pages = sparsebit_alloc();
|
||||
|
|
Loading…
Reference in New Issue