From mboxrd@z Thu Jan 1 00:00:00 1970 From: john.hubbard@gmail.com Subject: [PATCH 3/3] gup: new put_user_page_dirty*() helpers Date: Sun, 21 Jul 2019 21:30:12 -0700 Message-ID: <20190722043012.22945-4-jhubbard@nvidia.com> References: <20190722043012.22945-1-jhubbard@nvidia.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20190722043012.22945-1-jhubbard@nvidia.com> Sender: netdev-owner@vger.kernel.org To: Andrew Morton Cc: Alexander Viro , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Boaz Harrosh , Christoph Hellwig , Daniel Vetter , Dan Williams , Dave Chinner , David Airlie , "David S . Miller" , Ilya Dryomov , Jan Kara , Jason Gunthorpe , Jens Axboe , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Johannes Thumshirn , Magnus Karlsson , Matthew Wilcox , Miklos Szeredi , Ming Lei , Sage Weil Sa List-Id: dri-devel@lists.freedesktop.org From: John Hubbard While converting call sites to use put_user_page*() [1], quite a few places ended up needing a single-page routine to put and dirty a page. Provide put_user_page_dirty() and put_user_page_dirty_lock(), and use them in a few places: net/xdp, drm/via/, drivers/infiniband. Cc: Jason Gunthorpe Cc: Jan Kara Signed-off-by: John Hubbard --- drivers/gpu/drm/via/via_dmablit.c | 2 +- drivers/infiniband/core/umem.c | 2 +- drivers/infiniband/hw/usnic/usnic_uiom.c | 2 +- include/linux/mm.h | 10 ++++++++++ net/xdp/xdp_umem.c | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c index 219827ae114f..d30b2d75599f 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c @@ -189,7 +189,7 @@ via_free_sg_info(struct pci_dev *pdev, drm_via_sg_info_t *vsg) for (i = 0; i < vsg->num_pages; ++i) { if (NULL != (page = vsg->pages[i])) { if (!PageReserved(page) && (DMA_FROM_DEVICE == vsg->direction)) - put_user_pages_dirty(&page, 1); + put_user_page_dirty(page); else put_user_page(page); } diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c index 08da840ed7ee..a7337cc3ca20 100644 --- a/drivers/infiniband/core/umem.c +++ b/drivers/infiniband/core/umem.c @@ -55,7 +55,7 @@ static void __ib_umem_release(struct ib_device *dev, struct ib_umem *umem, int d for_each_sg_page(umem->sg_head.sgl, &sg_iter, umem->sg_nents, 0) { page = sg_page_iter_page(&sg_iter); if (umem->writable && dirty) - put_user_pages_dirty_lock(&page, 1); + put_user_page_dirty_lock(page); else put_user_page(page); } diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c index 0b0237d41613..d2ded624fb2a 100644 --- a/drivers/infiniband/hw/usnic/usnic_uiom.c +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c @@ -76,7 +76,7 @@ static void usnic_uiom_put_pages(struct list_head *chunk_list, int dirty) page = sg_page(sg); pa = sg_phys(sg); if (dirty) - put_user_pages_dirty_lock(&page, 1); + put_user_page_dirty_lock(page); else put_user_page(page); usnic_dbg("pa: %pa\n", &pa); diff --git a/include/linux/mm.h b/include/linux/mm.h index 0334ca97c584..c0584c6d9d78 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1061,6 +1061,16 @@ void put_user_pages_dirty(struct page **pages, unsigned long npages); void put_user_pages_dirty_lock(struct page **pages, unsigned long npages); void put_user_pages(struct page **pages, unsigned long npages); +static inline void put_user_page_dirty(struct page *page) +{ + put_user_pages_dirty(&page, 1); +} + +static inline void put_user_page_dirty_lock(struct page *page) +{ + put_user_pages_dirty_lock(&page, 1); +} + #if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP) #define SECTION_IN_PAGE_FLAGS #endif diff --git a/net/xdp/xdp_umem.c b/net/xdp/xdp_umem.c index 9cbbb96c2a32..1d122e52c6de 100644 --- a/net/xdp/xdp_umem.c +++ b/net/xdp/xdp_umem.c @@ -171,7 +171,7 @@ static void xdp_umem_unpin_pages(struct xdp_umem *umem) for (i = 0; i < umem->npgs; i++) { struct page *page = umem->pgs[i]; - put_user_pages_dirty_lock(&page, 1); + put_user_page_dirty_lock(page); } kfree(umem->pgs); -- 2.22.0