[PATCH 11/11] drm/i915: Use sg_trim_table
Tvrtko Ursulin
tursulin at ursulin.net
Thu Mar 1 13:28:44 UTC 2018
From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Now that scatterlist library exports the sg_trim_table helper we can drop
our own implementation.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 28 +--------------------------
drivers/gpu/drm/i915/selftests/scatterlist.c | 29 ++++++++++++++--------------
2 files changed, 16 insertions(+), 41 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 14c855b1a3a4..cd0fae4e13e3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2345,32 +2345,6 @@ void __i915_gem_object_put_pages(struct drm_i915_gem_object *obj,
mutex_unlock(&obj->mm.lock);
}
-static bool i915_sg_trim(struct sg_table *orig_st)
-{
- struct sg_table new_st;
- struct scatterlist *sg, *new_sg;
- unsigned int i;
-
- if (orig_st->nents == orig_st->orig_nents)
- return false;
-
- if (sg_alloc_table(&new_st, orig_st->nents, GFP_KERNEL | __GFP_NOWARN))
- return false;
-
- new_sg = new_st.sgl;
- for_each_sg(orig_st->sgl, sg, orig_st->nents, i) {
- sg_set_page(new_sg, sg_page(sg), sg->length, 0);
- /* called before being DMA mapped, no need to copy sg->dma_* */
- new_sg = sg_next(new_sg);
- }
- GEM_BUG_ON(new_sg); /* Should walk exactly nents and hit the end */
-
- sg_free_table(orig_st);
-
- *orig_st = new_st;
- return true;
-}
-
static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
{
struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
@@ -2488,7 +2462,7 @@ static int i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
}
/* Trim unused sg entries to avoid wasting memory. */
- i915_sg_trim(st);
+ sg_trim_table(st, GFP_KERNEL | __GFP_NOWARN);
ret = i915_gem_gtt_prepare_pages(obj, st);
if (ret) {
diff --git a/drivers/gpu/drm/i915/selftests/scatterlist.c b/drivers/gpu/drm/i915/selftests/scatterlist.c
index cd6d2a16071f..b0e20534099e 100644
--- a/drivers/gpu/drm/i915/selftests/scatterlist.c
+++ b/drivers/gpu/drm/i915/selftests/scatterlist.c
@@ -340,20 +340,21 @@ static int igt_sg_trim(void *ignored)
if (err)
return err;
- if (i915_sg_trim(&pt.st)) {
- if (pt.st.orig_nents != prime ||
- pt.st.nents != prime) {
- pr_err("i915_sg_trim failed (nents %u, orig_nents %u), expected %lu\n",
- pt.st.nents, pt.st.orig_nents, prime);
- err = -EINVAL;
- } else {
- prandom_seed_state(&prng,
- i915_selftest.random_seed);
- err = expect_pfn_sgtable(&pt,
- *npages, &prng,
- "i915_sg_trim",
- end_time);
- }
+ sg_trim_table(&pt.st, GFP_KERNEL | __GFP_NORETRY |
+ __GFP_NOWARN);
+
+ if (pt.st.orig_nents != prime ||
+ pt.st.nents != prime) {
+ pr_err("sg_trim_table failed (nents %u, orig_nents %u), expected %lu\n",
+ pt.st.nents, pt.st.orig_nents, prime);
+ err = -EINVAL;
+ } else {
+ prandom_seed_state(&prng,
+ i915_selftest.random_seed);
+ err = expect_pfn_sgtable(&pt,
+ *npages, &prng,
+ "sg_trim_table",
+ end_time);
}
sg_free_table(&pt.st);
if (err)
--
2.14.1
More information about the Intel-gfx-trybot
mailing list