aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm/drm_mm.h
diff options
context:
space:
mode:
authorDavid Herrmann <dh.herrmann@gmail.com>2013-07-27 07:39:28 -0400
committerDave Airlie <airlied@redhat.com>2013-08-06 20:16:50 -0400
commitc700c67bae6698fbc6bd20e2ae5dc62ddd367b3b (patch)
tree33f02392a1c104ce6c42d745bef696cdf0cec3ac /include/drm/drm_mm.h
parent06e78edff18195f8e416e6961fea7d88118a5c63 (diff)
drm/mm: remove unused API
We used to pre-allocate drm_mm nodes and save them in a linked list for later usage so we always have spare ones in atomic contexts. However, this is really racy if multiple threads are in an atomic context at the same time and we don't have enough spare nodes. Moreover, all remaining users run in user-context and just lock drm_mm with a spinlock. So we can easily preallocate the node, take the spinlock and insert the node. This may have worked well with BKL in place, however, with today's infrastructure it really doesn't make any sense. Besides, most users can easily embed drm_mm_node into their objects so no allocation is needed at all. Thus, remove the old pre-alloc API and all the helpers that it provides. Drivers have already been converted and we should not use the old API for new code, anymore. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/drm/drm_mm.h')
-rw-r--r--include/drm/drm_mm.h95
1 files changed, 0 insertions, 95 deletions
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
index 439d1a17d3b1..cba67865d18f 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
@@ -70,9 +70,6 @@ struct drm_mm {
70 /* head_node.node_list is the list of all memory nodes, ordered 70 /* head_node.node_list is the list of all memory nodes, ordered
71 * according to the (increasing) start address of the memory node. */ 71 * according to the (increasing) start address of the memory node. */
72 struct drm_mm_node head_node; 72 struct drm_mm_node head_node;
73 struct list_head unused_nodes;
74 int num_unused;
75 spinlock_t unused_lock;
76 unsigned int scan_check_range : 1; 73 unsigned int scan_check_range : 1;
77 unsigned scan_alignment; 74 unsigned scan_alignment;
78 unsigned long scan_color; 75 unsigned long scan_color;
@@ -123,13 +120,6 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
123#define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \ 120#define drm_mm_for_each_node(entry, mm) list_for_each_entry(entry, \
124 &(mm)->head_node.node_list, \ 121 &(mm)->head_node.node_list, \
125 node_list) 122 node_list)
126#define drm_mm_for_each_scanned_node_reverse(entry, n, mm) \
127 for (entry = (mm)->prev_scanned_node, \
128 next = entry ? list_entry(entry->node_list.next, \
129 struct drm_mm_node, node_list) : NULL; \
130 entry != NULL; entry = next, \
131 next = entry ? list_entry(entry->node_list.next, \
132 struct drm_mm_node, node_list) : NULL) \
133 123
134/* Note that we need to unroll list_for_each_entry in order to inline 124/* Note that we need to unroll list_for_each_entry in order to inline
135 * setting hole_start and hole_end on each iteration and keep the 125 * setting hole_start and hole_end on each iteration and keep the
@@ -147,52 +137,6 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
147 * Basic range manager support (drm_mm.c) 137 * Basic range manager support (drm_mm.c)
148 */ 138 */
149extern int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node); 139extern int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
150extern struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *node,
151 unsigned long size,
152 unsigned alignment,
153 unsigned long color,
154 int atomic);
155extern struct drm_mm_node *drm_mm_get_block_range_generic(
156 struct drm_mm_node *node,
157 unsigned long size,
158 unsigned alignment,
159 unsigned long color,
160 unsigned long start,
161 unsigned long end,
162 int atomic);
163
164static inline struct drm_mm_node *drm_mm_get_block(struct drm_mm_node *parent,
165 unsigned long size,
166 unsigned alignment)
167{
168 return drm_mm_get_block_generic(parent, size, alignment, 0, 0);
169}
170static inline struct drm_mm_node *drm_mm_get_block_atomic(struct drm_mm_node *parent,
171 unsigned long size,
172 unsigned alignment)
173{
174 return drm_mm_get_block_generic(parent, size, alignment, 0, 1);
175}
176static inline struct drm_mm_node *drm_mm_get_block_range(
177 struct drm_mm_node *parent,
178 unsigned long size,
179 unsigned alignment,
180 unsigned long start,
181 unsigned long end)
182{
183 return drm_mm_get_block_range_generic(parent, size, alignment, 0,
184 start, end, 0);
185}
186static inline struct drm_mm_node *drm_mm_get_block_atomic_range(
187 struct drm_mm_node *parent,
188 unsigned long size,
189 unsigned alignment,
190 unsigned long start,
191 unsigned long end)
192{
193 return drm_mm_get_block_range_generic(parent, size, alignment, 0,
194 start, end, 1);
195}
196 140
197extern int drm_mm_insert_node_generic(struct drm_mm *mm, 141extern int drm_mm_insert_node_generic(struct drm_mm *mm,
198 struct drm_mm_node *node, 142 struct drm_mm_node *node,
@@ -229,52 +173,13 @@ static inline int drm_mm_insert_node_in_range(struct drm_mm *mm,
229 0, start, end, flags); 173 0, start, end, flags);
230} 174}
231 175
232extern void drm_mm_put_block(struct drm_mm_node *cur);
233extern void drm_mm_remove_node(struct drm_mm_node *node); 176extern void drm_mm_remove_node(struct drm_mm_node *node);
234extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new); 177extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
235extern struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
236 unsigned long size,
237 unsigned alignment,
238 unsigned long color,
239 enum drm_mm_search_flags flags);
240extern struct drm_mm_node *drm_mm_search_free_in_range_generic(
241 const struct drm_mm *mm,
242 unsigned long size,
243 unsigned alignment,
244 unsigned long color,
245 unsigned long start,
246 unsigned long end,
247 enum drm_mm_search_flags flags);
248static inline struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm,
249 unsigned long size,
250 unsigned alignment,
251 enum drm_mm_search_flags flags)
252{
253 return drm_mm_search_free_generic(mm,size, alignment, 0, flags);
254}
255static inline struct drm_mm_node *drm_mm_search_free_in_range(
256 const struct drm_mm *mm,
257 unsigned long size,
258 unsigned alignment,
259 unsigned long start,
260 unsigned long end,
261 enum drm_mm_search_flags flags)
262{
263 return drm_mm_search_free_in_range_generic(mm, size, alignment, 0,
264 start, end, flags);
265}
266
267extern void drm_mm_init(struct drm_mm *mm, 178extern void drm_mm_init(struct drm_mm *mm,
268 unsigned long start, 179 unsigned long start,
269 unsigned long size); 180 unsigned long size);
270extern void drm_mm_takedown(struct drm_mm *mm); 181extern void drm_mm_takedown(struct drm_mm *mm);
271extern int drm_mm_clean(struct drm_mm *mm); 182extern int drm_mm_clean(struct drm_mm *mm);
272extern int drm_mm_pre_get(struct drm_mm *mm);
273
274static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
275{
276 return block->mm;
277}
278 183
279void drm_mm_init_scan(struct drm_mm *mm, 184void drm_mm_init_scan(struct drm_mm *mm,
280 unsigned long size, 185 unsigned long size,