[lkml]   [2009]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: PFs on pages pinned with get_user_pages()

    On Thursday 29 January 2009, Peter Zijlstra wrote:
    > On Thu, 2009-01-29 at 09:05 +0100, Frank Mehnert wrote:
    > > please could someone explain me under which circumstances a pagefault,
    > > either generated from kernel code or from userland code, can occur on
    > > pages which are pinned with get_user_pages()?
    > >
    > > So far my understanding was that this can _never_ happen but I seems to
    > > be wrong. Under high memory pressure I get PFs on such pages raised from
    > > kernel code and the PFs are handled by do_swap_page(). When this happens,
    > > page_count is 3 but page_mapped() returns false.
    > Under memory pressure the page reclaim will first unmap the physical
    > page from the virtual address range, and then try to free it.

    Which means the page table entry is removed but the physical page
    is not swapped out, right?

    > Obviously the freeing bit fails if you hold a reference to it, but the
    > unmap will work.


    > After that, userspace will have to (minor) fault the stuff back in.

    So do_swap_page does only 'restore' the page table entry, no further
    reading from the swapfile is necessary?

    > Also, that same page-reclaim, or pdflush might decide to write out dirty
    > data, which will also result in (minor) faults when userspace will
    > re-dirty the pages.
    > Having a page reference will only avoid the physical page from getting
    > removed from its current mapping (and thereby also pins the mapping).

    Question: Is it possible to prevent these minor page faults at all?

    Thank you very much for your answer!

    Dr.-Ing. Frank Mehnert Sun Microsystems
    [unhandled content-type:application/pgp-signature]
     \ /
      Last update: 2009-01-29 14:11    [W:0.021 / U:12.916 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site