Message ID | 1492121135-4437-6-git-send-email-logang@deltatee.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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@deltatee.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> 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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
On 18/04/17 12:44 AM, Daniel Vetter wrote: > 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@deltatee.com> > > Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > 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. Yes, as per what I said in my cover letter, I was leaning towards a "Plan B" style approach. Logan
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; }
This is a single straightforward conversion from kmap to sg_map. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> --- drivers/gpu/drm/i915/i915_gem.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-)