• B
    [PATCH] page fault retry with NOPAGE_REFAULT · 7f7bbbe5
    Benjamin Herrenschmidt 提交于
    Add a way for a no_page() handler to request a retry of the faulting
    instruction.  It goes back to userland on page faults and just tries again
    in get_user_pages().  I added a cond_resched() in the loop in that later
    case.
    
    The problem I have with signal and spufs is an actual bug affecting apps and I
    don't see other ways of fixing it.
    
    In addition, we are having issues with infiniband and 64k pages (related to
    the way the hypervisor deals with some HV cards) that will require us to muck
    around with the MMU from within the IB driver's no_page() (it's a pSeries
    specific driver) and return to the caller the same way using NOPAGE_REFAULT.
    
    And to add to this, the graphics folks have been following a new approach of
    memory management that involves transparently swapping objects between video
    ram and main meory.  To do that, they need installing PTEs from a no_page()
    handler as well and that also requires returning with NOPAGE_REFAULT.
    
    (For the later, they are currently using io_remap_pfn_range to install one PTE
    from no_page() which is a bit racy, we need to add a check for the PTE having
    already been installed afer taking the lock, but that's ok, they are only at
    the proof-of-concept stage.  I'll send a patch adding a "clean" function to do
    that, we can use that from spufs too and get rid of the sparsemem hacks we do
    to create struct page for SPEs.  Basically, that provides a generic solution
    for being able to have no_page() map hardware devices, which is something that
    I think sound driver folks have been asking for some time too).
    
    All of these things depend on having the NOPAGE_REFAULT exit path from
    no_page() handlers.
    Signed-off-by: NBenjamin Herrenchmidt <benh@kernel.crashing.org>
    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    7f7bbbe5
memory.c 71.3 KB