aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>2018-09-26 04:03:53 -0400
committerTvrtko Ursulin <tvrtko.ursulin@intel.com>2018-09-27 06:26:52 -0400
commitf8e57863f81f962a1837d6a17825752de5bc23f7 (patch)
tree6f46e340dbc3fc58e3db5dfb3834ad6c82e0d2db /drivers
parentdee4a0f8e70db36105e43dba5652737df5812190 (diff)
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: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20180926080353.20867-1-tvrtko.ursulin@linux.intel.com
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9e185f0a822a..ab52657cc3d0 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2325,6 +2325,8 @@ static inline struct scatterlist *__sg_next(struct scatterlist *sg)
2325 (((__iter).curr += PAGE_SIZE) >= (__iter).max) ? \ 2325 (((__iter).curr += PAGE_SIZE) >= (__iter).max) ? \
2326 (__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0 : 0) 2326 (__iter) = __sgt_iter(__sg_next((__iter).sgp), false), 0 : 0)
2327 2327
2328bool i915_sg_trim(struct sg_table *orig_st);
2329
2328static inline unsigned int i915_sg_page_sizes(struct scatterlist *sg) 2330static inline unsigned int i915_sg_page_sizes(struct scatterlist *sg)
2329{ 2331{
2330 unsigned int page_sizes; 2332 unsigned int page_sizes;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 627b1c8a7ea3..28e943ee8b5e 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2491,7 +2491,7 @@ unlock:
2491 mutex_unlock(&obj->mm.lock); 2491 mutex_unlock(&obj->mm.lock);
2492} 2492}
2493 2493
2494static bool i915_sg_trim(struct sg_table *orig_st) 2494bool i915_sg_trim(struct sg_table *orig_st)
2495{ 2495{
2496 struct sg_table new_st; 2496 struct sg_table new_st;
2497 struct scatterlist *sg, *new_sg; 2497 struct scatterlist *sg, *new_sg;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index f6c7ab413081..1ec721c20581 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -3835,6 +3835,8 @@ intel_partial_pages(const struct i915_ggtt_view *view,
3835 count -= len >> PAGE_SHIFT; 3835 count -= len >> PAGE_SHIFT;
3836 if (count == 0) { 3836 if (count == 0) {
3837 sg_mark_end(sg); 3837 sg_mark_end(sg);
3838 i915_sg_trim(st); /* Drop any unused tail entries. */
3839
3838 return st; 3840 return st;
3839 } 3841 }
3840 3842