drm/i915/selftests: Use sgt_iter for huge_pages_free
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
This commit is contained in:
parent
ff690b2111
commit
6930573279
|
@ -12,10 +12,14 @@ static void huge_free_pages(struct drm_i915_gem_object *obj,
|
||||||
struct sg_table *pages)
|
struct sg_table *pages)
|
||||||
{
|
{
|
||||||
unsigned long nreal = obj->scratch / PAGE_SIZE;
|
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))
|
for_each_sgt_page(page, sgt_iter, pages) {
|
||||||
__free_page(sg_page(sg));
|
__free_page(page);
|
||||||
|
if (!--nreal)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
sg_free_table(pages);
|
sg_free_table(pages);
|
||||||
kfree(pages);
|
kfree(pages);
|
||||||
|
@ -70,7 +74,6 @@ static int huge_get_pages(struct drm_i915_gem_object *obj)
|
||||||
|
|
||||||
err:
|
err:
|
||||||
huge_free_pages(obj, pages);
|
huge_free_pages(obj, pages);
|
||||||
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
#undef GFP
|
#undef GFP
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue