Subversion Repositories Kolibri OS

Rev

Rev 4075 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4075 Rev 4112
Line 59... Line 59...
59
	int ret;
59
	int ret;
Line 60... Line 60...
60
 
60
 
61
	lpfn = placement->lpfn;
61
	lpfn = placement->lpfn;
62
	if (!lpfn)
62
	if (!lpfn)
63
		lpfn = man->size;
63
		lpfn = man->size;
64
	do {
64
 
65
		ret = drm_mm_pre_get(mm);
65
	node = kzalloc(sizeof(*node), GFP_KERNEL);
66
		if (unlikely(ret))
66
	if (!node)
Line 67... Line 67...
67
			return ret;
67
		return -ENOMEM;
68
 
-
 
69
		spin_lock(&rman->lock);
-
 
70
		node = drm_mm_search_free_in_range(mm,
-
 
71
					mem->num_pages, mem->page_alignment,
-
 
72
					placement->fpfn, lpfn, 1);
-
 
73
		if (unlikely(node == NULL)) {
-
 
74
			spin_unlock(&rman->lock);
-
 
75
			return 0;
68
 
76
		}
69
		spin_lock(&rman->lock);
77
		node = drm_mm_get_block_atomic_range(node, mem->num_pages,
70
	ret = drm_mm_insert_node_in_range(mm, node, mem->num_pages,
78
						     mem->page_alignment,
71
						     mem->page_alignment,
79
						     placement->fpfn,
72
					  placement->fpfn, lpfn,
80
						     lpfn);
-
 
Line -... Line 73...
-
 
73
					  DRM_MM_SEARCH_BEST);
-
 
74
		spin_unlock(&rman->lock);
-
 
75
 
81
		spin_unlock(&rman->lock);
76
	if (unlikely(ret)) {
82
	} while (node == NULL);
77
		kfree(node);
-
 
78
	} else {
-
 
79
	mem->mm_node = node;
83
 
80
	mem->start = node->start;
84
	mem->mm_node = node;
81
	}
Line 85... Line 82...
85
	mem->start = node->start;
82
 
86
	return 0;
83
	return 0;
87
}
84
}
88
 
85
 
Line 89... Line 86...
89
static void ttm_bo_man_put_node(struct ttm_mem_type_manager *man,
86
static void ttm_bo_man_put_node(struct ttm_mem_type_manager *man,
90
				struct ttm_mem_reg *mem)
87
				struct ttm_mem_reg *mem)
91
{
88
{
92
	struct ttm_range_manager *rman = (struct ttm_range_manager *) man->priv;
89
	struct ttm_range_manager *rman = (struct ttm_range_manager *) man->priv;
-
 
90
 
-
 
91
	if (mem->mm_node) {
93
 
92
		spin_lock(&rman->lock);
94
	if (mem->mm_node) {
93
		drm_mm_remove_node(mem->mm_node);
95
		spin_lock(&rman->lock);
94
		spin_unlock(&rman->lock);
Line 96... Line 95...
96
		drm_mm_put_block(mem->mm_node);
95