Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b9ba7a3 authored by Rob Clark's avatar Rob Clark Committed by Dave Airlie
Browse files

drm/gma500: use gem get/put page helpers



Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent bcc5c9d5
Loading
Loading
Loading
Loading
+6 −32
Original line number Diff line number Diff line
@@ -196,37 +196,17 @@ void psb_gtt_roll(struct drm_device *dev, struct gtt_range *r, int roll)
 */
static int psb_gtt_attach_pages(struct gtt_range *gt)
{
	struct inode *inode;
	struct address_space *mapping;
	int i;
	struct page *p;
	int pages = gt->gem.size / PAGE_SIZE;
	struct page **pages;

	WARN_ON(gt->pages);

	/* This is the shared memory object that backs the GEM resource */
	inode = file_inode(gt->gem.filp);
	mapping = inode->i_mapping;
	pages = drm_gem_get_pages(&gt->gem, 0);
	if (IS_ERR(pages))
		return PTR_ERR(pages);

	gt->pages = kmalloc(pages * sizeof(struct page *), GFP_KERNEL);
	if (gt->pages == NULL)
		return -ENOMEM;
	gt->npage = pages;
	gt->pages = pages;

	for (i = 0; i < pages; i++) {
		p = shmem_read_mapping_page(mapping, i);
		if (IS_ERR(p))
			goto err;
		gt->pages[i] = p;
	}
	return 0;

err:
	while (i--)
		page_cache_release(gt->pages[i]);
	kfree(gt->pages);
	gt->pages = NULL;
	return PTR_ERR(p);
}

/**
@@ -240,13 +220,7 @@ static int psb_gtt_attach_pages(struct gtt_range *gt)
 */
static void psb_gtt_detach_pages(struct gtt_range *gt)
{
	int i;
	for (i = 0; i < gt->npage; i++) {
		/* FIXME: do we need to force dirty */
		set_page_dirty(gt->pages[i]);
		page_cache_release(gt->pages[i]);
	}
	kfree(gt->pages);
	drm_gem_put_pages(&gt->gem, gt->pages, true, false);
	gt->pages = NULL;
}