• Johannes Weiner's avatar
    mm: madvise: MADV_DONTNEED_LOCKED · 9457056a
    Johannes Weiner authored
    MADV_DONTNEED historically rejects mlocked ranges, but with MLOCK_ONFAULT
    and MCL_ONFAULT allowing to mlock without populating, there are valid use
    cases for depopulating locked ranges as well.
    
    Users mlock memory to protect secrets.  There are allocators for secure
    buffers that want in-use memory generally mlocked, but cleared and
    invalidated memory to give up the physical pages.  This could be done with
    explicit munlock -> mlock calls on free -> alloc of course, but that adds
    two unnecessary syscalls, heavy mmap_sem write locks, vma splits and
    re-merges - only to get rid of the backing pages.
    
    Users also mlockall(MCL_ONFAULT) to suppress sustained paging, but are
    okay with on-demand initial population.  It seems valid to selectively
    free some memory during the lifetime of such a process, without having to
    mess with its overall policy.
    
    Why add a separate flag? Isn't this a pretty niche usecase?
    
    - MADV_DONTNEED has been bailing on locked vmas forever. It's at least
      co...
    9457056a
mman-common.h 3.66 KB