1 // SPDX-License-Identifier: GPL-2.0 1 // SPDX-License-Identifier: GPL-2.0 2 #define _GNU_SOURCE 2 #define _GNU_SOURCE 3 #define __EXPORTED_HEADERS__ 3 #define __EXPORTED_HEADERS__ 4 4 5 #include <stdio.h> 5 #include <stdio.h> 6 #include <stdlib.h> 6 #include <stdlib.h> 7 #include <linux/fcntl.h> 7 #include <linux/fcntl.h> 8 #include <linux/memfd.h> 8 #include <linux/memfd.h> 9 #include <unistd.h> 9 #include <unistd.h> 10 #include <sys/syscall.h> 10 #include <sys/syscall.h> 11 11 12 #include "common.h" 12 #include "common.h" 13 13 14 int hugetlbfs_test = 0; 14 int hugetlbfs_test = 0; 15 15 16 /* 16 /* 17 * Copied from mlock2-tests.c 17 * Copied from mlock2-tests.c 18 */ 18 */ 19 unsigned long default_huge_page_size(void) 19 unsigned long default_huge_page_size(void) 20 { 20 { 21 unsigned long hps = 0; 21 unsigned long hps = 0; 22 char *line = NULL; 22 char *line = NULL; 23 size_t linelen = 0; 23 size_t linelen = 0; 24 FILE *f = fopen("/proc/meminfo", "r"); 24 FILE *f = fopen("/proc/meminfo", "r"); 25 25 26 if (!f) 26 if (!f) 27 return 0; 27 return 0; 28 while (getline(&line, &linelen, f) > 0 28 while (getline(&line, &linelen, f) > 0) { 29 if (sscanf(line, "Hugepagesize 29 if (sscanf(line, "Hugepagesize: %lu kB", &hps) == 1) { 30 hps <<= 10; 30 hps <<= 10; 31 break; 31 break; 32 } 32 } 33 } 33 } 34 34 35 free(line); 35 free(line); 36 fclose(f); 36 fclose(f); 37 return hps; 37 return hps; 38 } 38 } 39 39 40 int sys_memfd_create(const char *name, unsigne 40 int sys_memfd_create(const char *name, unsigned int flags) 41 { 41 { 42 if (hugetlbfs_test) 42 if (hugetlbfs_test) 43 flags |= MFD_HUGETLB; 43 flags |= MFD_HUGETLB; 44 44 45 return syscall(__NR_memfd_create, name 45 return syscall(__NR_memfd_create, name, flags); 46 } 46 } 47 47
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.