On Thu, Apr 13, 2017 at 04:05:18PM -0600, Logan Gunthorpe wrote: > This is a single straightforward conversion from kmap to sg_map. > > Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx> Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx> Probably makes sense to merge through some other tree, but please be aware of the considerable churn rate in i915 (i.e. make sure your tree is in linux-next before you send a pull request for this). Plane B would be to get the prep patch in first and then merge the i915 conversion one kernel release later. -Daniel > --- > drivers/gpu/drm/i915/i915_gem.c | 27 ++++++++++++++++----------- > 1 file changed, 16 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 67b1fc5..1b1b91a 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -2188,6 +2188,15 @@ static void __i915_gem_object_reset_page_iter(struct drm_i915_gem_object *obj) > radix_tree_delete(&obj->mm.get_page.radix, iter.index); > } > > +static void i915_gem_object_unmap(const struct drm_i915_gem_object *obj, > + void *ptr) > +{ > + if (is_vmalloc_addr(ptr)) > + vunmap(ptr); > + else > + sg_unmap(obj->mm.pages->sgl, ptr, SG_KMAP); > +} > + > void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj, > enum i915_mm_subclass subclass) > { > @@ -2215,10 +2224,7 @@ void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj, > void *ptr; > > ptr = ptr_mask_bits(obj->mm.mapping); > - if (is_vmalloc_addr(ptr)) > - vunmap(ptr); > - else > - kunmap(kmap_to_page(ptr)); > + i915_gem_object_unmap(obj, ptr); > > obj->mm.mapping = NULL; > } > @@ -2475,8 +2481,11 @@ static void *i915_gem_object_map(const struct drm_i915_gem_object *obj, > void *addr; > > /* A single page can always be kmapped */ > - if (n_pages == 1 && type == I915_MAP_WB) > - return kmap(sg_page(sgt->sgl)); > + if (n_pages == 1 && type == I915_MAP_WB) { > + addr = sg_map(sgt->sgl, SG_KMAP); > + if (IS_ERR(addr)) > + return NULL; > + } > > if (n_pages > ARRAY_SIZE(stack_pages)) { > /* Too big for stack -- allocate temporary array instead */ > @@ -2543,11 +2552,7 @@ void *i915_gem_object_pin_map(struct drm_i915_gem_object *obj, > goto err_unpin; > } > > - if (is_vmalloc_addr(ptr)) > - vunmap(ptr); > - else > - kunmap(kmap_to_page(ptr)); > - > + i915_gem_object_unmap(obj, ptr); > ptr = obj->mm.mapping = NULL; > } > > -- > 2.1.4 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch