common.c 814 B

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