drm: mm: extract node insert helper functions
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
ea7b1dd448
commit
9fc935debb
@ -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,
|
|||||||
} else {
|
} else {
|
||||||
node->hole_follows = 0;
|
node->hole_follows = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct drm_mm_node *drm_mm_get_block_generic(struct drm_mm_node *hole_node,
|
||||||
|
unsigned long size,
|
||||||
|
unsigned alignment,
|
||||||
|
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(hole_node, node, size, alignment);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_mm_get_block_generic);
|
EXPORT_SYMBOL(drm_mm_get_block_generic);
|
||||||
|
|
||||||
struct drm_mm_node *drm_mm_get_block_range_generic(struct drm_mm_node *hole_node,
|
static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
|
||||||
unsigned long size,
|
struct drm_mm_node *node,
|
||||||
unsigned alignment,
|
unsigned long size, unsigned alignment,
|
||||||
unsigned long start,
|
unsigned long start, unsigned long end)
|
||||||
unsigned long end,
|
|
||||||
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 (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
|
|||||||
} 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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user