|
@@ -55,6 +55,7 @@ static int ttm_bo_man_get_node(struct ttm_mem_type_manager *man,
|
|
|
struct ttm_range_manager *rman = (struct ttm_range_manager *) man->priv;
|
|
|
struct drm_mm *mm = &rman->mm;
|
|
|
struct drm_mm_node *node = NULL;
|
|
|
+ enum drm_mm_search_flags sflags = DRM_MM_SEARCH_BEST;
|
|
|
enum drm_mm_allocator_flags aflags = DRM_MM_CREATE_DEFAULT;
|
|
|
unsigned long lpfn;
|
|
|
int ret;
|
|
@@ -67,15 +68,16 @@ static int ttm_bo_man_get_node(struct ttm_mem_type_manager *man,
|
|
|
if (!node)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- if (place->flags & TTM_PL_FLAG_TOPDOWN)
|
|
|
+ if (place->flags & TTM_PL_FLAG_TOPDOWN) {
|
|
|
+ sflags |= DRM_MM_SEARCH_BELOW;
|
|
|
aflags = DRM_MM_CREATE_TOP;
|
|
|
+ }
|
|
|
|
|
|
spin_lock(&rman->lock);
|
|
|
ret = drm_mm_insert_node_in_range_generic(mm, node, mem->num_pages,
|
|
|
mem->page_alignment, 0,
|
|
|
place->fpfn, lpfn,
|
|
|
- DRM_MM_SEARCH_BEST,
|
|
|
- aflags);
|
|
|
+ sflags, aflags);
|
|
|
spin_unlock(&rman->lock);
|
|
|
|
|
|
if (unlikely(ret)) {
|