drm/i915/selftests: Use sgt_iter for huge_pages_free
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 28 Nov 2019 23:29:46 +0000 (23:29 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 29 Nov 2019 14:23:53 +0000 (14:23 +0000)
Use the normal sgt_iter to walk the pages scatterlist on free so that we
handle the error path correctly.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112225
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191128232946.546831-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gem/selftests/huge_gem_object.c

index 892d12db6c496178cda607a9f849832c159f2cd2..fa16f2c3f3ac538b4b982eb51d4471ccbe83675b 100644 (file)
@@ -12,10 +12,14 @@ static void huge_free_pages(struct drm_i915_gem_object *obj,
                            struct sg_table *pages)
 {
        unsigned long nreal = obj->scratch / PAGE_SIZE;
-       struct scatterlist *sg;
+       struct sgt_iter sgt_iter;
+       struct page *page;
 
-       for (sg = pages->sgl; sg && nreal--; sg = __sg_next(sg))
-               __free_page(sg_page(sg));
+       for_each_sgt_page(page, sgt_iter, pages) {
+               __free_page(page);
+               if (!--nreal)
+                       break;
+       }
 
        sg_free_table(pages);
        kfree(pages);
@@ -70,7 +74,6 @@ static int huge_get_pages(struct drm_i915_gem_object *obj)
 
 err:
        huge_free_pages(obj, pages);
-
        return -ENOMEM;
 #undef GFP
 }