Home | History | Annotate | Download | only in memfd
      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 }
     47