mlockall / munlockall patch

Matthew Dillon dillon at apollo.backplane.com
Wed Nov 24 10:27:25 PST 2010


:This patch is the start of mlockall/munlockall support; it adds a
:field to each vm_map, flags, to support mlockall(MCL_FUTURE) {from
:FreeBSD} and modifies mmap() and brk() to test for that flag and wire
:in any newly ill-gotten pages. It also implements munlockall(). This
:code has been tested in a vkernel, seems to work okay.
:
:Questions:
:1) what permissions do we want to check for mlockall()?

    Either root-only or there needs to be some sort of resource limit
    on non-root processes on the number of pages which can be locked.

:2) current, I read the vm_map flags under the per-map lock. this is
:probably overkill for mmap and brk; should I read the value directly
:instead?

    For reading the flag only you do not need the lock.

    Hmm.  for mmap/brk it may be better to just have the vm_map code check
    the map flag itself and automatically wire the memory instead of having
    the upper level callers check the flag and take an extra step.

:3) in munlockall(), I've marked a section 'XXX', where it might be
:possible to hit an in-transition map entry (entry->eflags ==
:MAP_ENTRY_IN_TRANSITION). I don't understand places in the vm where
:that is tested for and the map lock released around it... I didn't see
:any place where that was set and the per-map lock released afterwards,
:perhaps I'm missing something?

    I think you do have to check.  I suggest looking at the code for
    vm_map_delete() as a reference point.

:4) are automatic stack growth pages supposed to be affected by MCL_FUTURE?

    Yes.

:5) are pages from the 43bsd compat code supposed to be affected by MCL_FUTURE?

    Yes, though if you rearrange the code to have the vm_map module deal
    with the flag itself instead of the callers this will be handled
    automatically.

						-Matt






More information about the Kernel mailing list