• Jason Gunthorpe's avatar
    mm/gup: have internal functions get the mmap_read_lock() · b2a72dff
    Jason Gunthorpe authored
    Patch series "Simplify the external interface for GUP", v2.
    
    It is quite a maze of EXPORTED symbols leading up to the three actual
    worker functions of GUP. Simplify this by reorganizing some of the code so
    the EXPORTED symbols directly call the correct internal function with
    validated and consistent arguments.
    
    Consolidate all the assertions into one place at the top of the call
    chains.
    
    Remove some dead code.
    
    Move more things into the mm/internal.h header
    
    
    This patch (of 13):
    
    __get_user_pages_locked() and __gup_longterm_locked() both require the
    mmap lock to be held.  They have a slightly unusual locked parameter that
    is used to allow these functions to unlock and relock the mmap lock and
    convey that fact to the caller.
    
    Several places wrap these functions with a simple mmap_read_lock() just so
    they can follow the optimized locked protocol.
    
    Consolidate this internally to the functions.  Allow internal callers to
    set locked = 0 to cause the functions to acquire and release the lock on
    their own.
    
    Reorganize __gup_longterm_locked() to use the autolocking in
    __get_user_pages_locked().
    
    Replace all the places obtaining the mmap_read_lock() just to call
    __get_user_pages_locked() with the new mechanism.  Replace all the
    internal callers of get_user_pages_unlocked() with direct calls to
    __gup_longterm_locked() using the new mechanism.
    
    A following patch will add assertions ensuring the external interface
    continues to always pass in locked = 1.
    
    Link: https://lkml.kernel.org/r/0-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.com
    Link: https://lkml.kernel.org/r/1-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.comSigned-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Acked-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
    Reviewed-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    b2a72dff
gup.c 90.7 KB