drm/exynos: use __free_page() to deallocate memory
this patch uses __free_page() to deallocate the pages allocated by alloc_page() and the pages doesn't need set_parge_dirty() and mark_page_accessed() because they aren't from page cache so removes them. this patch has a pair with previous patch below, http://www.spinics.net/lists/dri-devel/msg24382.html Changelog v2: remove unnecessary arguments. Changelog v3: fix npages type. - npages can have negative value. Signed-off-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
This commit is contained in:
parent
3c52b8804f
commit
d73c1c995b
1 changed files with 6 additions and 15 deletions
|
@ -126,23 +126,14 @@ fail:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void exynos_gem_put_pages(struct drm_gem_object *obj,
|
static void exynos_gem_put_pages(struct drm_gem_object *obj,
|
||||||
struct page **pages,
|
struct page **pages)
|
||||||
bool dirty, bool accessed)
|
|
||||||
{
|
{
|
||||||
int i, npages;
|
int npages;
|
||||||
|
|
||||||
npages = obj->size >> PAGE_SHIFT;
|
npages = obj->size >> PAGE_SHIFT;
|
||||||
|
|
||||||
for (i = 0; i < npages; i++) {
|
while (--npages >= 0)
|
||||||
if (dirty)
|
__free_page(pages[npages]);
|
||||||
set_page_dirty(pages[i]);
|
|
||||||
|
|
||||||
if (accessed)
|
|
||||||
mark_page_accessed(pages[i]);
|
|
||||||
|
|
||||||
/* Undo the reference we took when populating the table */
|
|
||||||
page_cache_release(pages[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
drm_free_large(pages);
|
drm_free_large(pages);
|
||||||
}
|
}
|
||||||
|
@ -222,7 +213,7 @@ err1:
|
||||||
kfree(buf->sgt);
|
kfree(buf->sgt);
|
||||||
buf->sgt = NULL;
|
buf->sgt = NULL;
|
||||||
err:
|
err:
|
||||||
exynos_gem_put_pages(obj, pages, true, false);
|
exynos_gem_put_pages(obj, pages);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -240,7 +231,7 @@ static void exynos_drm_gem_put_pages(struct drm_gem_object *obj)
|
||||||
kfree(buf->sgt);
|
kfree(buf->sgt);
|
||||||
buf->sgt = NULL;
|
buf->sgt = NULL;
|
||||||
|
|
||||||
exynos_gem_put_pages(obj, buf->pages, true, false);
|
exynos_gem_put_pages(obj, buf->pages);
|
||||||
buf->pages = NULL;
|
buf->pages = NULL;
|
||||||
|
|
||||||
/* add some codes for UNCACHED type here. TODO */
|
/* add some codes for UNCACHED type here. TODO */
|
||||||
|
|
Loading…
Add table
Reference in a new issue