| |
| #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; |
| |
| |
| |
| |
| 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); |
| } |
| |