Commit f8e57863 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin

drm/i915: Trim partial view sg lists

Partial views are small but there can be many of them, and since the sg
list space for them is allocated pessimistically, we can save some slab by
trimming the unused tail entries.
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180926080353.20867-1-tvrtko.ursulin@linux.intel.com
parent dee4a0f8
...@@ -2325,6 +2325,8 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg) ...@@ -2325,6 +2325,8 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg)
(((__iter).curr += PAGE_SIZE) >= (__iter).max) ? \ (((__iter).curr += PAGE_SIZE) >= (__iter).max) ? \
(__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0 : 0) (__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0 : 0)
bool i915_sg_trim(struct sg_table *orig_st);
static inline unsigned int i915_sg_page_sizes(struct scatterlist *sg) static inline unsigned int i915_sg_page_sizes(struct scatterlist *sg)
{ {
unsigned int page_sizes; unsigned int page_sizes;
......
...@@ -2491,7 +2491,7 @@ void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj, ...@@ -2491,7 +2491,7 @@ void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
mutex_unlock(&obj->mm.lock); mutex_unlock(&obj->mm.lock);
} }
static bool i915_sg_trim(struct sg_table *orig_st) bool i915_sg_trim(struct sg_table *orig_st)
{ {
struct sg_table new_st; struct sg_table new_st;
struct scatterlist *sg, *new_sg; struct scatterlist *sg, *new_sg;
......
...@@ -3835,6 +3835,8 @@ intel_partial_pages(const struct i915_ggtt_view *view, ...@@ -3835,6 +3835,8 @@ intel_partial_pages(const struct i915_ggtt_view *view,
count -= len >> PAGE_SHIFT; count -= len >> PAGE_SHIFT;
if (count == 0) { if (count == 0) {
sg_mark_end(sg); sg_mark_end(sg);
i915_sg_trim(st); /* Drop any unused tail entries. */
return st; return st;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment