> if (flags & VM_LOCKED) {
> unsigned long start = addr;
> mm->locked_vm += len >> PAGE_SHIFT;
> do {
> char c = get_user((char *) start);
> len -= PAGE_SIZE;
> start += PAGE_SIZE;
> __asm__ __volatile__("": :"r" (c));
> } while (len > 0);
> }
If the vm area is LOCKED in core e.g. for realtime purposes, it will touch
any of the pages by reading a byte from them.
IMHO, this is not strictly true, it should touch the pages by _writing_ ,
as this makes a difference on zero pages:
imagine a realtime process that has malloced a large chunk (with a mmap
based malloc), mlocks it, and then uses it - if memory is tight, it will
nevertheless cause swapping activity, which is what it wanted to prevent
by mlocking it.
Pascal
-- Pascal Haible, haible@ITO.Uni-Stuttgart.DE