From: Jason Gunthorpe Date: Wed, 21 Aug 2019 17:12:29 +0000 (-0300) Subject: Merge branch 'odp_fixes' into hmm.git X-Git-Tag: v5.4-rc1~92^2~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=daa138a58c802e7b4c2fb73f9b85bb082616ef43;p=platform%2Fkernel%2Flinux-rpi.git Merge branch 'odp_fixes' into hmm.git From rdma.git Jason Gunthorpe says: ==================== This is a collection of general cleanups for ODP to clarify some of the flows around umem creation and use of the interval tree. ==================== The branch is based on v5.3-rc5 due to dependencies, and is being taken into hmm.git due to dependencies in the next patches. * odp_fixes: RDMA/mlx5: Use odp instead of mr->umem in pagefault_mr RDMA/mlx5: Use ib_umem_start instead of umem.address RDMA/core: Make invalidate_range a device operation RDMA/odp: Use kvcalloc for the dma_list and page_list RDMA/odp: Check for overflow when computing the umem_odp end RDMA/odp: Provide ib_umem_odp_release() to undo the allocs RDMA/odp: Split creating a umem_odp from ib_umem_get RDMA/odp: Make the three ways to create a umem_odp clear RMDA/odp: Consolidate umem_odp initialization RDMA/odp: Make it clearer when a umem is an implicit ODP umem RDMA/odp: Iterate over the whole rbtree directly RDMA/odp: Use the common interval tree library instead of generic RDMA/mlx5: Fix MR npages calculation for IB_ACCESS_HUGETLB Signed-off-by: Jason Gunthorpe --- daa138a58c802e7b4c2fb73f9b85bb082616ef43 diff --cc mm/memremap.c index 77a7770,ed70c4e..32c79b5 --- a/mm/memremap.c +++ b/mm/memremap.c @@@ -94,10 -91,18 +94,16 @@@ static void dev_pagemap_cleanup(struct wait_for_completion(&pgmap->done); percpu_ref_exit(pgmap->ref); } + /* + * Undo the pgmap ref assignment for the internal case as the + * caller may re-enable the same pgmap. + */ + if (pgmap->ref == &pgmap->internal_ref) + pgmap->ref = NULL; } -static void devm_memremap_pages_release(void *data) +void memunmap_pages(struct dev_pagemap *pgmap) { - struct dev_pagemap *pgmap = data; - struct device *dev = pgmap->dev; struct resource *res = &pgmap->res; unsigned long pfn; int nid;