| // SPDX-License-Identifier: GPL-2.0 |
| #define _GNU_SOURCE |
| #define __EXPORTED_HEADERS__ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <linux/fcntl.h> |
| #include <linux/memfd.h> |
| #include <unistd.h> |
| #include <sys/syscall.h> |
| |
| #include "common.h" |
| |
| int hugetlbfs_test = 0; |
| |
| /* |
| * Copied from mlock2-tests.c |
| */ |
| unsigned long default_huge_page_size(void) |
| { |
| unsigned long hps = 0; |
| char *line = NULL; |
| size_t linelen = 0; |
| FILE *f = fopen("/proc/meminfo", "r"); |
| |
| if (!f) |
| return 0; |
| while (getline(&line, &linelen, f) > 0) { |
| if (sscanf(line, "Hugepagesize: %lu kB", &hps) == 1) { |
| hps <<= 10; |
| break; |
| } |
| } |
| |
| free(line); |
| fclose(f); |
| return hps; |
| } |
| |
| int sys_memfd_create(const char *name, unsigned int flags) |
| { |
| if (hugetlbfs_test) |
| flags |= MFD_HUGETLB; |
| |
| return syscall(__NR_memfd_create, name, flags); |
| } |