diff options
author | Ben Widawsky <ben@bwidawsk.net> | 2013-07-05 17:41:03 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-07-08 16:04:33 -0400 |
commit | 338710e7aff3428dc8170a03704a8ae981b58dcd (patch) | |
tree | 5c95329df3cd1114ddd3f59181f36fc4cbd5ab96 /drivers/gpu/drm/drm_mm.c | |
parent | b3a070cccb9135f8bec63d9f194ddaa422136fb0 (diff) |
drm: Change create block to reserve node
With the previous patch we no longer actually create a node, we simply
find the correct hole and occupy it. This very well could have been
squashed with the last patch, but since I already had David's review, I
figured it's easiest to keep it distinct.
Also update the users in i915. Conveniently this is the only user of the
interface.
CC: David Airlie <airlied@linux.ie>
CC: <dri-devel@lists.freedesktop.org>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Acked-by: David Airlie <airlied@linux.ie>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/drm_mm.c')
-rw-r--r-- | drivers/gpu/drm/drm_mm.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index 9e8dfbc1955e..52e0ee7f4a6f 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c | |||
@@ -147,27 +147,27 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node, | |||
147 | } | 147 | } |
148 | } | 148 | } |
149 | 149 | ||
150 | int drm_mm_create_block(struct drm_mm *mm, struct drm_mm_node *node, | 150 | int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node) |
151 | unsigned long start, unsigned long size) | ||
152 | { | 151 | { |
153 | struct drm_mm_node *hole; | 152 | struct drm_mm_node *hole; |
154 | unsigned long end = start + size; | 153 | unsigned long end = node->start + node->size; |
155 | unsigned long hole_start; | 154 | unsigned long hole_start; |
156 | unsigned long hole_end; | 155 | unsigned long hole_end; |
157 | 156 | ||
157 | BUG_ON(node == NULL); | ||
158 | |||
159 | /* Find the relevant hole to add our node to */ | ||
158 | drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { | 160 | drm_mm_for_each_hole(hole, mm, hole_start, hole_end) { |
159 | if (hole_start > start || hole_end < end) | 161 | if (hole_start > node->start || hole_end < end) |
160 | continue; | 162 | continue; |
161 | 163 | ||
162 | node->start = start; | ||
163 | node->size = size; | ||
164 | node->mm = mm; | 164 | node->mm = mm; |
165 | node->allocated = 1; | 165 | node->allocated = 1; |
166 | 166 | ||
167 | INIT_LIST_HEAD(&node->hole_stack); | 167 | INIT_LIST_HEAD(&node->hole_stack); |
168 | list_add(&node->node_list, &hole->node_list); | 168 | list_add(&node->node_list, &hole->node_list); |
169 | 169 | ||
170 | if (start == hole_start) { | 170 | if (node->start == hole_start) { |
171 | hole->hole_follows = 0; | 171 | hole->hole_follows = 0; |
172 | list_del_init(&hole->hole_stack); | 172 | list_del_init(&hole->hole_stack); |
173 | } | 173 | } |
@@ -181,10 +181,11 @@ int drm_mm_create_block(struct drm_mm *mm, struct drm_mm_node *node, | |||
181 | return 0; | 181 | return 0; |
182 | } | 182 | } |
183 | 183 | ||
184 | WARN(1, "no hole found for block 0x%lx + 0x%lx\n", start, size); | 184 | WARN(1, "no hole found for node 0x%lx + 0x%lx\n", |
185 | node->start, node->size); | ||
185 | return -ENOSPC; | 186 | return -ENOSPC; |
186 | } | 187 | } |
187 | EXPORT_SYMBOL(drm_mm_create_block); | 188 | EXPORT_SYMBOL(drm_mm_reserve_node); |
188 | 189 | ||
189 | struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node, | 190 | struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node, |
190 | unsigned long size, | 191 | unsigned long size, |