diff options
Diffstat (limited to 'tools/testing/selftests/memfd/common.c')
-rw-r--r-- | tools/testing/selftests/memfd/common.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tools/testing/selftests/memfd/common.c b/tools/testing/selftests/memfd/common.c new file mode 100644 index 000000000000..8eb3d75f6e60 --- /dev/null +++ b/tools/testing/selftests/memfd/common.c | |||
@@ -0,0 +1,46 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
2 | #define _GNU_SOURCE | ||
3 | #define __EXPORTED_HEADERS__ | ||
4 | |||
5 | #include <stdio.h> | ||
6 | #include <stdlib.h> | ||
7 | #include <linux/fcntl.h> | ||
8 | #include <linux/memfd.h> | ||
9 | #include <unistd.h> | ||
10 | #include <sys/syscall.h> | ||
11 | |||
12 | #include "common.h" | ||
13 | |||
14 | int hugetlbfs_test = 0; | ||
15 | |||
16 | /* | ||
17 | * Copied from mlock2-tests.c | ||
18 | */ | ||
19 | unsigned long default_huge_page_size(void) | ||
20 | { | ||
21 | unsigned long hps = 0; | ||
22 | char *line = NULL; | ||
23 | size_t linelen = 0; | ||
24 | FILE *f = fopen("/proc/meminfo", "r"); | ||
25 | |||
26 | if (!f) | ||
27 | return 0; | ||
28 | while (getline(&line, &linelen, f) > 0) { | ||
29 | if (sscanf(line, "Hugepagesize: %lu kB", &hps) == 1) { | ||
30 | hps <<= 10; | ||
31 | break; | ||
32 | } | ||
33 | } | ||
34 | |||
35 | free(line); | ||
36 | fclose(f); | ||
37 | return hps; | ||
38 | } | ||
39 | |||
40 | int sys_memfd_create(const char *name, unsigned int flags) | ||
41 | { | ||
42 | if (hugetlbfs_test) | ||
43 | flags |= MFD_HUGETLB; | ||
44 | |||
45 | return syscall(__NR_memfd_create, name, flags); | ||
46 | } | ||