mlock() is working?
From: Tiago Vignatti
Date: Thu Aug 09 2007 - 23:42:09 EST
Hi guys,
I'm trying to lock some piece of the code in memory using mlock(). I did
a simple program to test it and to certify I using my own simple page
fault notifier [0]. The program is below.
-- cut --
#include <stdio.h>
#include <sys/mman.h>
#define SIZE 10000
int mlock_all = 0;
int
f(void)
{
int c[SIZE];
int i;
if (mlock_all) {
if (!mlockall(MCL_CURRENT))
fprintf(stderr, "mlockall'ed succefully\n");
else
perror("mlockall");
}
else {
if (!mlock(&c[0], SIZE))
fprintf(stderr, "mlock'ed succefully\n");
else
perror("mlock");
}
fprintf(stderr, "start: 0x%x, end: 0x%x\n", &c[0], &c[SIZE]);
for (i = 0; i < SIZE; i++)
c[i] = i;
}
int
main(int argc, char **argv)
{
if (argv[1])
mlock_all = 1;
while(1) {
f();
sleep (15);
}
return 0;
}
-- cut --
So, if I use mlockall() I always obtained the desired result, i.e., I
lock the 'c[SIZE]'. But when I switch to mlock() it never works and my
page fault notifier prints all pages concerning 'c[SIZE]'. Am I missing
something? Is it possible to lock the automatic variables?
My Linux is 2.6.22.2.
my regards
[0] http://lkml.org/lkml/2007/7/27/11
http://lkml.org/lkml/2007/7/27/8
--
Tiago Vignatti
C3SL - Centro de Computação Científica e Software Livre
www.c3sl.ufpr.br
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/