forked from Minki/linux
d5aed9c067
Function seek_to_smaps_entry() can be useful for other selftest functionalities, so move it out to header file. Link: http://lkml.kernel.org/r/1473325970-11393-3-git-send-email-wei.guo.simon@gmail.com Signed-off-by: Simon Guo <wei.guo.simon@gmail.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Eric B Munson <emunson@akamai.com> Cc: Simon Guo <wei.guo.simon@gmail.com> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Alexey Klimov <klimov.linux@gmail.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Thierry Reding <treding@nvidia.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
63 lines
1.0 KiB
C
63 lines
1.0 KiB
C
#include <syscall.h>
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifndef MLOCK_ONFAULT
|
|
#define MLOCK_ONFAULT 1
|
|
#endif
|
|
|
|
#ifndef MCL_ONFAULT
|
|
#define MCL_ONFAULT (MCL_FUTURE << 1)
|
|
#endif
|
|
|
|
static int mlock2_(void *start, size_t len, int flags)
|
|
{
|
|
#ifdef __NR_mlock2
|
|
return syscall(__NR_mlock2, start, len, flags);
|
|
#else
|
|
errno = ENOSYS;
|
|
return -1;
|
|
#endif
|
|
}
|
|
|
|
static FILE *seek_to_smaps_entry(unsigned long addr)
|
|
{
|
|
FILE *file;
|
|
char *line = NULL;
|
|
size_t size = 0;
|
|
unsigned long start, end;
|
|
char perms[5];
|
|
unsigned long offset;
|
|
char dev[32];
|
|
unsigned long inode;
|
|
char path[BUFSIZ];
|
|
|
|
file = fopen("/proc/self/smaps", "r");
|
|
if (!file) {
|
|
perror("fopen smaps");
|
|
_exit(1);
|
|
}
|
|
|
|
while (getline(&line, &size, file) > 0) {
|
|
if (sscanf(line, "%lx-%lx %s %lx %s %lu %s\n",
|
|
&start, &end, perms, &offset, dev, &inode, path) < 6)
|
|
goto next;
|
|
|
|
if (start <= addr && addr < end)
|
|
goto out;
|
|
|
|
next:
|
|
free(line);
|
|
line = NULL;
|
|
size = 0;
|
|
}
|
|
|
|
fclose(file);
|
|
file = NULL;
|
|
|
|
out:
|
|
free(line);
|
|
return file;
|
|
}
|