diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2012-07-24 11:47:34 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-08-23 19:30:02 -0400 |
commit | 4d46259f00c6dd04d53e74cdfa8f8b6ec35c0140 (patch) | |
tree | 491a71f72c97cae18a9b0eb5b87424550370514d | |
parent | 9a9f5786fcccda3cc61eaa8f537690327eff6853 (diff) |
drm: gma500: Kill the GEM glue layer
The private gem_create_mmap_offset() function is now implemented in the
DRM core as drm_gem_create_mmap_offset(). Use it and kill the private
copy.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/gma500/Makefile | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gem.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gem_glue.c | 90 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gem_glue.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/psb_drv.h | 1 |
5 files changed, 8 insertions, 96 deletions
diff --git a/drivers/gpu/drm/gma500/Makefile b/drivers/gpu/drm/gma500/Makefile index 56a0f2ac82c4..7a2d40a5c1e1 100644 --- a/drivers/gpu/drm/gma500/Makefile +++ b/drivers/gpu/drm/gma500/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | ccflags-y += -I$(srctree)/include/drm | 4 | ccflags-y += -I$(srctree)/include/drm |
5 | 5 | ||
6 | gma500_gfx-y += gem_glue.o \ | 6 | gma500_gfx-y += \ |
7 | accel_2d.o \ | 7 | accel_2d.o \ |
8 | backlight.o \ | 8 | backlight.o \ |
9 | framebuffer.o \ | 9 | framebuffer.o \ |
diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c index fc7d144bc2d3..df20546a2a34 100644 --- a/drivers/gpu/drm/gma500/gem.c +++ b/drivers/gpu/drm/gma500/gem.c | |||
@@ -36,7 +36,12 @@ int psb_gem_init_object(struct drm_gem_object *obj) | |||
36 | void psb_gem_free_object(struct drm_gem_object *obj) | 36 | void psb_gem_free_object(struct drm_gem_object *obj) |
37 | { | 37 | { |
38 | struct gtt_range *gtt = container_of(obj, struct gtt_range, gem); | 38 | struct gtt_range *gtt = container_of(obj, struct gtt_range, gem); |
39 | drm_gem_object_release_wrap(obj); | 39 | |
40 | /* Remove the list map if one is present */ | ||
41 | if (obj->map_list.map) | ||
42 | drm_gem_free_mmap_offset(obj); | ||
43 | drm_gem_object_release(obj); | ||
44 | |||
40 | /* This must occur last as it frees up the memory of the GEM object */ | 45 | /* This must occur last as it frees up the memory of the GEM object */ |
41 | psb_gtt_free_range(obj->dev, gtt); | 46 | psb_gtt_free_range(obj->dev, gtt); |
42 | } | 47 | } |
@@ -77,7 +82,7 @@ int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device *dev, | |||
77 | 82 | ||
78 | /* Make it mmapable */ | 83 | /* Make it mmapable */ |
79 | if (!obj->map_list.map) { | 84 | if (!obj->map_list.map) { |
80 | ret = gem_create_mmap_offset(obj); | 85 | ret = drm_gem_create_mmap_offset(obj); |
81 | if (ret) | 86 | if (ret) |
82 | goto out; | 87 | goto out; |
83 | } | 88 | } |
diff --git a/drivers/gpu/drm/gma500/gem_glue.c b/drivers/gpu/drm/gma500/gem_glue.c deleted file mode 100644 index 3c17634f6061..000000000000 --- a/drivers/gpu/drm/gma500/gem_glue.c +++ /dev/null | |||
@@ -1,90 +0,0 @@ | |||
1 | /************************************************************************** | ||
2 | * Copyright (c) 2011, Intel Corporation. | ||
3 | * All Rights Reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
17 | * | ||
18 | **************************************************************************/ | ||
19 | |||
20 | #include <drm/drmP.h> | ||
21 | #include <drm/drm.h> | ||
22 | #include "gem_glue.h" | ||
23 | |||
24 | void drm_gem_object_release_wrap(struct drm_gem_object *obj) | ||
25 | { | ||
26 | /* Remove the list map if one is present */ | ||
27 | if (obj->map_list.map) { | ||
28 | struct drm_gem_mm *mm = obj->dev->mm_private; | ||
29 | struct drm_map_list *list = &obj->map_list; | ||
30 | drm_ht_remove_item(&mm->offset_hash, &list->hash); | ||
31 | drm_mm_put_block(list->file_offset_node); | ||
32 | kfree(list->map); | ||
33 | list->map = NULL; | ||
34 | } | ||
35 | drm_gem_object_release(obj); | ||
36 | } | ||
37 | |||
38 | /** | ||
39 | * gem_create_mmap_offset - invent an mmap offset | ||
40 | * @obj: our object | ||
41 | * | ||
42 | * Standard implementation of offset generation for mmap as is | ||
43 | * duplicated in several drivers. This belongs in GEM. | ||
44 | */ | ||
45 | int gem_create_mmap_offset(struct drm_gem_object *obj) | ||
46 | { | ||
47 | struct drm_device *dev = obj->dev; | ||
48 | struct drm_gem_mm *mm = dev->mm_private; | ||
49 | struct drm_map_list *list; | ||
50 | struct drm_local_map *map; | ||
51 | int ret; | ||
52 | |||
53 | list = &obj->map_list; | ||
54 | list->map = kzalloc(sizeof(struct drm_map_list), GFP_KERNEL); | ||
55 | if (list->map == NULL) | ||
56 | return -ENOMEM; | ||
57 | map = list->map; | ||
58 | map->type = _DRM_GEM; | ||
59 | map->size = obj->size; | ||
60 | map->handle = obj; | ||
61 | |||
62 | list->file_offset_node = drm_mm_search_free(&mm->offset_manager, | ||
63 | obj->size / PAGE_SIZE, 0, 0); | ||
64 | if (!list->file_offset_node) { | ||
65 | dev_err(dev->dev, "failed to allocate offset for bo %d\n", | ||
66 | obj->name); | ||
67 | ret = -ENOSPC; | ||
68 | goto free_it; | ||
69 | } | ||
70 | list->file_offset_node = drm_mm_get_block(list->file_offset_node, | ||
71 | obj->size / PAGE_SIZE, 0); | ||
72 | if (!list->file_offset_node) { | ||
73 | ret = -ENOMEM; | ||
74 | goto free_it; | ||
75 | } | ||
76 | list->hash.key = list->file_offset_node->start; | ||
77 | ret = drm_ht_insert_item(&mm->offset_hash, &list->hash); | ||
78 | if (ret) { | ||
79 | dev_err(dev->dev, "failed to add to map hash\n"); | ||
80 | goto free_mm; | ||
81 | } | ||
82 | return 0; | ||
83 | |||
84 | free_mm: | ||
85 | drm_mm_put_block(list->file_offset_node); | ||
86 | free_it: | ||
87 | kfree(list->map); | ||
88 | list->map = NULL; | ||
89 | return ret; | ||
90 | } | ||
diff --git a/drivers/gpu/drm/gma500/gem_glue.h b/drivers/gpu/drm/gma500/gem_glue.h deleted file mode 100644 index ce5ce30f74db..000000000000 --- a/drivers/gpu/drm/gma500/gem_glue.h +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | extern void drm_gem_object_release_wrap(struct drm_gem_object *obj); | ||
2 | extern int gem_create_mmap_offset(struct drm_gem_object *obj); | ||
diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h index 4ab6ae7e92b4..223ff5b1b5c4 100644 --- a/drivers/gpu/drm/gma500/psb_drv.h +++ b/drivers/gpu/drm/gma500/psb_drv.h | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | #include <drm/drmP.h> | 25 | #include <drm/drmP.h> |
26 | #include "drm_global.h" | 26 | #include "drm_global.h" |
27 | #include "gem_glue.h" | ||
28 | #include "gma_drm.h" | 27 | #include "gma_drm.h" |
29 | #include "psb_reg.h" | 28 | #include "psb_reg.h" |
30 | #include "psb_intel_drv.h" | 29 | #include "psb_intel_drv.h" |