aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-02-18 11:59:14 -0500
committerDave Airlie <airlied@redhat.com>2011-02-22 19:32:51 -0500
commitb0b7af1884b7d807a3504804f9825d472de78708 (patch)
treeba9e2dde9575caab3ae6f4b0a1d1ef15c09caf67 /include/drm
parent9fc935debb33d90bf302ba42f7234b78e322f195 (diff)
drm: mm: add api for embedding struct drm_mm_node
The old api has a two-step process: First search for a suitable free hole, then allocate from that specific hole. No user used this to do anything clever. So drop it for the embeddable variant of the drm_mm api (the old one retains this ability, for the time being). With struct drm_mm_node embedded, we cannot track allocations anymore by checking for a NULL pointer. So keep track of this and add a small helper drm_mm_node_allocated. Also add a function to move allocations between different struct drm_mm_node. v2: Implement suggestions by Chris Wilson. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'include/drm')
-rw-r--r--include/drm/drm_mm.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
index 34fa36f2de70..17a070e11d3c 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
@@ -49,6 +49,7 @@ struct drm_mm_node {
49 unsigned scanned_prev_free : 1; 49 unsigned scanned_prev_free : 1;
50 unsigned scanned_next_free : 1; 50 unsigned scanned_next_free : 1;
51 unsigned scanned_preceeds_hole : 1; 51 unsigned scanned_preceeds_hole : 1;
52 unsigned allocated : 1;
52 unsigned long start; 53 unsigned long start;
53 unsigned long size; 54 unsigned long size;
54 struct drm_mm *mm; 55 struct drm_mm *mm;
@@ -73,6 +74,11 @@ struct drm_mm {
73 unsigned long scan_end; 74 unsigned long scan_end;
74}; 75};
75 76
77static inline bool drm_mm_node_allocated(struct drm_mm_node *node)
78{
79 return node->allocated;
80}
81
76static inline bool drm_mm_initialized(struct drm_mm *mm) 82static inline bool drm_mm_initialized(struct drm_mm *mm)
77{ 83{
78 return mm->hole_stack.next; 84 return mm->hole_stack.next;
@@ -126,7 +132,15 @@ static inline struct drm_mm_node *drm_mm_get_block_atomic_range(
126 return drm_mm_get_block_range_generic(parent, size, alignment, 132 return drm_mm_get_block_range_generic(parent, size, alignment,
127 start, end, 1); 133 start, end, 1);
128} 134}
135extern int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node,
136 unsigned long size, unsigned alignment);
137extern int drm_mm_insert_node_in_range(struct drm_mm *mm,
138 struct drm_mm_node *node,
139 unsigned long size, unsigned alignment,
140 unsigned long start, unsigned long end);
129extern void drm_mm_put_block(struct drm_mm_node *cur); 141extern void drm_mm_put_block(struct drm_mm_node *cur);
142extern void drm_mm_remove_node(struct drm_mm_node *node);
143extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);
130extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, 144extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm,
131 unsigned long size, 145 unsigned long size,
132 unsigned alignment, 146 unsigned alignment,
@@ -142,11 +156,6 @@ extern int drm_mm_init(struct drm_mm *mm, unsigned long start,
142 unsigned long size); 156 unsigned long size);
143extern void drm_mm_takedown(struct drm_mm *mm); 157extern void drm_mm_takedown(struct drm_mm *mm);
144extern int drm_mm_clean(struct drm_mm *mm); 158extern int drm_mm_clean(struct drm_mm *mm);
145extern unsigned long drm_mm_tail_space(struct drm_mm *mm);
146extern int drm_mm_remove_space_from_tail(struct drm_mm *mm,
147 unsigned long size);
148extern int drm_mm_add_space_to_tail(struct drm_mm *mm,
149 unsigned long size, int atomic);
150extern int drm_mm_pre_get(struct drm_mm *mm); 159extern int drm_mm_pre_get(struct drm_mm *mm);
151 160
152static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block) 161static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)