diff options
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_gem.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_gem.c b/drivers/gpu/drm/exynos/exynos_drm_gem.c index acb9f424eb60..47696bb1284e 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gem.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gem.c | |||
@@ -99,25 +99,17 @@ out: | |||
99 | struct page **exynos_gem_get_pages(struct drm_gem_object *obj, | 99 | struct page **exynos_gem_get_pages(struct drm_gem_object *obj, |
100 | gfp_t gfpmask) | 100 | gfp_t gfpmask) |
101 | { | 101 | { |
102 | struct inode *inode; | ||
103 | struct address_space *mapping; | ||
104 | struct page *p, **pages; | 102 | struct page *p, **pages; |
105 | int i, npages; | 103 | int i, npages; |
106 | 104 | ||
107 | /* This is the shared memory object that backs the GEM resource */ | ||
108 | inode = obj->filp->f_path.dentry->d_inode; | ||
109 | mapping = inode->i_mapping; | ||
110 | |||
111 | npages = obj->size >> PAGE_SHIFT; | 105 | npages = obj->size >> PAGE_SHIFT; |
112 | 106 | ||
113 | pages = drm_malloc_ab(npages, sizeof(struct page *)); | 107 | pages = drm_malloc_ab(npages, sizeof(struct page *)); |
114 | if (pages == NULL) | 108 | if (pages == NULL) |
115 | return ERR_PTR(-ENOMEM); | 109 | return ERR_PTR(-ENOMEM); |
116 | 110 | ||
117 | gfpmask |= mapping_gfp_mask(mapping); | ||
118 | |||
119 | for (i = 0; i < npages; i++) { | 111 | for (i = 0; i < npages; i++) { |
120 | p = shmem_read_mapping_page_gfp(mapping, i, gfpmask); | 112 | p = alloc_page(gfpmask); |
121 | if (IS_ERR(p)) | 113 | if (IS_ERR(p)) |
122 | goto fail; | 114 | goto fail; |
123 | pages[i] = p; | 115 | pages[i] = p; |
@@ -127,7 +119,7 @@ struct page **exynos_gem_get_pages(struct drm_gem_object *obj, | |||
127 | 119 | ||
128 | fail: | 120 | fail: |
129 | while (i--) | 121 | while (i--) |
130 | page_cache_release(pages[i]); | 122 | __free_page(pages[i]); |
131 | 123 | ||
132 | drm_free_large(pages); | 124 | drm_free_large(pages); |
133 | return ERR_PTR(PTR_ERR(p)); | 125 | return ERR_PTR(PTR_ERR(p)); |
@@ -189,7 +181,7 @@ static int exynos_drm_gem_get_pages(struct drm_gem_object *obj) | |||
189 | return -EINVAL; | 181 | return -EINVAL; |
190 | } | 182 | } |
191 | 183 | ||
192 | pages = exynos_gem_get_pages(obj, GFP_KERNEL); | 184 | pages = exynos_gem_get_pages(obj, GFP_HIGHUSER_MOVABLE); |
193 | if (IS_ERR(pages)) { | 185 | if (IS_ERR(pages)) { |
194 | DRM_ERROR("failed to get pages.\n"); | 186 | DRM_ERROR("failed to get pages.\n"); |
195 | return PTR_ERR(pages); | 187 | return PTR_ERR(pages); |