• Lorenzo Stoakes's avatar
    mm/gup: remove vmas parameter from get_user_pages_remote() · ca5e8632
    Lorenzo Stoakes authored
    The only instances of get_user_pages_remote() invocations which used the
    vmas parameter were for a single page which can instead simply look up the
    VMA directly. In particular:-
    
    - __update_ref_ctr() looked up the VMA but did nothing with it so we simply
      remove it.
    
    - __access_remote_vm() was already using vma_lookup() when the original
      lookup failed so by doing the lookup directly this also de-duplicates the
      code.
    
    We are able to perform these VMA operations as we already hold the
    mmap_lock in order to be able to call get_user_pages_remote().
    
    As part of this work we add get_user_page_vma_remote() which abstracts the
    VMA lookup, error handling and decrementing the page reference count should
    the VMA lookup fail.
    
    This forms part of a broader set of patches intended to eliminate the vmas
    parameter altogether.
    
    [akpm@linux-foundation.org: avoid passing NULL to PTR_ERR]
    Link: https://lkml.kernel.org/r/d20128c849ecdbf4dd01cc828fcec32127ed939a.1684350871.git.lstoakes@gmail.comSigned-off-by: default avatarLorenzo Stoakes <lstoakes@gmail.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> (for arm64)
    Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: Janosch Frank <frankja@linux.ibm.com> (for s390)
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jarkko Sakkinen <jarkko@kernel.org>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
    Cc: Sean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    ca5e8632
gup.c 89.5 KB