diff options
author | Rob Clark <robdclark@gmail.com> | 2013-08-07 13:41:27 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-08-18 20:36:16 -0400 |
commit | ddcd09d62bd503bfd33291348b7cd8ad32d413fd (patch) | |
tree | 07680104fac373d348682c1c6b251d8929d3604a | |
parent | 5dc9e1e87229cb786a5bb58ddd0d60fee6eb4641 (diff) |
drm/omap: kill omap_gem_helpers.c
Signed-off-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/omapdrm/Makefile | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem_helpers.c | 124 |
3 files changed, 4 insertions, 131 deletions
diff --git a/drivers/gpu/drm/omapdrm/Makefile b/drivers/gpu/drm/omapdrm/Makefile index d85e058f2845..778372b062ad 100644 --- a/drivers/gpu/drm/omapdrm/Makefile +++ b/drivers/gpu/drm/omapdrm/Makefile | |||
@@ -18,7 +18,4 @@ omapdrm-y := omap_drv.o \ | |||
18 | omap_dmm_tiler.o \ | 18 | omap_dmm_tiler.o \ |
19 | tcm-sita.o | 19 | tcm-sita.o |
20 | 20 | ||
21 | # temporary: | ||
22 | omapdrm-y += omap_gem_helpers.o | ||
23 | |||
24 | obj-$(CONFIG_DRM_OMAP) += omapdrm.o | 21 | obj-$(CONFIG_DRM_OMAP) += omapdrm.o |
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index b1f19702550f..533f6ebec531 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c | |||
@@ -237,7 +237,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj) | |||
237 | * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably | 237 | * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably |
238 | * we actually want CMA memory for it all anyways.. | 238 | * we actually want CMA memory for it all anyways.. |
239 | */ | 239 | */ |
240 | pages = _drm_gem_get_pages(obj, GFP_KERNEL); | 240 | pages = drm_gem_get_pages(obj, GFP_KERNEL); |
241 | if (IS_ERR(pages)) { | 241 | if (IS_ERR(pages)) { |
242 | dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); | 242 | dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); |
243 | return PTR_ERR(pages); | 243 | return PTR_ERR(pages); |
@@ -271,7 +271,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj) | |||
271 | return 0; | 271 | return 0; |
272 | 272 | ||
273 | free_pages: | 273 | free_pages: |
274 | _drm_gem_put_pages(obj, pages, true, false); | 274 | drm_gem_put_pages(obj, pages, true, false); |
275 | 275 | ||
276 | return ret; | 276 | return ret; |
277 | } | 277 | } |
@@ -295,7 +295,7 @@ static void omap_gem_detach_pages(struct drm_gem_object *obj) | |||
295 | kfree(omap_obj->addrs); | 295 | kfree(omap_obj->addrs); |
296 | omap_obj->addrs = NULL; | 296 | omap_obj->addrs = NULL; |
297 | 297 | ||
298 | _drm_gem_put_pages(obj, omap_obj->pages, true, false); | 298 | drm_gem_put_pages(obj, omap_obj->pages, true, false); |
299 | omap_obj->pages = NULL; | 299 | omap_obj->pages = NULL; |
300 | } | 300 | } |
301 | 301 | ||
@@ -316,7 +316,7 @@ static uint64_t mmap_offset(struct drm_gem_object *obj) | |||
316 | 316 | ||
317 | /* Make it mmapable */ | 317 | /* Make it mmapable */ |
318 | size = omap_gem_mmap_size(obj); | 318 | size = omap_gem_mmap_size(obj); |
319 | ret = _drm_gem_create_mmap_offset_size(obj, size); | 319 | ret = drm_gem_create_mmap_offset_size(obj, size); |
320 | if (ret) { | 320 | if (ret) { |
321 | dev_err(dev->dev, "could not allocate mmap offset\n"); | 321 | dev_err(dev->dev, "could not allocate mmap offset\n"); |
322 | return 0; | 322 | return 0; |
diff --git a/drivers/gpu/drm/omapdrm/omap_gem_helpers.c b/drivers/gpu/drm/omapdrm/omap_gem_helpers.c deleted file mode 100644 index dbb157542f8f..000000000000 --- a/drivers/gpu/drm/omapdrm/omap_gem_helpers.c +++ /dev/null | |||
@@ -1,124 +0,0 @@ | |||
1 | /* | ||
2 | * drivers/gpu/drm/omapdrm/omap_gem_helpers.c | ||
3 | * | ||
4 | * Copyright (C) 2011 Texas Instruments | ||
5 | * Author: Rob Clark <rob.clark@linaro.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License version 2 as published by | ||
9 | * the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
14 | * more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along with | ||
17 | * this program. If not, see <http://www.gnu.org/licenses/>. | ||
18 | */ | ||
19 | |||
20 | /* temporary copy of drm_gem_{get,put}_pages() until the | ||
21 | * "drm/gem: add functions to get/put pages" patch is merged.. | ||
22 | */ | ||
23 | |||
24 | #include <linux/module.h> | ||
25 | #include <linux/types.h> | ||
26 | #include <linux/shmem_fs.h> | ||
27 | |||
28 | #include <drm/drmP.h> | ||
29 | |||
30 | /** | ||
31 | * drm_gem_get_pages - helper to allocate backing pages for a GEM object | ||
32 | * @obj: obj in question | ||
33 | * @gfpmask: gfp mask of requested pages | ||
34 | */ | ||
35 | struct page **_drm_gem_get_pages(struct drm_gem_object *obj, gfp_t gfpmask) | ||
36 | { | ||
37 | struct inode *inode; | ||
38 | struct address_space *mapping; | ||
39 | struct page *p, **pages; | ||
40 | int i, npages; | ||
41 | |||
42 | /* This is the shared memory object that backs the GEM resource */ | ||
43 | inode = file_inode(obj->filp); | ||
44 | mapping = inode->i_mapping; | ||
45 | |||
46 | npages = obj->size >> PAGE_SHIFT; | ||
47 | |||
48 | pages = drm_malloc_ab(npages, sizeof(struct page *)); | ||
49 | if (pages == NULL) | ||
50 | return ERR_PTR(-ENOMEM); | ||
51 | |||
52 | gfpmask |= mapping_gfp_mask(mapping); | ||
53 | |||
54 | for (i = 0; i < npages; i++) { | ||
55 | p = shmem_read_mapping_page_gfp(mapping, i, gfpmask); | ||
56 | if (IS_ERR(p)) | ||
57 | goto fail; | ||
58 | pages[i] = p; | ||
59 | |||
60 | /* There is a hypothetical issue w/ drivers that require | ||
61 | * buffer memory in the low 4GB.. if the pages are un- | ||
62 | * pinned, and swapped out, they can end up swapped back | ||
63 | * in above 4GB. If pages are already in memory, then | ||
64 | * shmem_read_mapping_page_gfp will ignore the gfpmask, | ||
65 | * even if the already in-memory page disobeys the mask. | ||
66 | * | ||
67 | * It is only a theoretical issue today, because none of | ||
68 | * the devices with this limitation can be populated with | ||
69 | * enough memory to trigger the issue. But this BUG_ON() | ||
70 | * is here as a reminder in case the problem with | ||
71 | * shmem_read_mapping_page_gfp() isn't solved by the time | ||
72 | * it does become a real issue. | ||
73 | * | ||
74 | * See this thread: http://lkml.org/lkml/2011/7/11/238 | ||
75 | */ | ||
76 | BUG_ON((gfpmask & __GFP_DMA32) && | ||
77 | (page_to_pfn(p) >= 0x00100000UL)); | ||
78 | } | ||
79 | |||
80 | return pages; | ||
81 | |||
82 | fail: | ||
83 | while (i--) | ||
84 | page_cache_release(pages[i]); | ||
85 | |||
86 | drm_free_large(pages); | ||
87 | return ERR_CAST(p); | ||
88 | } | ||
89 | |||
90 | /** | ||
91 | * drm_gem_put_pages - helper to free backing pages for a GEM object | ||
92 | * @obj: obj in question | ||
93 | * @pages: pages to free | ||
94 | */ | ||
95 | void _drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, | ||
96 | bool dirty, bool accessed) | ||
97 | { | ||
98 | int i, npages; | ||
99 | |||
100 | npages = obj->size >> PAGE_SHIFT; | ||
101 | |||
102 | for (i = 0; i < npages; i++) { | ||
103 | if (dirty) | ||
104 | set_page_dirty(pages[i]); | ||
105 | |||
106 | if (accessed) | ||
107 | mark_page_accessed(pages[i]); | ||
108 | |||
109 | /* Undo the reference we took when populating the table */ | ||
110 | page_cache_release(pages[i]); | ||
111 | } | ||
112 | |||
113 | drm_free_large(pages); | ||
114 | } | ||
115 | |||
116 | int | ||
117 | _drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) | ||
118 | { | ||
119 | struct drm_device *dev = obj->dev; | ||
120 | struct drm_gem_mm *mm = dev->mm_private; | ||
121 | |||
122 | return drm_vma_offset_add(&mm->vma_manager, &obj->vma_node, | ||
123 | size / PAGE_SIZE); | ||
124 | } | ||