xref: /openbmc/linux/drivers/gpu/drm/ttm/ttm_bo.c (revision a09d2831)
1 /**************************************************************************
2  *
3  * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sub license, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the
15  * next paragraph) shall be included in all copies or substantial portions
16  * of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21  * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
22  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24  * USE OR OTHER DEALINGS IN THE SOFTWARE.
25  *
26  **************************************************************************/
27 /*
28  * Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com>
29  */
30 /* Notes:
31  *
32  * We store bo pointer in drm_mm_node struct so we know which bo own a
33  * specific node. There is no protection on the pointer, thus to make
34  * sure things don't go berserk you have to access this pointer while
35  * holding the global lru lock and make sure anytime you free a node you
36  * reset the pointer to NULL.
37  */
38 
39 #include "ttm/ttm_module.h"
40 #include "ttm/ttm_bo_driver.h"
41 #include "ttm/ttm_placement.h"
42 #include <linux/jiffies.h>
43 #include <linux/slab.h>
44 #include <linux/sched.h>
45 #include <linux/mm.h>
46 #include <linux/file.h>
47 #include <linux/module.h>
48 
49 #define TTM_ASSERT_LOCKED(param)
50 #define TTM_DEBUG(fmt, arg...)
51 #define TTM_BO_HASH_ORDER 13
52 
53 static int ttm_bo_setup_vm(struct ttm_buffer_object *bo);
54 static int ttm_bo_swapout(struct ttm_mem_shrink *shrink);
55 static void ttm_bo_global_kobj_release(struct kobject *kobj);
56 
57 static struct attribute ttm_bo_count = {
58 	.name = "bo_count",
59 	.mode = S_IRUGO
60 };
61 
62 static inline int ttm_mem_type_from_flags(uint32_t flags, uint32_t *mem_type)
63 {
64 	int i;
65 
66 	for (i = 0; i <= TTM_PL_PRIV5; i++)
67 		if (flags & (1 << i)) {
68 			*mem_type = i;
69 			return 0;
70 		}
71 	return -EINVAL;
72 }
73 
74 static void ttm_mem_type_debug(struct ttm_bo_device *bdev, int mem_type)
75 {
76 	struct ttm_mem_type_manager *man = &bdev->man[mem_type];
77 
78 	printk(KERN_ERR TTM_PFX "    has_type: %d\n", man->has_type);
79 	printk(KERN_ERR TTM_PFX "    use_type: %d\n", man->use_type);
80 	printk(KERN_ERR TTM_PFX "    flags: 0x%08X\n", man->flags);
81 	printk(KERN_ERR TTM_PFX "    gpu_offset: 0x%08lX\n", man->gpu_offset);
82 	printk(KERN_ERR TTM_PFX "    io_offset: 0x%08lX\n", man->io_offset);
83 	printk(KERN_ERR TTM_PFX "    io_size: %ld\n", man->io_size);
84 	printk(KERN_ERR TTM_PFX "    size: %llu\n", man->size);
85 	printk(KERN_ERR TTM_PFX "    available_caching: 0x%08X\n",
86 		man->available_caching);
87 	printk(KERN_ERR TTM_PFX "    default_caching: 0x%08X\n",
88 		man->default_caching);
89 	if (mem_type != TTM_PL_SYSTEM) {
90 		spin_lock(&bdev->glob->lru_lock);
91 		drm_mm_debug_table(&man->manager, TTM_PFX);
92 		spin_unlock(&bdev->glob->lru_lock);
93 	}
94 }
95 
96 static void ttm_bo_mem_space_debug(struct ttm_buffer_object *bo,
97 					struct ttm_placement *placement)
98 {
99 	int i, ret, mem_type;
100 
101 	printk(KERN_ERR TTM_PFX "No space for %p (%lu pages, %luK, %luM)\n",
102 		bo, bo->mem.num_pages, bo->mem.size >> 10,
103 		bo->mem.size >> 20);
104 	for (i = 0; i < placement->num_placement; i++) {
105 		ret = ttm_mem_type_from_flags(placement->placement[i],
106 						&mem_type);
107 		if (ret)
108 			return;
109 		printk(KERN_ERR TTM_PFX "  placement[%d]=0x%08X (%d)\n",
110 			i, placement->placement[i], mem_type);
111 		ttm_mem_type_debug(bo->bdev, mem_type);
112 	}
113 }
114 
115 static ssize_t ttm_bo_global_show(struct kobject *kobj,
116 				  struct attribute *attr,
117 				  char *buffer)
118 {
119 	struct ttm_bo_global *glob =
120 		container_of(kobj, struct ttm_bo_global, kobj);
121 
122 	return snprintf(buffer, PAGE_SIZE, "%lu\n",
123 			(unsigned long) atomic_read(&glob->bo_count));
124 }
125 
126 static struct attribute *ttm_bo_global_attrs[] = {
127 	&ttm_bo_count,
128 	NULL
129 };
130 
131 static struct sysfs_ops ttm_bo_global_ops = {
132 	.show = &ttm_bo_global_show
133 };
134 
135 static struct kobj_type ttm_bo_glob_kobj_type  = {
136 	.release = &ttm_bo_global_kobj_release,
137 	.sysfs_ops = &ttm_bo_global_ops,
138 	.default_attrs = ttm_bo_global_attrs
139 };
140 
141 
142 static inline uint32_t ttm_bo_type_flags(unsigned type)
143 {
144 	return 1 << (type);
145 }
146 
147 static void ttm_bo_release_list(struct kref *list_kref)
148 {
149 	struct ttm_buffer_object *bo =
150 	    container_of(list_kref, struct ttm_buffer_object, list_kref);
151 	struct ttm_bo_device *bdev = bo->bdev;
152 
153 	BUG_ON(atomic_read(&bo->list_kref.refcount));
154 	BUG_ON(atomic_read(&bo->kref.refcount));
155 	BUG_ON(atomic_read(&bo->cpu_writers));
156 	BUG_ON(bo->sync_obj != NULL);
157 	BUG_ON(bo->mem.mm_node != NULL);
158 	BUG_ON(!list_empty(&bo->lru));
159 	BUG_ON(!list_empty(&bo->ddestroy));
160 
161 	if (bo->ttm)
162 		ttm_tt_destroy(bo->ttm);
163 	atomic_dec(&bo->glob->bo_count);
164 	if (bo->destroy)
165 		bo->destroy(bo);
166 	else {
167 		ttm_mem_global_free(bdev->glob->mem_glob, bo->acc_size);
168 		kfree(bo);
169 	}
170 }
171 
172 int ttm_bo_wait_unreserved(struct ttm_buffer_object *bo, bool interruptible)
173 {
174 
175 	if (interruptible) {
176 		int ret = 0;
177 
178 		ret = wait_event_interruptible(bo->event_queue,
179 					       atomic_read(&bo->reserved) == 0);
180 		if (unlikely(ret != 0))
181 			return ret;
182 	} else {
183 		wait_event(bo->event_queue, atomic_read(&bo->reserved) == 0);
184 	}
185 	return 0;
186 }
187 EXPORT_SYMBOL(ttm_bo_wait_unreserved);
188 
189 static void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)
190 {
191 	struct ttm_bo_device *bdev = bo->bdev;
192 	struct ttm_mem_type_manager *man;
193 
194 	BUG_ON(!atomic_read(&bo->reserved));
195 
196 	if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
197 
198 		BUG_ON(!list_empty(&bo->lru));
199 
200 		man = &bdev->man[bo->mem.mem_type];
201 		list_add_tail(&bo->lru, &man->lru);
202 		kref_get(&bo->list_kref);
203 
204 		if (bo->ttm != NULL) {
205 			list_add_tail(&bo->swap, &bo->glob->swap_lru);
206 			kref_get(&bo->list_kref);
207 		}
208 	}
209 }
210 
211 /**
212  * Call with the lru_lock held.
213  */
214 
215 static int ttm_bo_del_from_lru(struct ttm_buffer_object *bo)
216 {
217 	int put_count = 0;
218 
219 	if (!list_empty(&bo->swap)) {
220 		list_del_init(&bo->swap);
221 		++put_count;
222 	}
223 	if (!list_empty(&bo->lru)) {
224 		list_del_init(&bo->lru);
225 		++put_count;
226 	}
227 
228 	/*
229 	 * TODO: Add a driver hook to delete from
230 	 * driver-specific LRU's here.
231 	 */
232 
233 	return put_count;
234 }
235 
236 int ttm_bo_reserve_locked(struct ttm_buffer_object *bo,
237 			  bool interruptible,
238 			  bool no_wait, bool use_sequence, uint32_t sequence)
239 {
240 	struct ttm_bo_global *glob = bo->glob;
241 	int ret;
242 
243 	while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) {
244 		if (use_sequence && bo->seq_valid &&
245 			(sequence - bo->val_seq < (1 << 31))) {
246 			return -EAGAIN;
247 		}
248 
249 		if (no_wait)
250 			return -EBUSY;
251 
252 		spin_unlock(&glob->lru_lock);
253 		ret = ttm_bo_wait_unreserved(bo, interruptible);
254 		spin_lock(&glob->lru_lock);
255 
256 		if (unlikely(ret))
257 			return ret;
258 	}
259 
260 	if (use_sequence) {
261 		bo->val_seq = sequence;
262 		bo->seq_valid = true;
263 	} else {
264 		bo->seq_valid = false;
265 	}
266 
267 	return 0;
268 }
269 EXPORT_SYMBOL(ttm_bo_reserve);
270 
271 static void ttm_bo_ref_bug(struct kref *list_kref)
272 {
273 	BUG();
274 }
275 
276 int ttm_bo_reserve(struct ttm_buffer_object *bo,
277 		   bool interruptible,
278 		   bool no_wait, bool use_sequence, uint32_t sequence)
279 {
280 	struct ttm_bo_global *glob = bo->glob;
281 	int put_count = 0;
282 	int ret;
283 
284 	spin_lock(&glob->lru_lock);
285 	ret = ttm_bo_reserve_locked(bo, interruptible, no_wait, use_sequence,
286 				    sequence);
287 	if (likely(ret == 0))
288 		put_count = ttm_bo_del_from_lru(bo);
289 	spin_unlock(&glob->lru_lock);
290 
291 	while (put_count--)
292 		kref_put(&bo->list_kref, ttm_bo_ref_bug);
293 
294 	return ret;
295 }
296 
297 void ttm_bo_unreserve(struct ttm_buffer_object *bo)
298 {
299 	struct ttm_bo_global *glob = bo->glob;
300 
301 	spin_lock(&glob->lru_lock);
302 	ttm_bo_add_to_lru(bo);
303 	atomic_set(&bo->reserved, 0);
304 	wake_up_all(&bo->event_queue);
305 	spin_unlock(&glob->lru_lock);
306 }
307 EXPORT_SYMBOL(ttm_bo_unreserve);
308 
309 /*
310  * Call bo->mutex locked.
311  */
312 static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)
313 {
314 	struct ttm_bo_device *bdev = bo->bdev;
315 	struct ttm_bo_global *glob = bo->glob;
316 	int ret = 0;
317 	uint32_t page_flags = 0;
318 
319 	TTM_ASSERT_LOCKED(&bo->mutex);
320 	bo->ttm = NULL;
321 
322 	if (bdev->need_dma32)
323 		page_flags |= TTM_PAGE_FLAG_DMA32;
324 
325 	switch (bo->type) {
326 	case ttm_bo_type_device:
327 		if (zero_alloc)
328 			page_flags |= TTM_PAGE_FLAG_ZERO_ALLOC;
329 	case ttm_bo_type_kernel:
330 		bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
331 					page_flags, glob->dummy_read_page);
332 		if (unlikely(bo->ttm == NULL))
333 			ret = -ENOMEM;
334 		break;
335 	case ttm_bo_type_user:
336 		bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
337 					page_flags | TTM_PAGE_FLAG_USER,
338 					glob->dummy_read_page);
339 		if (unlikely(bo->ttm == NULL)) {
340 			ret = -ENOMEM;
341 			break;
342 		}
343 
344 		ret = ttm_tt_set_user(bo->ttm, current,
345 				      bo->buffer_start, bo->num_pages);
346 		if (unlikely(ret != 0))
347 			ttm_tt_destroy(bo->ttm);
348 		break;
349 	default:
350 		printk(KERN_ERR TTM_PFX "Illegal buffer object type\n");
351 		ret = -EINVAL;
352 		break;
353 	}
354 
355 	return ret;
356 }
357 
358 static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
359 				  struct ttm_mem_reg *mem,
360 				  bool evict, bool interruptible, bool no_wait)
361 {
362 	struct ttm_bo_device *bdev = bo->bdev;
363 	bool old_is_pci = ttm_mem_reg_is_pci(bdev, &bo->mem);
364 	bool new_is_pci = ttm_mem_reg_is_pci(bdev, mem);
365 	struct ttm_mem_type_manager *old_man = &bdev->man[bo->mem.mem_type];
366 	struct ttm_mem_type_manager *new_man = &bdev->man[mem->mem_type];
367 	int ret = 0;
368 
369 	if (old_is_pci || new_is_pci ||
370 	    ((mem->placement & bo->mem.placement & TTM_PL_MASK_CACHING) == 0))
371 		ttm_bo_unmap_virtual(bo);
372 
373 	/*
374 	 * Create and bind a ttm if required.
375 	 */
376 
377 	if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED) && (bo->ttm == NULL)) {
378 		ret = ttm_bo_add_ttm(bo, false);
379 		if (ret)
380 			goto out_err;
381 
382 		ret = ttm_tt_set_placement_caching(bo->ttm, mem->placement);
383 		if (ret)
384 			goto out_err;
385 
386 		if (mem->mem_type != TTM_PL_SYSTEM) {
387 			ret = ttm_tt_bind(bo->ttm, mem);
388 			if (ret)
389 				goto out_err;
390 		}
391 
392 		if (bo->mem.mem_type == TTM_PL_SYSTEM) {
393 			bo->mem = *mem;
394 			mem->mm_node = NULL;
395 			goto moved;
396 		}
397 
398 	}
399 
400 	if (bdev->driver->move_notify)
401 		bdev->driver->move_notify(bo, mem);
402 
403 	if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
404 	    !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
405 		ret = ttm_bo_move_ttm(bo, evict, no_wait, mem);
406 	else if (bdev->driver->move)
407 		ret = bdev->driver->move(bo, evict, interruptible,
408 					 no_wait, mem);
409 	else
410 		ret = ttm_bo_move_memcpy(bo, evict, no_wait, mem);
411 
412 	if (ret)
413 		goto out_err;
414 
415 moved:
416 	if (bo->evicted) {
417 		ret = bdev->driver->invalidate_caches(bdev, bo->mem.placement);
418 		if (ret)
419 			printk(KERN_ERR TTM_PFX "Can not flush read caches\n");
420 		bo->evicted = false;
421 	}
422 
423 	if (bo->mem.mm_node) {
424 		spin_lock(&bo->lock);
425 		bo->offset = (bo->mem.mm_node->start << PAGE_SHIFT) +
426 		    bdev->man[bo->mem.mem_type].gpu_offset;
427 		bo->cur_placement = bo->mem.placement;
428 		spin_unlock(&bo->lock);
429 	}
430 
431 	return 0;
432 
433 out_err:
434 	new_man = &bdev->man[bo->mem.mem_type];
435 	if ((new_man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm) {
436 		ttm_tt_unbind(bo->ttm);
437 		ttm_tt_destroy(bo->ttm);
438 		bo->ttm = NULL;
439 	}
440 
441 	return ret;
442 }
443 
444 /**
445  * If bo idle, remove from delayed- and lru lists, and unref.
446  * If not idle, and already on delayed list, do nothing.
447  * If not idle, and not on delayed list, put on delayed list,
448  *   up the list_kref and schedule a delayed list check.
449  */
450 
451 static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
452 {
453 	struct ttm_bo_device *bdev = bo->bdev;
454 	struct ttm_bo_global *glob = bo->glob;
455 	struct ttm_bo_driver *driver = bdev->driver;
456 	int ret;
457 
458 	spin_lock(&bo->lock);
459 	(void) ttm_bo_wait(bo, false, false, !remove_all);
460 
461 	if (!bo->sync_obj) {
462 		int put_count;
463 
464 		spin_unlock(&bo->lock);
465 
466 		spin_lock(&glob->lru_lock);
467 		put_count = ttm_bo_del_from_lru(bo);
468 
469 		ret = ttm_bo_reserve_locked(bo, false, false, false, 0);
470 		BUG_ON(ret);
471 		if (bo->ttm)
472 			ttm_tt_unbind(bo->ttm);
473 
474 		if (!list_empty(&bo->ddestroy)) {
475 			list_del_init(&bo->ddestroy);
476 			++put_count;
477 		}
478 		if (bo->mem.mm_node) {
479 			bo->mem.mm_node->private = NULL;
480 			drm_mm_put_block(bo->mem.mm_node);
481 			bo->mem.mm_node = NULL;
482 		}
483 		spin_unlock(&glob->lru_lock);
484 
485 		atomic_set(&bo->reserved, 0);
486 
487 		while (put_count--)
488 			kref_put(&bo->list_kref, ttm_bo_ref_bug);
489 
490 		return 0;
491 	}
492 
493 	spin_lock(&glob->lru_lock);
494 	if (list_empty(&bo->ddestroy)) {
495 		void *sync_obj = bo->sync_obj;
496 		void *sync_obj_arg = bo->sync_obj_arg;
497 
498 		kref_get(&bo->list_kref);
499 		list_add_tail(&bo->ddestroy, &bdev->ddestroy);
500 		spin_unlock(&glob->lru_lock);
501 		spin_unlock(&bo->lock);
502 
503 		if (sync_obj)
504 			driver->sync_obj_flush(sync_obj, sync_obj_arg);
505 		schedule_delayed_work(&bdev->wq,
506 				      ((HZ / 100) < 1) ? 1 : HZ / 100);
507 		ret = 0;
508 
509 	} else {
510 		spin_unlock(&glob->lru_lock);
511 		spin_unlock(&bo->lock);
512 		ret = -EBUSY;
513 	}
514 
515 	return ret;
516 }
517 
518 /**
519  * Traverse the delayed list, and call ttm_bo_cleanup_refs on all
520  * encountered buffers.
521  */
522 
523 static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)
524 {
525 	struct ttm_bo_global *glob = bdev->glob;
526 	struct ttm_buffer_object *entry, *nentry;
527 	struct list_head *list, *next;
528 	int ret;
529 
530 	spin_lock(&glob->lru_lock);
531 	list_for_each_safe(list, next, &bdev->ddestroy) {
532 		entry = list_entry(list, struct ttm_buffer_object, ddestroy);
533 		nentry = NULL;
534 
535 		/*
536 		 * Protect the next list entry from destruction while we
537 		 * unlock the lru_lock.
538 		 */
539 
540 		if (next != &bdev->ddestroy) {
541 			nentry = list_entry(next, struct ttm_buffer_object,
542 					    ddestroy);
543 			kref_get(&nentry->list_kref);
544 		}
545 		kref_get(&entry->list_kref);
546 
547 		spin_unlock(&glob->lru_lock);
548 		ret = ttm_bo_cleanup_refs(entry, remove_all);
549 		kref_put(&entry->list_kref, ttm_bo_release_list);
550 
551 		spin_lock(&glob->lru_lock);
552 		if (nentry) {
553 			bool next_onlist = !list_empty(next);
554 			spin_unlock(&glob->lru_lock);
555 			kref_put(&nentry->list_kref, ttm_bo_release_list);
556 			spin_lock(&glob->lru_lock);
557 			/*
558 			 * Someone might have raced us and removed the
559 			 * next entry from the list. We don't bother restarting
560 			 * list traversal.
561 			 */
562 
563 			if (!next_onlist)
564 				break;
565 		}
566 		if (ret)
567 			break;
568 	}
569 	ret = !list_empty(&bdev->ddestroy);
570 	spin_unlock(&glob->lru_lock);
571 
572 	return ret;
573 }
574 
575 static void ttm_bo_delayed_workqueue(struct work_struct *work)
576 {
577 	struct ttm_bo_device *bdev =
578 	    container_of(work, struct ttm_bo_device, wq.work);
579 
580 	if (ttm_bo_delayed_delete(bdev, false)) {
581 		schedule_delayed_work(&bdev->wq,
582 				      ((HZ / 100) < 1) ? 1 : HZ / 100);
583 	}
584 }
585 
586 static void ttm_bo_release(struct kref *kref)
587 {
588 	struct ttm_buffer_object *bo =
589 	    container_of(kref, struct ttm_buffer_object, kref);
590 	struct ttm_bo_device *bdev = bo->bdev;
591 
592 	if (likely(bo->vm_node != NULL)) {
593 		rb_erase(&bo->vm_rb, &bdev->addr_space_rb);
594 		drm_mm_put_block(bo->vm_node);
595 		bo->vm_node = NULL;
596 	}
597 	write_unlock(&bdev->vm_lock);
598 	ttm_bo_cleanup_refs(bo, false);
599 	kref_put(&bo->list_kref, ttm_bo_release_list);
600 	write_lock(&bdev->vm_lock);
601 }
602 
603 void ttm_bo_unref(struct ttm_buffer_object **p_bo)
604 {
605 	struct ttm_buffer_object *bo = *p_bo;
606 	struct ttm_bo_device *bdev = bo->bdev;
607 
608 	*p_bo = NULL;
609 	write_lock(&bdev->vm_lock);
610 	kref_put(&bo->kref, ttm_bo_release);
611 	write_unlock(&bdev->vm_lock);
612 }
613 EXPORT_SYMBOL(ttm_bo_unref);
614 
615 static int ttm_bo_evict(struct ttm_buffer_object *bo, bool interruptible,
616 			bool no_wait)
617 {
618 	struct ttm_bo_device *bdev = bo->bdev;
619 	struct ttm_bo_global *glob = bo->glob;
620 	struct ttm_mem_reg evict_mem;
621 	struct ttm_placement placement;
622 	int ret = 0;
623 
624 	spin_lock(&bo->lock);
625 	ret = ttm_bo_wait(bo, false, interruptible, no_wait);
626 	spin_unlock(&bo->lock);
627 
628 	if (unlikely(ret != 0)) {
629 		if (ret != -ERESTARTSYS) {
630 			printk(KERN_ERR TTM_PFX
631 			       "Failed to expire sync object before "
632 			       "buffer eviction.\n");
633 		}
634 		goto out;
635 	}
636 
637 	BUG_ON(!atomic_read(&bo->reserved));
638 
639 	evict_mem = bo->mem;
640 	evict_mem.mm_node = NULL;
641 
642 	placement.fpfn = 0;
643 	placement.lpfn = 0;
644 	placement.num_placement = 0;
645 	placement.num_busy_placement = 0;
646 	bdev->driver->evict_flags(bo, &placement);
647 	ret = ttm_bo_mem_space(bo, &placement, &evict_mem, interruptible,
648 				no_wait);
649 	if (ret) {
650 		if (ret != -ERESTARTSYS) {
651 			printk(KERN_ERR TTM_PFX
652 			       "Failed to find memory space for "
653 			       "buffer 0x%p eviction.\n", bo);
654 			ttm_bo_mem_space_debug(bo, &placement);
655 		}
656 		goto out;
657 	}
658 
659 	ret = ttm_bo_handle_move_mem(bo, &evict_mem, true, interruptible,
660 				     no_wait);
661 	if (ret) {
662 		if (ret != -ERESTARTSYS)
663 			printk(KERN_ERR TTM_PFX "Buffer eviction failed\n");
664 		spin_lock(&glob->lru_lock);
665 		if (evict_mem.mm_node) {
666 			evict_mem.mm_node->private = NULL;
667 			drm_mm_put_block(evict_mem.mm_node);
668 			evict_mem.mm_node = NULL;
669 		}
670 		spin_unlock(&glob->lru_lock);
671 		goto out;
672 	}
673 	bo->evicted = true;
674 out:
675 	return ret;
676 }
677 
678 static int ttm_mem_evict_first(struct ttm_bo_device *bdev,
679 				uint32_t mem_type,
680 				bool interruptible, bool no_wait)
681 {
682 	struct ttm_bo_global *glob = bdev->glob;
683 	struct ttm_mem_type_manager *man = &bdev->man[mem_type];
684 	struct ttm_buffer_object *bo;
685 	int ret, put_count = 0;
686 
687 retry:
688 	spin_lock(&glob->lru_lock);
689 	if (list_empty(&man->lru)) {
690 		spin_unlock(&glob->lru_lock);
691 		return -EBUSY;
692 	}
693 
694 	bo = list_first_entry(&man->lru, struct ttm_buffer_object, lru);
695 	kref_get(&bo->list_kref);
696 
697 	ret = ttm_bo_reserve_locked(bo, false, true, false, 0);
698 
699 	if (unlikely(ret == -EBUSY)) {
700 		spin_unlock(&glob->lru_lock);
701 		if (likely(!no_wait))
702 			ret = ttm_bo_wait_unreserved(bo, interruptible);
703 
704 		kref_put(&bo->list_kref, ttm_bo_release_list);
705 
706 		/**
707 		 * We *need* to retry after releasing the lru lock.
708 		 */
709 
710 		if (unlikely(ret != 0))
711 			return ret;
712 		goto retry;
713 	}
714 
715 	put_count = ttm_bo_del_from_lru(bo);
716 	spin_unlock(&glob->lru_lock);
717 
718 	BUG_ON(ret != 0);
719 
720 	while (put_count--)
721 		kref_put(&bo->list_kref, ttm_bo_ref_bug);
722 
723 	ret = ttm_bo_evict(bo, interruptible, no_wait);
724 	ttm_bo_unreserve(bo);
725 
726 	kref_put(&bo->list_kref, ttm_bo_release_list);
727 	return ret;
728 }
729 
730 static int ttm_bo_man_get_node(struct ttm_buffer_object *bo,
731 				struct ttm_mem_type_manager *man,
732 				struct ttm_placement *placement,
733 				struct ttm_mem_reg *mem,
734 				struct drm_mm_node **node)
735 {
736 	struct ttm_bo_global *glob = bo->glob;
737 	unsigned long lpfn;
738 	int ret;
739 
740 	lpfn = placement->lpfn;
741 	if (!lpfn)
742 		lpfn = man->size;
743 	*node = NULL;
744 	do {
745 		ret = drm_mm_pre_get(&man->manager);
746 		if (unlikely(ret))
747 			return ret;
748 
749 		spin_lock(&glob->lru_lock);
750 		*node = drm_mm_search_free_in_range(&man->manager,
751 					mem->num_pages, mem->page_alignment,
752 					placement->fpfn, lpfn, 1);
753 		if (unlikely(*node == NULL)) {
754 			spin_unlock(&glob->lru_lock);
755 			return 0;
756 		}
757 		*node = drm_mm_get_block_atomic_range(*node, mem->num_pages,
758 							mem->page_alignment,
759 							placement->fpfn,
760 							lpfn);
761 		spin_unlock(&glob->lru_lock);
762 	} while (*node == NULL);
763 	return 0;
764 }
765 
766 /**
767  * Repeatedly evict memory from the LRU for @mem_type until we create enough
768  * space, or we've evicted everything and there isn't enough space.
769  */
770 static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo,
771 					uint32_t mem_type,
772 					struct ttm_placement *placement,
773 					struct ttm_mem_reg *mem,
774 					bool interruptible, bool no_wait)
775 {
776 	struct ttm_bo_device *bdev = bo->bdev;
777 	struct ttm_bo_global *glob = bdev->glob;
778 	struct ttm_mem_type_manager *man = &bdev->man[mem_type];
779 	struct drm_mm_node *node;
780 	int ret;
781 
782 	do {
783 		ret = ttm_bo_man_get_node(bo, man, placement, mem, &node);
784 		if (unlikely(ret != 0))
785 			return ret;
786 		if (node)
787 			break;
788 		spin_lock(&glob->lru_lock);
789 		if (list_empty(&man->lru)) {
790 			spin_unlock(&glob->lru_lock);
791 			break;
792 		}
793 		spin_unlock(&glob->lru_lock);
794 		ret = ttm_mem_evict_first(bdev, mem_type, interruptible,
795 						no_wait);
796 		if (unlikely(ret != 0))
797 			return ret;
798 	} while (1);
799 	if (node == NULL)
800 		return -ENOMEM;
801 	mem->mm_node = node;
802 	mem->mem_type = mem_type;
803 	return 0;
804 }
805 
806 static uint32_t ttm_bo_select_caching(struct ttm_mem_type_manager *man,
807 				      uint32_t cur_placement,
808 				      uint32_t proposed_placement)
809 {
810 	uint32_t caching = proposed_placement & TTM_PL_MASK_CACHING;
811 	uint32_t result = proposed_placement & ~TTM_PL_MASK_CACHING;
812 
813 	/**
814 	 * Keep current caching if possible.
815 	 */
816 
817 	if ((cur_placement & caching) != 0)
818 		result |= (cur_placement & caching);
819 	else if ((man->default_caching & caching) != 0)
820 		result |= man->default_caching;
821 	else if ((TTM_PL_FLAG_CACHED & caching) != 0)
822 		result |= TTM_PL_FLAG_CACHED;
823 	else if ((TTM_PL_FLAG_WC & caching) != 0)
824 		result |= TTM_PL_FLAG_WC;
825 	else if ((TTM_PL_FLAG_UNCACHED & caching) != 0)
826 		result |= TTM_PL_FLAG_UNCACHED;
827 
828 	return result;
829 }
830 
831 static bool ttm_bo_mt_compatible(struct ttm_mem_type_manager *man,
832 				 bool disallow_fixed,
833 				 uint32_t mem_type,
834 				 uint32_t proposed_placement,
835 				 uint32_t *masked_placement)
836 {
837 	uint32_t cur_flags = ttm_bo_type_flags(mem_type);
838 
839 	if ((man->flags & TTM_MEMTYPE_FLAG_FIXED) && disallow_fixed)
840 		return false;
841 
842 	if ((cur_flags & proposed_placement & TTM_PL_MASK_MEM) == 0)
843 		return false;
844 
845 	if ((proposed_placement & man->available_caching) == 0)
846 		return false;
847 
848 	cur_flags |= (proposed_placement & man->available_caching);
849 
850 	*masked_placement = cur_flags;
851 	return true;
852 }
853 
854 /**
855  * Creates space for memory region @mem according to its type.
856  *
857  * This function first searches for free space in compatible memory types in
858  * the priority order defined by the driver.  If free space isn't found, then
859  * ttm_bo_mem_force_space is attempted in priority order to evict and find
860  * space.
861  */
862 int ttm_bo_mem_space(struct ttm_buffer_object *bo,
863 			struct ttm_placement *placement,
864 			struct ttm_mem_reg *mem,
865 			bool interruptible, bool no_wait)
866 {
867 	struct ttm_bo_device *bdev = bo->bdev;
868 	struct ttm_mem_type_manager *man;
869 	uint32_t mem_type = TTM_PL_SYSTEM;
870 	uint32_t cur_flags = 0;
871 	bool type_found = false;
872 	bool type_ok = false;
873 	bool has_erestartsys = false;
874 	struct drm_mm_node *node = NULL;
875 	int i, ret;
876 
877 	mem->mm_node = NULL;
878 	for (i = 0; i < placement->num_placement; ++i) {
879 		ret = ttm_mem_type_from_flags(placement->placement[i],
880 						&mem_type);
881 		if (ret)
882 			return ret;
883 		man = &bdev->man[mem_type];
884 
885 		type_ok = ttm_bo_mt_compatible(man,
886 						bo->type == ttm_bo_type_user,
887 						mem_type,
888 						placement->placement[i],
889 						&cur_flags);
890 
891 		if (!type_ok)
892 			continue;
893 
894 		cur_flags = ttm_bo_select_caching(man, bo->mem.placement,
895 						  cur_flags);
896 		/*
897 		 * Use the access and other non-mapping-related flag bits from
898 		 * the memory placement flags to the current flags
899 		 */
900 		ttm_flag_masked(&cur_flags, placement->placement[i],
901 				~TTM_PL_MASK_MEMTYPE);
902 
903 		if (mem_type == TTM_PL_SYSTEM)
904 			break;
905 
906 		if (man->has_type && man->use_type) {
907 			type_found = true;
908 			ret = ttm_bo_man_get_node(bo, man, placement, mem,
909 							&node);
910 			if (unlikely(ret))
911 				return ret;
912 		}
913 		if (node)
914 			break;
915 	}
916 
917 	if ((type_ok && (mem_type == TTM_PL_SYSTEM)) || node) {
918 		mem->mm_node = node;
919 		mem->mem_type = mem_type;
920 		mem->placement = cur_flags;
921 		if (node)
922 			node->private = bo;
923 		return 0;
924 	}
925 
926 	if (!type_found)
927 		return -EINVAL;
928 
929 	for (i = 0; i < placement->num_busy_placement; ++i) {
930 		ret = ttm_mem_type_from_flags(placement->busy_placement[i],
931 						&mem_type);
932 		if (ret)
933 			return ret;
934 		man = &bdev->man[mem_type];
935 		if (!man->has_type)
936 			continue;
937 		if (!ttm_bo_mt_compatible(man,
938 						bo->type == ttm_bo_type_user,
939 						mem_type,
940 						placement->busy_placement[i],
941 						&cur_flags))
942 			continue;
943 
944 		cur_flags = ttm_bo_select_caching(man, bo->mem.placement,
945 						  cur_flags);
946 		/*
947 		 * Use the access and other non-mapping-related flag bits from
948 		 * the memory placement flags to the current flags
949 		 */
950 		ttm_flag_masked(&cur_flags, placement->busy_placement[i],
951 				~TTM_PL_MASK_MEMTYPE);
952 
953 		ret = ttm_bo_mem_force_space(bo, mem_type, placement, mem,
954 						interruptible, no_wait);
955 		if (ret == 0 && mem->mm_node) {
956 			mem->placement = cur_flags;
957 			mem->mm_node->private = bo;
958 			return 0;
959 		}
960 		if (ret == -ERESTARTSYS)
961 			has_erestartsys = true;
962 	}
963 	ret = (has_erestartsys) ? -ERESTARTSYS : -ENOMEM;
964 	return ret;
965 }
966 EXPORT_SYMBOL(ttm_bo_mem_space);
967 
968 int ttm_bo_wait_cpu(struct ttm_buffer_object *bo, bool no_wait)
969 {
970 	if ((atomic_read(&bo->cpu_writers) > 0) && no_wait)
971 		return -EBUSY;
972 
973 	return wait_event_interruptible(bo->event_queue,
974 					atomic_read(&bo->cpu_writers) == 0);
975 }
976 EXPORT_SYMBOL(ttm_bo_wait_cpu);
977 
978 int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
979 			struct ttm_placement *placement,
980 			bool interruptible, bool no_wait)
981 {
982 	struct ttm_bo_global *glob = bo->glob;
983 	int ret = 0;
984 	struct ttm_mem_reg mem;
985 
986 	BUG_ON(!atomic_read(&bo->reserved));
987 
988 	/*
989 	 * FIXME: It's possible to pipeline buffer moves.
990 	 * Have the driver move function wait for idle when necessary,
991 	 * instead of doing it here.
992 	 */
993 	spin_lock(&bo->lock);
994 	ret = ttm_bo_wait(bo, false, interruptible, no_wait);
995 	spin_unlock(&bo->lock);
996 	if (ret)
997 		return ret;
998 	mem.num_pages = bo->num_pages;
999 	mem.size = mem.num_pages << PAGE_SHIFT;
1000 	mem.page_alignment = bo->mem.page_alignment;
1001 	/*
1002 	 * Determine where to move the buffer.
1003 	 */
1004 	ret = ttm_bo_mem_space(bo, placement, &mem, interruptible, no_wait);
1005 	if (ret)
1006 		goto out_unlock;
1007 	ret = ttm_bo_handle_move_mem(bo, &mem, false, interruptible, no_wait);
1008 out_unlock:
1009 	if (ret && mem.mm_node) {
1010 		spin_lock(&glob->lru_lock);
1011 		mem.mm_node->private = NULL;
1012 		drm_mm_put_block(mem.mm_node);
1013 		spin_unlock(&glob->lru_lock);
1014 	}
1015 	return ret;
1016 }
1017 
1018 static int ttm_bo_mem_compat(struct ttm_placement *placement,
1019 			     struct ttm_mem_reg *mem)
1020 {
1021 	int i;
1022 
1023 	for (i = 0; i < placement->num_placement; i++) {
1024 		if ((placement->placement[i] & mem->placement &
1025 			TTM_PL_MASK_CACHING) &&
1026 			(placement->placement[i] & mem->placement &
1027 			TTM_PL_MASK_MEM))
1028 			return i;
1029 	}
1030 	return -1;
1031 }
1032 
1033 int ttm_bo_validate(struct ttm_buffer_object *bo,
1034 			struct ttm_placement *placement,
1035 			bool interruptible, bool no_wait)
1036 {
1037 	int ret;
1038 
1039 	BUG_ON(!atomic_read(&bo->reserved));
1040 	/* Check that range is valid */
1041 	if (placement->lpfn || placement->fpfn)
1042 		if (placement->fpfn > placement->lpfn ||
1043 			(placement->lpfn - placement->fpfn) < bo->num_pages)
1044 			return -EINVAL;
1045 	/*
1046 	 * Check whether we need to move buffer.
1047 	 */
1048 	ret = ttm_bo_mem_compat(placement, &bo->mem);
1049 	if (ret < 0) {
1050 		ret = ttm_bo_move_buffer(bo, placement, interruptible, no_wait);
1051 		if (ret)
1052 			return ret;
1053 	} else {
1054 		/*
1055 		 * Use the access and other non-mapping-related flag bits from
1056 		 * the compatible memory placement flags to the active flags
1057 		 */
1058 		ttm_flag_masked(&bo->mem.placement, placement->placement[ret],
1059 				~TTM_PL_MASK_MEMTYPE);
1060 	}
1061 	/*
1062 	 * We might need to add a TTM.
1063 	 */
1064 	if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
1065 		ret = ttm_bo_add_ttm(bo, true);
1066 		if (ret)
1067 			return ret;
1068 	}
1069 	return 0;
1070 }
1071 EXPORT_SYMBOL(ttm_bo_validate);
1072 
1073 int ttm_bo_check_placement(struct ttm_buffer_object *bo,
1074 				struct ttm_placement *placement)
1075 {
1076 	int i;
1077 
1078 	if (placement->fpfn || placement->lpfn) {
1079 		if (bo->mem.num_pages > (placement->lpfn - placement->fpfn)) {
1080 			printk(KERN_ERR TTM_PFX "Page number range to small "
1081 				"Need %lu pages, range is [%u, %u]\n",
1082 				bo->mem.num_pages, placement->fpfn,
1083 				placement->lpfn);
1084 			return -EINVAL;
1085 		}
1086 	}
1087 	for (i = 0; i < placement->num_placement; i++) {
1088 		if (!capable(CAP_SYS_ADMIN)) {
1089 			if (placement->placement[i] & TTM_PL_FLAG_NO_EVICT) {
1090 				printk(KERN_ERR TTM_PFX "Need to be root to "
1091 					"modify NO_EVICT status.\n");
1092 				return -EINVAL;
1093 			}
1094 		}
1095 	}
1096 	for (i = 0; i < placement->num_busy_placement; i++) {
1097 		if (!capable(CAP_SYS_ADMIN)) {
1098 			if (placement->busy_placement[i] & TTM_PL_FLAG_NO_EVICT) {
1099 				printk(KERN_ERR TTM_PFX "Need to be root to "
1100 					"modify NO_EVICT status.\n");
1101 				return -EINVAL;
1102 			}
1103 		}
1104 	}
1105 	return 0;
1106 }
1107 
1108 int ttm_bo_init(struct ttm_bo_device *bdev,
1109 		struct ttm_buffer_object *bo,
1110 		unsigned long size,
1111 		enum ttm_bo_type type,
1112 		struct ttm_placement *placement,
1113 		uint32_t page_alignment,
1114 		unsigned long buffer_start,
1115 		bool interruptible,
1116 		struct file *persistant_swap_storage,
1117 		size_t acc_size,
1118 		void (*destroy) (struct ttm_buffer_object *))
1119 {
1120 	int ret = 0;
1121 	unsigned long num_pages;
1122 
1123 	size += buffer_start & ~PAGE_MASK;
1124 	num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
1125 	if (num_pages == 0) {
1126 		printk(KERN_ERR TTM_PFX "Illegal buffer object size.\n");
1127 		return -EINVAL;
1128 	}
1129 	bo->destroy = destroy;
1130 
1131 	spin_lock_init(&bo->lock);
1132 	kref_init(&bo->kref);
1133 	kref_init(&bo->list_kref);
1134 	atomic_set(&bo->cpu_writers, 0);
1135 	atomic_set(&bo->reserved, 1);
1136 	init_waitqueue_head(&bo->event_queue);
1137 	INIT_LIST_HEAD(&bo->lru);
1138 	INIT_LIST_HEAD(&bo->ddestroy);
1139 	INIT_LIST_HEAD(&bo->swap);
1140 	bo->bdev = bdev;
1141 	bo->glob = bdev->glob;
1142 	bo->type = type;
1143 	bo->num_pages = num_pages;
1144 	bo->mem.size = num_pages << PAGE_SHIFT;
1145 	bo->mem.mem_type = TTM_PL_SYSTEM;
1146 	bo->mem.num_pages = bo->num_pages;
1147 	bo->mem.mm_node = NULL;
1148 	bo->mem.page_alignment = page_alignment;
1149 	bo->buffer_start = buffer_start & PAGE_MASK;
1150 	bo->priv_flags = 0;
1151 	bo->mem.placement = (TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED);
1152 	bo->seq_valid = false;
1153 	bo->persistant_swap_storage = persistant_swap_storage;
1154 	bo->acc_size = acc_size;
1155 	atomic_inc(&bo->glob->bo_count);
1156 
1157 	ret = ttm_bo_check_placement(bo, placement);
1158 	if (unlikely(ret != 0))
1159 		goto out_err;
1160 
1161 	/*
1162 	 * For ttm_bo_type_device buffers, allocate
1163 	 * address space from the device.
1164 	 */
1165 	if (bo->type == ttm_bo_type_device) {
1166 		ret = ttm_bo_setup_vm(bo);
1167 		if (ret)
1168 			goto out_err;
1169 	}
1170 
1171 	ret = ttm_bo_validate(bo, placement, interruptible, false);
1172 	if (ret)
1173 		goto out_err;
1174 
1175 	ttm_bo_unreserve(bo);
1176 	return 0;
1177 
1178 out_err:
1179 	ttm_bo_unreserve(bo);
1180 	ttm_bo_unref(&bo);
1181 
1182 	return ret;
1183 }
1184 EXPORT_SYMBOL(ttm_bo_init);
1185 
1186 static inline size_t ttm_bo_size(struct ttm_bo_global *glob,
1187 				 unsigned long num_pages)
1188 {
1189 	size_t page_array_size = (num_pages * sizeof(void *) + PAGE_SIZE - 1) &
1190 	    PAGE_MASK;
1191 
1192 	return glob->ttm_bo_size + 2 * page_array_size;
1193 }
1194 
1195 int ttm_bo_create(struct ttm_bo_device *bdev,
1196 			unsigned long size,
1197 			enum ttm_bo_type type,
1198 			struct ttm_placement *placement,
1199 			uint32_t page_alignment,
1200 			unsigned long buffer_start,
1201 			bool interruptible,
1202 			struct file *persistant_swap_storage,
1203 			struct ttm_buffer_object **p_bo)
1204 {
1205 	struct ttm_buffer_object *bo;
1206 	struct ttm_mem_global *mem_glob = bdev->glob->mem_glob;
1207 	int ret;
1208 
1209 	size_t acc_size =
1210 	    ttm_bo_size(bdev->glob, (size + PAGE_SIZE - 1) >> PAGE_SHIFT);
1211 	ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false);
1212 	if (unlikely(ret != 0))
1213 		return ret;
1214 
1215 	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
1216 
1217 	if (unlikely(bo == NULL)) {
1218 		ttm_mem_global_free(mem_glob, acc_size);
1219 		return -ENOMEM;
1220 	}
1221 
1222 	ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment,
1223 				buffer_start, interruptible,
1224 				persistant_swap_storage, acc_size, NULL);
1225 	if (likely(ret == 0))
1226 		*p_bo = bo;
1227 
1228 	return ret;
1229 }
1230 
1231 static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev,
1232 					unsigned mem_type, bool allow_errors)
1233 {
1234 	struct ttm_mem_type_manager *man = &bdev->man[mem_type];
1235 	struct ttm_bo_global *glob = bdev->glob;
1236 	int ret;
1237 
1238 	/*
1239 	 * Can't use standard list traversal since we're unlocking.
1240 	 */
1241 
1242 	spin_lock(&glob->lru_lock);
1243 	while (!list_empty(&man->lru)) {
1244 		spin_unlock(&glob->lru_lock);
1245 		ret = ttm_mem_evict_first(bdev, mem_type, false, false);
1246 		if (ret) {
1247 			if (allow_errors) {
1248 				return ret;
1249 			} else {
1250 				printk(KERN_ERR TTM_PFX
1251 					"Cleanup eviction failed\n");
1252 			}
1253 		}
1254 		spin_lock(&glob->lru_lock);
1255 	}
1256 	spin_unlock(&glob->lru_lock);
1257 	return 0;
1258 }
1259 
1260 int ttm_bo_clean_mm(struct ttm_bo_device *bdev, unsigned mem_type)
1261 {
1262 	struct ttm_bo_global *glob = bdev->glob;
1263 	struct ttm_mem_type_manager *man;
1264 	int ret = -EINVAL;
1265 
1266 	if (mem_type >= TTM_NUM_MEM_TYPES) {
1267 		printk(KERN_ERR TTM_PFX "Illegal memory type %d\n", mem_type);
1268 		return ret;
1269 	}
1270 	man = &bdev->man[mem_type];
1271 
1272 	if (!man->has_type) {
1273 		printk(KERN_ERR TTM_PFX "Trying to take down uninitialized "
1274 		       "memory manager type %u\n", mem_type);
1275 		return ret;
1276 	}
1277 
1278 	man->use_type = false;
1279 	man->has_type = false;
1280 
1281 	ret = 0;
1282 	if (mem_type > 0) {
1283 		ttm_bo_force_list_clean(bdev, mem_type, false);
1284 
1285 		spin_lock(&glob->lru_lock);
1286 		if (drm_mm_clean(&man->manager))
1287 			drm_mm_takedown(&man->manager);
1288 		else
1289 			ret = -EBUSY;
1290 
1291 		spin_unlock(&glob->lru_lock);
1292 	}
1293 
1294 	return ret;
1295 }
1296 EXPORT_SYMBOL(ttm_bo_clean_mm);
1297 
1298 int ttm_bo_evict_mm(struct ttm_bo_device *bdev, unsigned mem_type)
1299 {
1300 	struct ttm_mem_type_manager *man = &bdev->man[mem_type];
1301 
1302 	if (mem_type == 0 || mem_type >= TTM_NUM_MEM_TYPES) {
1303 		printk(KERN_ERR TTM_PFX
1304 		       "Illegal memory manager memory type %u.\n",
1305 		       mem_type);
1306 		return -EINVAL;
1307 	}
1308 
1309 	if (!man->has_type) {
1310 		printk(KERN_ERR TTM_PFX
1311 		       "Memory type %u has not been initialized.\n",
1312 		       mem_type);
1313 		return 0;
1314 	}
1315 
1316 	return ttm_bo_force_list_clean(bdev, mem_type, true);
1317 }
1318 EXPORT_SYMBOL(ttm_bo_evict_mm);
1319 
1320 int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type,
1321 			unsigned long p_size)
1322 {
1323 	int ret = -EINVAL;
1324 	struct ttm_mem_type_manager *man;
1325 
1326 	if (type >= TTM_NUM_MEM_TYPES) {
1327 		printk(KERN_ERR TTM_PFX "Illegal memory type %d\n", type);
1328 		return ret;
1329 	}
1330 
1331 	man = &bdev->man[type];
1332 	if (man->has_type) {
1333 		printk(KERN_ERR TTM_PFX
1334 		       "Memory manager already initialized for type %d\n",
1335 		       type);
1336 		return ret;
1337 	}
1338 
1339 	ret = bdev->driver->init_mem_type(bdev, type, man);
1340 	if (ret)
1341 		return ret;
1342 
1343 	ret = 0;
1344 	if (type != TTM_PL_SYSTEM) {
1345 		if (!p_size) {
1346 			printk(KERN_ERR TTM_PFX
1347 			       "Zero size memory manager type %d\n",
1348 			       type);
1349 			return ret;
1350 		}
1351 		ret = drm_mm_init(&man->manager, 0, p_size);
1352 		if (ret)
1353 			return ret;
1354 	}
1355 	man->has_type = true;
1356 	man->use_type = true;
1357 	man->size = p_size;
1358 
1359 	INIT_LIST_HEAD(&man->lru);
1360 
1361 	return 0;
1362 }
1363 EXPORT_SYMBOL(ttm_bo_init_mm);
1364 
1365 static void ttm_bo_global_kobj_release(struct kobject *kobj)
1366 {
1367 	struct ttm_bo_global *glob =
1368 		container_of(kobj, struct ttm_bo_global, kobj);
1369 
1370 	ttm_mem_unregister_shrink(glob->mem_glob, &glob->shrink);
1371 	__free_page(glob->dummy_read_page);
1372 	kfree(glob);
1373 }
1374 
1375 void ttm_bo_global_release(struct ttm_global_reference *ref)
1376 {
1377 	struct ttm_bo_global *glob = ref->object;
1378 
1379 	kobject_del(&glob->kobj);
1380 	kobject_put(&glob->kobj);
1381 }
1382 EXPORT_SYMBOL(ttm_bo_global_release);
1383 
1384 int ttm_bo_global_init(struct ttm_global_reference *ref)
1385 {
1386 	struct ttm_bo_global_ref *bo_ref =
1387 		container_of(ref, struct ttm_bo_global_ref, ref);
1388 	struct ttm_bo_global *glob = ref->object;
1389 	int ret;
1390 
1391 	mutex_init(&glob->device_list_mutex);
1392 	spin_lock_init(&glob->lru_lock);
1393 	glob->mem_glob = bo_ref->mem_glob;
1394 	glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
1395 
1396 	if (unlikely(glob->dummy_read_page == NULL)) {
1397 		ret = -ENOMEM;
1398 		goto out_no_drp;
1399 	}
1400 
1401 	INIT_LIST_HEAD(&glob->swap_lru);
1402 	INIT_LIST_HEAD(&glob->device_list);
1403 
1404 	ttm_mem_init_shrink(&glob->shrink, ttm_bo_swapout);
1405 	ret = ttm_mem_register_shrink(glob->mem_glob, &glob->shrink);
1406 	if (unlikely(ret != 0)) {
1407 		printk(KERN_ERR TTM_PFX
1408 		       "Could not register buffer object swapout.\n");
1409 		goto out_no_shrink;
1410 	}
1411 
1412 	glob->ttm_bo_extra_size =
1413 		ttm_round_pot(sizeof(struct ttm_tt)) +
1414 		ttm_round_pot(sizeof(struct ttm_backend));
1415 
1416 	glob->ttm_bo_size = glob->ttm_bo_extra_size +
1417 		ttm_round_pot(sizeof(struct ttm_buffer_object));
1418 
1419 	atomic_set(&glob->bo_count, 0);
1420 
1421 	kobject_init(&glob->kobj, &ttm_bo_glob_kobj_type);
1422 	ret = kobject_add(&glob->kobj, ttm_get_kobj(), "buffer_objects");
1423 	if (unlikely(ret != 0))
1424 		kobject_put(&glob->kobj);
1425 	return ret;
1426 out_no_shrink:
1427 	__free_page(glob->dummy_read_page);
1428 out_no_drp:
1429 	kfree(glob);
1430 	return ret;
1431 }
1432 EXPORT_SYMBOL(ttm_bo_global_init);
1433 
1434 
1435 int ttm_bo_device_release(struct ttm_bo_device *bdev)
1436 {
1437 	int ret = 0;
1438 	unsigned i = TTM_NUM_MEM_TYPES;
1439 	struct ttm_mem_type_manager *man;
1440 	struct ttm_bo_global *glob = bdev->glob;
1441 
1442 	while (i--) {
1443 		man = &bdev->man[i];
1444 		if (man->has_type) {
1445 			man->use_type = false;
1446 			if ((i != TTM_PL_SYSTEM) && ttm_bo_clean_mm(bdev, i)) {
1447 				ret = -EBUSY;
1448 				printk(KERN_ERR TTM_PFX
1449 				       "DRM memory manager type %d "
1450 				       "is not clean.\n", i);
1451 			}
1452 			man->has_type = false;
1453 		}
1454 	}
1455 
1456 	mutex_lock(&glob->device_list_mutex);
1457 	list_del(&bdev->device_list);
1458 	mutex_unlock(&glob->device_list_mutex);
1459 
1460 	if (!cancel_delayed_work(&bdev->wq))
1461 		flush_scheduled_work();
1462 
1463 	while (ttm_bo_delayed_delete(bdev, true))
1464 		;
1465 
1466 	spin_lock(&glob->lru_lock);
1467 	if (list_empty(&bdev->ddestroy))
1468 		TTM_DEBUG("Delayed destroy list was clean\n");
1469 
1470 	if (list_empty(&bdev->man[0].lru))
1471 		TTM_DEBUG("Swap list was clean\n");
1472 	spin_unlock(&glob->lru_lock);
1473 
1474 	BUG_ON(!drm_mm_clean(&bdev->addr_space_mm));
1475 	write_lock(&bdev->vm_lock);
1476 	drm_mm_takedown(&bdev->addr_space_mm);
1477 	write_unlock(&bdev->vm_lock);
1478 
1479 	return ret;
1480 }
1481 EXPORT_SYMBOL(ttm_bo_device_release);
1482 
1483 int ttm_bo_device_init(struct ttm_bo_device *bdev,
1484 		       struct ttm_bo_global *glob,
1485 		       struct ttm_bo_driver *driver,
1486 		       uint64_t file_page_offset,
1487 		       bool need_dma32)
1488 {
1489 	int ret = -EINVAL;
1490 
1491 	rwlock_init(&bdev->vm_lock);
1492 	bdev->driver = driver;
1493 
1494 	memset(bdev->man, 0, sizeof(bdev->man));
1495 
1496 	/*
1497 	 * Initialize the system memory buffer type.
1498 	 * Other types need to be driver / IOCTL initialized.
1499 	 */
1500 	ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
1501 	if (unlikely(ret != 0))
1502 		goto out_no_sys;
1503 
1504 	bdev->addr_space_rb = RB_ROOT;
1505 	ret = drm_mm_init(&bdev->addr_space_mm, file_page_offset, 0x10000000);
1506 	if (unlikely(ret != 0))
1507 		goto out_no_addr_mm;
1508 
1509 	INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue);
1510 	bdev->nice_mode = true;
1511 	INIT_LIST_HEAD(&bdev->ddestroy);
1512 	bdev->dev_mapping = NULL;
1513 	bdev->glob = glob;
1514 	bdev->need_dma32 = need_dma32;
1515 
1516 	mutex_lock(&glob->device_list_mutex);
1517 	list_add_tail(&bdev->device_list, &glob->device_list);
1518 	mutex_unlock(&glob->device_list_mutex);
1519 
1520 	return 0;
1521 out_no_addr_mm:
1522 	ttm_bo_clean_mm(bdev, 0);
1523 out_no_sys:
1524 	return ret;
1525 }
1526 EXPORT_SYMBOL(ttm_bo_device_init);
1527 
1528 /*
1529  * buffer object vm functions.
1530  */
1531 
1532 bool ttm_mem_reg_is_pci(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
1533 {
1534 	struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
1535 
1536 	if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
1537 		if (mem->mem_type == TTM_PL_SYSTEM)
1538 			return false;
1539 
1540 		if (man->flags & TTM_MEMTYPE_FLAG_CMA)
1541 			return false;
1542 
1543 		if (mem->placement & TTM_PL_FLAG_CACHED)
1544 			return false;
1545 	}
1546 	return true;
1547 }
1548 
1549 int ttm_bo_pci_offset(struct ttm_bo_device *bdev,
1550 		      struct ttm_mem_reg *mem,
1551 		      unsigned long *bus_base,
1552 		      unsigned long *bus_offset, unsigned long *bus_size)
1553 {
1554 	struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
1555 
1556 	*bus_size = 0;
1557 	if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
1558 		return -EINVAL;
1559 
1560 	if (ttm_mem_reg_is_pci(bdev, mem)) {
1561 		*bus_offset = mem->mm_node->start << PAGE_SHIFT;
1562 		*bus_size = mem->num_pages << PAGE_SHIFT;
1563 		*bus_base = man->io_offset;
1564 	}
1565 
1566 	return 0;
1567 }
1568 
1569 void ttm_bo_unmap_virtual(struct ttm_buffer_object *bo)
1570 {
1571 	struct ttm_bo_device *bdev = bo->bdev;
1572 	loff_t offset = (loff_t) bo->addr_space_offset;
1573 	loff_t holelen = ((loff_t) bo->mem.num_pages) << PAGE_SHIFT;
1574 
1575 	if (!bdev->dev_mapping)
1576 		return;
1577 
1578 	unmap_mapping_range(bdev->dev_mapping, offset, holelen, 1);
1579 }
1580 EXPORT_SYMBOL(ttm_bo_unmap_virtual);
1581 
1582 static void ttm_bo_vm_insert_rb(struct ttm_buffer_object *bo)
1583 {
1584 	struct ttm_bo_device *bdev = bo->bdev;
1585 	struct rb_node **cur = &bdev->addr_space_rb.rb_node;
1586 	struct rb_node *parent = NULL;
1587 	struct ttm_buffer_object *cur_bo;
1588 	unsigned long offset = bo->vm_node->start;
1589 	unsigned long cur_offset;
1590 
1591 	while (*cur) {
1592 		parent = *cur;
1593 		cur_bo = rb_entry(parent, struct ttm_buffer_object, vm_rb);
1594 		cur_offset = cur_bo->vm_node->start;
1595 		if (offset < cur_offset)
1596 			cur = &parent->rb_left;
1597 		else if (offset > cur_offset)
1598 			cur = &parent->rb_right;
1599 		else
1600 			BUG();
1601 	}
1602 
1603 	rb_link_node(&bo->vm_rb, parent, cur);
1604 	rb_insert_color(&bo->vm_rb, &bdev->addr_space_rb);
1605 }
1606 
1607 /**
1608  * ttm_bo_setup_vm:
1609  *
1610  * @bo: the buffer to allocate address space for
1611  *
1612  * Allocate address space in the drm device so that applications
1613  * can mmap the buffer and access the contents. This only
1614  * applies to ttm_bo_type_device objects as others are not
1615  * placed in the drm device address space.
1616  */
1617 
1618 static int ttm_bo_setup_vm(struct ttm_buffer_object *bo)
1619 {
1620 	struct ttm_bo_device *bdev = bo->bdev;
1621 	int ret;
1622 
1623 retry_pre_get:
1624 	ret = drm_mm_pre_get(&bdev->addr_space_mm);
1625 	if (unlikely(ret != 0))
1626 		return ret;
1627 
1628 	write_lock(&bdev->vm_lock);
1629 	bo->vm_node = drm_mm_search_free(&bdev->addr_space_mm,
1630 					 bo->mem.num_pages, 0, 0);
1631 
1632 	if (unlikely(bo->vm_node == NULL)) {
1633 		ret = -ENOMEM;
1634 		goto out_unlock;
1635 	}
1636 
1637 	bo->vm_node = drm_mm_get_block_atomic(bo->vm_node,
1638 					      bo->mem.num_pages, 0);
1639 
1640 	if (unlikely(bo->vm_node == NULL)) {
1641 		write_unlock(&bdev->vm_lock);
1642 		goto retry_pre_get;
1643 	}
1644 
1645 	ttm_bo_vm_insert_rb(bo);
1646 	write_unlock(&bdev->vm_lock);
1647 	bo->addr_space_offset = ((uint64_t) bo->vm_node->start) << PAGE_SHIFT;
1648 
1649 	return 0;
1650 out_unlock:
1651 	write_unlock(&bdev->vm_lock);
1652 	return ret;
1653 }
1654 
1655 int ttm_bo_wait(struct ttm_buffer_object *bo,
1656 		bool lazy, bool interruptible, bool no_wait)
1657 {
1658 	struct ttm_bo_driver *driver = bo->bdev->driver;
1659 	void *sync_obj;
1660 	void *sync_obj_arg;
1661 	int ret = 0;
1662 
1663 	if (likely(bo->sync_obj == NULL))
1664 		return 0;
1665 
1666 	while (bo->sync_obj) {
1667 
1668 		if (driver->sync_obj_signaled(bo->sync_obj, bo->sync_obj_arg)) {
1669 			void *tmp_obj = bo->sync_obj;
1670 			bo->sync_obj = NULL;
1671 			clear_bit(TTM_BO_PRIV_FLAG_MOVING, &bo->priv_flags);
1672 			spin_unlock(&bo->lock);
1673 			driver->sync_obj_unref(&tmp_obj);
1674 			spin_lock(&bo->lock);
1675 			continue;
1676 		}
1677 
1678 		if (no_wait)
1679 			return -EBUSY;
1680 
1681 		sync_obj = driver->sync_obj_ref(bo->sync_obj);
1682 		sync_obj_arg = bo->sync_obj_arg;
1683 		spin_unlock(&bo->lock);
1684 		ret = driver->sync_obj_wait(sync_obj, sync_obj_arg,
1685 					    lazy, interruptible);
1686 		if (unlikely(ret != 0)) {
1687 			driver->sync_obj_unref(&sync_obj);
1688 			spin_lock(&bo->lock);
1689 			return ret;
1690 		}
1691 		spin_lock(&bo->lock);
1692 		if (likely(bo->sync_obj == sync_obj &&
1693 			   bo->sync_obj_arg == sync_obj_arg)) {
1694 			void *tmp_obj = bo->sync_obj;
1695 			bo->sync_obj = NULL;
1696 			clear_bit(TTM_BO_PRIV_FLAG_MOVING,
1697 				  &bo->priv_flags);
1698 			spin_unlock(&bo->lock);
1699 			driver->sync_obj_unref(&sync_obj);
1700 			driver->sync_obj_unref(&tmp_obj);
1701 			spin_lock(&bo->lock);
1702 		} else {
1703 			spin_unlock(&bo->lock);
1704 			driver->sync_obj_unref(&sync_obj);
1705 			spin_lock(&bo->lock);
1706 		}
1707 	}
1708 	return 0;
1709 }
1710 EXPORT_SYMBOL(ttm_bo_wait);
1711 
1712 void ttm_bo_unblock_reservation(struct ttm_buffer_object *bo)
1713 {
1714 	atomic_set(&bo->reserved, 0);
1715 	wake_up_all(&bo->event_queue);
1716 }
1717 
1718 int ttm_bo_block_reservation(struct ttm_buffer_object *bo, bool interruptible,
1719 			     bool no_wait)
1720 {
1721 	int ret;
1722 
1723 	while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) {
1724 		if (no_wait)
1725 			return -EBUSY;
1726 		else if (interruptible) {
1727 			ret = wait_event_interruptible
1728 			    (bo->event_queue, atomic_read(&bo->reserved) == 0);
1729 			if (unlikely(ret != 0))
1730 				return ret;
1731 		} else {
1732 			wait_event(bo->event_queue,
1733 				   atomic_read(&bo->reserved) == 0);
1734 		}
1735 	}
1736 	return 0;
1737 }
1738 
1739 int ttm_bo_synccpu_write_grab(struct ttm_buffer_object *bo, bool no_wait)
1740 {
1741 	int ret = 0;
1742 
1743 	/*
1744 	 * Using ttm_bo_reserve instead of ttm_bo_block_reservation
1745 	 * makes sure the lru lists are updated.
1746 	 */
1747 
1748 	ret = ttm_bo_reserve(bo, true, no_wait, false, 0);
1749 	if (unlikely(ret != 0))
1750 		return ret;
1751 	spin_lock(&bo->lock);
1752 	ret = ttm_bo_wait(bo, false, true, no_wait);
1753 	spin_unlock(&bo->lock);
1754 	if (likely(ret == 0))
1755 		atomic_inc(&bo->cpu_writers);
1756 	ttm_bo_unreserve(bo);
1757 	return ret;
1758 }
1759 EXPORT_SYMBOL(ttm_bo_synccpu_write_grab);
1760 
1761 void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo)
1762 {
1763 	if (atomic_dec_and_test(&bo->cpu_writers))
1764 		wake_up_all(&bo->event_queue);
1765 }
1766 EXPORT_SYMBOL(ttm_bo_synccpu_write_release);
1767 
1768 /**
1769  * A buffer object shrink method that tries to swap out the first
1770  * buffer object on the bo_global::swap_lru list.
1771  */
1772 
1773 static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
1774 {
1775 	struct ttm_bo_global *glob =
1776 	    container_of(shrink, struct ttm_bo_global, shrink);
1777 	struct ttm_buffer_object *bo;
1778 	int ret = -EBUSY;
1779 	int put_count;
1780 	uint32_t swap_placement = (TTM_PL_FLAG_CACHED | TTM_PL_FLAG_SYSTEM);
1781 
1782 	spin_lock(&glob->lru_lock);
1783 	while (ret == -EBUSY) {
1784 		if (unlikely(list_empty(&glob->swap_lru))) {
1785 			spin_unlock(&glob->lru_lock);
1786 			return -EBUSY;
1787 		}
1788 
1789 		bo = list_first_entry(&glob->swap_lru,
1790 				      struct ttm_buffer_object, swap);
1791 		kref_get(&bo->list_kref);
1792 
1793 		/**
1794 		 * Reserve buffer. Since we unlock while sleeping, we need
1795 		 * to re-check that nobody removed us from the swap-list while
1796 		 * we slept.
1797 		 */
1798 
1799 		ret = ttm_bo_reserve_locked(bo, false, true, false, 0);
1800 		if (unlikely(ret == -EBUSY)) {
1801 			spin_unlock(&glob->lru_lock);
1802 			ttm_bo_wait_unreserved(bo, false);
1803 			kref_put(&bo->list_kref, ttm_bo_release_list);
1804 			spin_lock(&glob->lru_lock);
1805 		}
1806 	}
1807 
1808 	BUG_ON(ret != 0);
1809 	put_count = ttm_bo_del_from_lru(bo);
1810 	spin_unlock(&glob->lru_lock);
1811 
1812 	while (put_count--)
1813 		kref_put(&bo->list_kref, ttm_bo_ref_bug);
1814 
1815 	/**
1816 	 * Wait for GPU, then move to system cached.
1817 	 */
1818 
1819 	spin_lock(&bo->lock);
1820 	ret = ttm_bo_wait(bo, false, false, false);
1821 	spin_unlock(&bo->lock);
1822 
1823 	if (unlikely(ret != 0))
1824 		goto out;
1825 
1826 	if ((bo->mem.placement & swap_placement) != swap_placement) {
1827 		struct ttm_mem_reg evict_mem;
1828 
1829 		evict_mem = bo->mem;
1830 		evict_mem.mm_node = NULL;
1831 		evict_mem.placement = TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED;
1832 		evict_mem.mem_type = TTM_PL_SYSTEM;
1833 
1834 		ret = ttm_bo_handle_move_mem(bo, &evict_mem, true,
1835 					     false, false);
1836 		if (unlikely(ret != 0))
1837 			goto out;
1838 	}
1839 
1840 	ttm_bo_unmap_virtual(bo);
1841 
1842 	/**
1843 	 * Swap out. Buffer will be swapped in again as soon as
1844 	 * anyone tries to access a ttm page.
1845 	 */
1846 
1847 	ret = ttm_tt_swapout(bo->ttm, bo->persistant_swap_storage);
1848 out:
1849 
1850 	/**
1851 	 *
1852 	 * Unreserve without putting on LRU to avoid swapping out an
1853 	 * already swapped buffer.
1854 	 */
1855 
1856 	atomic_set(&bo->reserved, 0);
1857 	wake_up_all(&bo->event_queue);
1858 	kref_put(&bo->list_kref, ttm_bo_release_list);
1859 	return ret;
1860 }
1861 
1862 void ttm_bo_swapout_all(struct ttm_bo_device *bdev)
1863 {
1864 	while (ttm_bo_swapout(&bdev->glob->shrink) == 0)
1865 		;
1866 }
1867