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