提交 9fc935de 编写于 作者: D Daniel Vetter 提交者: Dave Airlie

drm: mm: extract node insert helper functions

Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: NDave Airlie <airlied@redhat.com>
上级 ea7b1dd4
...@@ -115,24 +115,15 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node) ...@@ -115,24 +115,15 @@ static inline unsigned long drm_mm_hole_node_end(struct drm_mm_node *hole_node)
return next_node->start; return next_node->start;
} }
struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node, static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
unsigned long size, struct drm_mm_node *node,
unsigned alignment, unsigned long size, unsigned alignment)
int atomic)
{ {
struct drm_mm_node *node;
struct drm_mm *mm = hole_node->mm; struct drm_mm *mm = hole_node->mm;
unsigned long tmp = 0, wasted = 0; unsigned long tmp = 0, wasted = 0;
unsigned long hole_start = drm_mm_hole_node_start(hole_node); unsigned long hole_start = drm_mm_hole_node_start(hole_node);
unsigned long hole_end = drm_mm_hole_node_end(hole_node); unsigned long hole_end = drm_mm_hole_node_end(hole_node);
BUG_ON(!hole_node->hole_follows);
node = drm_mm_kmalloc(mm, atomic);
if (unlikely(node == NULL))
return NULL;
if (alignment) if (alignment)
tmp = hole_start % alignment; tmp = hole_start % alignment;
...@@ -157,30 +148,37 @@ struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node, ...@@ -157,30 +148,37 @@ struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
} else { } else {
node->hole_follows = 0; node->hole_follows = 0;
} }
return node;
} }
EXPORT_SYMBOL(drm_mm_get_block_generic);
struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node, struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
unsigned long size, unsigned long size,
unsigned alignment, unsigned alignment,
unsigned long start,
unsigned long end,
int atomic) int atomic)
{ {
struct drm_mm_node *node; struct drm_mm_node *node;
struct drm_mm *mm = hole_node->mm;
unsigned long tmp = 0, wasted = 0;
unsigned long hole_start = drm_mm_hole_node_start(hole_node);
unsigned long hole_end = drm_mm_hole_node_end(hole_node);
BUG_ON(!hole_node->hole_follows); BUG_ON(!hole_node->hole_follows);
node = drm_mm_kmalloc(mm, atomic); node = drm_mm_kmalloc(hole_node->mm, atomic);
if (unlikely(node == NULL)) if (unlikely(node == NULL))
return NULL; return NULL;
drm_mm_insert_helper(hole_node, node, size, alignment);
return node;
}
EXPORT_SYMBOL(drm_mm_get_block_generic);
static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
struct drm_mm_node *node,
unsigned long size, unsigned alignment,
unsigned long start, unsigned long end)
{
struct drm_mm *mm = hole_node->mm;
unsigned long tmp = 0, wasted = 0;
unsigned long hole_start = drm_mm_hole_node_start(hole_node);
unsigned long hole_end = drm_mm_hole_node_end(hole_node);
if (hole_start < start) if (hole_start < start)
wasted += start - hole_start; wasted += start - hole_start;
if (alignment) if (alignment)
...@@ -210,6 +208,25 @@ struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node ...@@ -210,6 +208,25 @@ struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node
} else { } else {
node->hole_follows = 0; node->hole_follows = 0;
} }
}
struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node,
unsigned long size,
unsigned alignment,
unsigned long start,
unsigned long end,
int atomic)
{
struct drm_mm_node *node;
BUG_ON(!hole_node->hole_follows);
node = drm_mm_kmalloc(hole_node->mm, atomic);
if (unlikely(node == NULL))
return NULL;
drm_mm_insert_helper_range(hole_node, node, size, alignment,
start, end);
return node; return node;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册