Kselftests: remove support of libhugetlbfs from kselftests
libhugetlbfs, the user side utitlity to work with hugepages, does not have any active support. There are only 2 selftests which are part of in vm/hmm_test.c that depends on libhugetlbfs. This patch modifies the tests so that they will not require libhugetlb library. [axelrasmussen@google.com: : remove orphaned references to local_config.{h,mk}] Link: https://lkml.kernel.org/r/20220831211526.2743216-1-axelrasmussen@google.com Link: https://lkml.kernel.org/r/20220801070231.13831-1-tsahu@linux.ibm.com Signed-off-by: Tarun Sahu <tsahu@linux.ibm.com> Signed-off-by: Axel Rasmussen <axelrasmussen@google.com> Tested-by: Zach O'Keefe <zokeefe@google.com> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Jerome Glisse <jglisse@redhat.com> Cc: Shivaprasad G Bhat <sbhat@linux.ibm.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vaibhav Jain <vaibhav@linux.ibm.com> Cc: Axel Rasmussen <axelrasmussen@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
b84e04f1ba
commit
6f83d6c74e
|
@ -1,9 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Makefile for vm selftests
|
||||
|
||||
LOCAL_HDRS += $(selfdir)/vm/local_config.h $(top_srcdir)/mm/gup_test.h
|
||||
|
||||
include local_config.mk
|
||||
LOCAL_HDRS += $(top_srcdir)/mm/gup_test.h
|
||||
|
||||
uname_M := $(shell uname -m 2>/dev/null || echo not)
|
||||
MACHINE ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/ppc64/')
|
||||
|
@ -152,23 +150,6 @@ endif
|
|||
|
||||
$(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap
|
||||
|
||||
# HMM_EXTRA_LIBS may get set in local_config.mk, or it may be left empty.
|
||||
$(OUTPUT)/hmm-tests: LDLIBS += $(HMM_EXTRA_LIBS)
|
||||
|
||||
$(OUTPUT)/ksm_tests: LDLIBS += -lnuma
|
||||
|
||||
$(OUTPUT)/migration: LDLIBS += -lnuma
|
||||
|
||||
local_config.mk local_config.h: check_config.sh
|
||||
/bin/sh ./check_config.sh $(CC)
|
||||
|
||||
EXTRA_CLEAN += local_config.mk local_config.h
|
||||
|
||||
ifeq ($(HMM_EXTRA_LIBS),)
|
||||
all: warn_missing_hugelibs
|
||||
|
||||
warn_missing_hugelibs:
|
||||
@echo ; \
|
||||
echo "Warning: missing libhugetlbfs support. Some HMM tests will be skipped." ; \
|
||||
echo
|
||||
endif
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Probe for libraries and create header files to record the results. Both C
|
||||
# header files and Makefile include fragments are created.
|
||||
|
||||
OUTPUT_H_FILE=local_config.h
|
||||
OUTPUT_MKFILE=local_config.mk
|
||||
|
||||
# libhugetlbfs
|
||||
tmpname=$(mktemp)
|
||||
tmpfile_c=${tmpname}.c
|
||||
tmpfile_o=${tmpname}.o
|
||||
|
||||
echo "#include <sys/types.h>" > $tmpfile_c
|
||||
echo "#include <hugetlbfs.h>" >> $tmpfile_c
|
||||
echo "int func(void) { return 0; }" >> $tmpfile_c
|
||||
|
||||
CC=${1:?"Usage: $0 <compiler> # example compiler: gcc"}
|
||||
$CC -c $tmpfile_c -o $tmpfile_o >/dev/null 2>&1
|
||||
|
||||
if [ -f $tmpfile_o ]; then
|
||||
echo "#define LOCAL_CONFIG_HAVE_LIBHUGETLBFS 1" > $OUTPUT_H_FILE
|
||||
echo "HMM_EXTRA_LIBS = -lhugetlbfs" > $OUTPUT_MKFILE
|
||||
else
|
||||
echo "// No libhugetlbfs support found" > $OUTPUT_H_FILE
|
||||
echo "# No libhugetlbfs support found, so:" > $OUTPUT_MKFILE
|
||||
echo "HMM_EXTRA_LIBS = " >> $OUTPUT_MKFILE
|
||||
fi
|
||||
|
||||
rm ${tmpname}.*
|
|
@ -26,10 +26,6 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include "./local_config.h"
|
||||
#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS
|
||||
#include <hugetlbfs.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is a private UAPI to the kernel test module so it isn't exported
|
||||
|
@ -733,7 +729,54 @@ TEST_F(hmm, anon_write_huge)
|
|||
hmm_buffer_free(buffer);
|
||||
}
|
||||
|
||||
#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS
|
||||
/*
|
||||
* Read numeric data from raw and tagged kernel status files. Used to read
|
||||
* /proc and /sys data (without a tag) and from /proc/meminfo (with a tag).
|
||||
*/
|
||||
static long file_read_ulong(char *file, const char *tag)
|
||||
{
|
||||
int fd;
|
||||
char buf[2048];
|
||||
int len;
|
||||
char *p, *q;
|
||||
long val;
|
||||
|
||||
fd = open(file, O_RDONLY);
|
||||
if (fd < 0) {
|
||||
/* Error opening the file */
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = read(fd, buf, sizeof(buf));
|
||||
close(fd);
|
||||
if (len < 0) {
|
||||
/* Error in reading the file */
|
||||
return -1;
|
||||
}
|
||||
if (len == sizeof(buf)) {
|
||||
/* Error file is too large */
|
||||
return -1;
|
||||
}
|
||||
buf[len] = '\0';
|
||||
|
||||
/* Search for a tag if provided */
|
||||
if (tag) {
|
||||
p = strstr(buf, tag);
|
||||
if (!p)
|
||||
return -1; /* looks like the line we want isn't there */
|
||||
p += strlen(tag);
|
||||
} else
|
||||
p = buf;
|
||||
|
||||
val = strtol(p, &q, 0);
|
||||
if (*q != ' ') {
|
||||
/* Error parsing the file */
|
||||
return -1;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write huge TLBFS page.
|
||||
*/
|
||||
|
@ -742,29 +785,27 @@ TEST_F(hmm, anon_write_hugetlbfs)
|
|||
struct hmm_buffer *buffer;
|
||||
unsigned long npages;
|
||||
unsigned long size;
|
||||
unsigned long default_hsize;
|
||||
unsigned long i;
|
||||
int *ptr;
|
||||
int ret;
|
||||
long pagesizes[4];
|
||||
int n, idx;
|
||||
|
||||
/* Skip test if we can't allocate a hugetlbfs page. */
|
||||
|
||||
n = gethugepagesizes(pagesizes, 4);
|
||||
if (n <= 0)
|
||||
default_hsize = file_read_ulong("/proc/meminfo", "Hugepagesize:");
|
||||
if (default_hsize < 0 || default_hsize*1024 < default_hsize)
|
||||
SKIP(return, "Huge page size could not be determined");
|
||||
for (idx = 0; --n > 0; ) {
|
||||
if (pagesizes[n] < pagesizes[idx])
|
||||
idx = n;
|
||||
}
|
||||
size = ALIGN(TWOMEG, pagesizes[idx]);
|
||||
default_hsize = default_hsize*1024; /* KB to B */
|
||||
|
||||
size = ALIGN(TWOMEG, default_hsize);
|
||||
npages = size >> self->page_shift;
|
||||
|
||||
buffer = malloc(sizeof(*buffer));
|
||||
ASSERT_NE(buffer, NULL);
|
||||
|
||||
buffer->ptr = get_hugepage_region(size, GHR_STRICT);
|
||||
if (buffer->ptr == NULL) {
|
||||
buffer->ptr = mmap(NULL, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
|
||||
-1, 0);
|
||||
if (buffer->ptr == MAP_FAILED) {
|
||||
free(buffer);
|
||||
SKIP(return, "Huge page could not be allocated");
|
||||
}
|
||||
|
@ -788,11 +829,10 @@ TEST_F(hmm, anon_write_hugetlbfs)
|
|||
for (i = 0, ptr = buffer->ptr; i < size / sizeof(*ptr); ++i)
|
||||
ASSERT_EQ(ptr[i], i);
|
||||
|
||||
free_hugepage_region(buffer->ptr);
|
||||
munmap(buffer->ptr, buffer->size);
|
||||
buffer->ptr = NULL;
|
||||
hmm_buffer_free(buffer);
|
||||
}
|
||||
#endif /* LOCAL_CONFIG_HAVE_LIBHUGETLBFS */
|
||||
|
||||
/*
|
||||
* Read mmap'ed file memory.
|
||||
|
@ -1467,7 +1507,6 @@ TEST_F(hmm2, snapshot)
|
|||
hmm_buffer_free(buffer);
|
||||
}
|
||||
|
||||
#ifdef LOCAL_CONFIG_HAVE_LIBHUGETLBFS
|
||||
/*
|
||||
* Test the hmm_range_fault() HMM_PFN_PMD flag for large pages that
|
||||
* should be mapped by a large page table entry.
|
||||
|
@ -1477,30 +1516,30 @@ TEST_F(hmm, compound)
|
|||
struct hmm_buffer *buffer;
|
||||
unsigned long npages;
|
||||
unsigned long size;
|
||||
unsigned long default_hsize;
|
||||
int *ptr;
|
||||
unsigned char *m;
|
||||
int ret;
|
||||
long pagesizes[4];
|
||||
int n, idx;
|
||||
unsigned long i;
|
||||
|
||||
/* Skip test if we can't allocate a hugetlbfs page. */
|
||||
|
||||
n = gethugepagesizes(pagesizes, 4);
|
||||
if (n <= 0)
|
||||
return;
|
||||
for (idx = 0; --n > 0; ) {
|
||||
if (pagesizes[n] < pagesizes[idx])
|
||||
idx = n;
|
||||
}
|
||||
size = ALIGN(TWOMEG, pagesizes[idx]);
|
||||
default_hsize = file_read_ulong("/proc/meminfo", "Hugepagesize:");
|
||||
if (default_hsize < 0 || default_hsize*1024 < default_hsize)
|
||||
SKIP(return, "Huge page size could not be determined");
|
||||
default_hsize = default_hsize*1024; /* KB to B */
|
||||
|
||||
size = ALIGN(TWOMEG, default_hsize);
|
||||
npages = size >> self->page_shift;
|
||||
|
||||
buffer = malloc(sizeof(*buffer));
|
||||
ASSERT_NE(buffer, NULL);
|
||||
|
||||
buffer->ptr = get_hugepage_region(size, GHR_STRICT);
|
||||
if (buffer->ptr == NULL) {
|
||||
buffer->ptr = mmap(NULL, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB,
|
||||
-1, 0);
|
||||
if (buffer->ptr == MAP_FAILED) {
|
||||
free(buffer);
|
||||
return;
|
||||
}
|
||||
|
@ -1539,11 +1578,10 @@ TEST_F(hmm, compound)
|
|||
ASSERT_EQ(m[i], HMM_DMIRROR_PROT_READ |
|
||||
HMM_DMIRROR_PROT_PMD);
|
||||
|
||||
free_hugepage_region(buffer->ptr);
|
||||
munmap(buffer->ptr, buffer->size);
|
||||
buffer->ptr = NULL;
|
||||
hmm_buffer_free(buffer);
|
||||
}
|
||||
#endif /* LOCAL_CONFIG_HAVE_LIBHUGETLBFS */
|
||||
|
||||
/*
|
||||
* Test two devices reading the same memory (double mapped).
|
||||
|
|
Loading…
Reference in New Issue