root/tools/testing/selftests/vm/mlock2.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. mlock2_
  2. seek_to_smaps_entry

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #include <syscall.h>
   3 #include <errno.h>
   4 #include <stdio.h>
   5 #include <stdlib.h>
   6 
   7 #ifndef MLOCK_ONFAULT
   8 #define MLOCK_ONFAULT 1
   9 #endif
  10 
  11 #ifndef MCL_ONFAULT
  12 #define MCL_ONFAULT (MCL_FUTURE << 1)
  13 #endif
  14 
  15 static int mlock2_(void *start, size_t len, int flags)
  16 {
  17 #ifdef __NR_mlock2
  18         return syscall(__NR_mlock2, start, len, flags);
  19 #else
  20         errno = ENOSYS;
  21         return -1;
  22 #endif
  23 }
  24 
  25 static FILE *seek_to_smaps_entry(unsigned long addr)
  26 {
  27         FILE *file;
  28         char *line = NULL;
  29         size_t size = 0;
  30         unsigned long start, end;
  31         char perms[5];
  32         unsigned long offset;
  33         char dev[32];
  34         unsigned long inode;
  35         char path[BUFSIZ];
  36 
  37         file = fopen("/proc/self/smaps", "r");
  38         if (!file) {
  39                 perror("fopen smaps");
  40                 _exit(1);
  41         }
  42 
  43         while (getline(&line, &size, file) > 0) {
  44                 if (sscanf(line, "%lx-%lx %s %lx %s %lu %s\n",
  45                            &start, &end, perms, &offset, dev, &inode, path) < 6)
  46                         goto next;
  47 
  48                 if (start <= addr && addr < end)
  49                         goto out;
  50 
  51 next:
  52                 free(line);
  53                 line = NULL;
  54                 size = 0;
  55         }
  56 
  57         fclose(file);
  58         file = NULL;
  59 
  60 out:
  61         free(line);
  62         return file;
  63 }

/* [<][>][^][v][top][bottom][index][help] */