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/