diff options
| -rw-r--r-- | drivers/gpu/drm/drm_mm.c | 41 | ||||
| -rw-r--r-- | include/drm/drm_mm.h | 25 | 
2 files changed, 50 insertions, 16 deletions
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c index 0761a03cdbb..2bf9670ba29 100644 --- a/drivers/gpu/drm/drm_mm.c +++ b/drivers/gpu/drm/drm_mm.c @@ -184,19 +184,27 @@ EXPORT_SYMBOL(drm_mm_get_block_generic);   * -ENOSPC if no suitable free area is available. The preallocated memory node   * must be cleared.   */ -int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, -		       unsigned long size, unsigned alignment) +int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node, +			       unsigned long size, unsigned alignment, +			       unsigned long color)  {  	struct drm_mm_node *hole_node; -	hole_node = drm_mm_search_free(mm, size, alignment, false); +	hole_node = drm_mm_search_free_generic(mm, size, alignment, +					       color, 0);  	if (!hole_node)  		return -ENOSPC; -	drm_mm_insert_helper(hole_node, node, size, alignment, 0); - +	drm_mm_insert_helper(hole_node, node, size, alignment, color);  	return 0;  } +EXPORT_SYMBOL(drm_mm_insert_node_generic); + +int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, +		       unsigned long size, unsigned alignment) +{ +	return drm_mm_insert_node_generic(mm, node, size, alignment, 0); +}  EXPORT_SYMBOL(drm_mm_insert_node);  static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node, @@ -275,22 +283,31 @@ EXPORT_SYMBOL(drm_mm_get_block_range_generic);   * -ENOSPC if no suitable free area is available. This is for range   * restricted allocations. The preallocated memory node must be cleared.   */ -int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, -				unsigned long size, unsigned alignment, -				unsigned long start, unsigned long end) +int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node, +					unsigned long size, unsigned alignment, unsigned long color, +					unsigned long start, unsigned long end)  {  	struct drm_mm_node *hole_node; -	hole_node = drm_mm_search_free_in_range(mm, size, alignment, -						start, end, false); +	hole_node = drm_mm_search_free_in_range_generic(mm, +							size, alignment, color, +							start, end, 0);  	if (!hole_node)  		return -ENOSPC; -	drm_mm_insert_helper_range(hole_node, node, size, alignment, 0, +	drm_mm_insert_helper_range(hole_node, node, +				   size, alignment, color,  				   start, end); -  	return 0;  } +EXPORT_SYMBOL(drm_mm_insert_node_in_range_generic); + +int drm_mm_insert_node_in_range(struct drm_mm *mm, struct drm_mm_node *node, +				unsigned long size, unsigned alignment, +				unsigned long start, unsigned long end) +{ +	return drm_mm_insert_node_in_range_generic(mm, node, size, alignment, 0, start, end); +}  EXPORT_SYMBOL(drm_mm_insert_node_in_range);  /** diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h index 06d7f798a08..0f4a366f6fa 100644 --- a/include/drm/drm_mm.h +++ b/include/drm/drm_mm.h @@ -158,12 +158,29 @@ static inline struct drm_mm_node *drm_mm_get_block_atomic_range(  	return drm_mm_get_block_range_generic(parent, size, alignment, 0,  						start, end, 1);  } -extern int drm_mm_insert_node(struct drm_mm *mm, struct drm_mm_node *node, -			      unsigned long size, unsigned alignment); + +extern int drm_mm_insert_node(struct drm_mm *mm, +			      struct drm_mm_node *node, +			      unsigned long size, +			      unsigned alignment);  extern int drm_mm_insert_node_in_range(struct drm_mm *mm,  				       struct drm_mm_node *node, -				       unsigned long size, unsigned alignment, -				       unsigned long start, unsigned long end); +				       unsigned long size, +				       unsigned alignment, +				       unsigned long start, +				       unsigned long end); +extern int drm_mm_insert_node_generic(struct drm_mm *mm, +				      struct drm_mm_node *node, +				      unsigned long size, +				      unsigned alignment, +				      unsigned long color); +extern int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, +				       struct drm_mm_node *node, +				       unsigned long size, +				       unsigned alignment, +				       unsigned long color, +				       unsigned long start, +				       unsigned long end);  extern void drm_mm_put_block(struct drm_mm_node *cur);  extern void drm_mm_remove_node(struct drm_mm_node *node);  extern void drm_mm_replace_node(struct drm_mm_node *old, struct drm_mm_node *new);  |