root/tools/testing/selftests/memfd/common.c
// 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);
}