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