xref: /dragonfly/sys/dev/drm/i915/i915_gem_shrinker.c (revision 3ea159d2)
1 /*
2  * Copyright © 2008-2015 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  */
24 
25 #include <linux/oom.h>
26 #include <linux/shmem_fs.h>
27 #include <linux/slab.h>
28 #include <linux/swap.h>
29 #include <linux/pci.h>
30 #include <linux/dma-buf.h>
31 #include <linux/vmalloc.h>
32 #include <drm/drmP.h>
33 #include <drm/i915_drm.h>
34 
35 #include "i915_drv.h"
36 #include "i915_trace.h"
37 
38 static bool shrinker_lock(struct drm_i915_private *dev_priv, bool *unlock)
39 {
40 	switch (mutex_trylock_recursive(&dev_priv->drm.struct_mutex)) {
41 	case MUTEX_TRYLOCK_RECURSIVE:
42 		*unlock = false;
43 		return true;
44 
45 	case MUTEX_TRYLOCK_FAILED:
46 		*unlock = false;
47 		preempt_disable();
48 		do {
49 			cpu_relax();
50 			if (mutex_trylock(&dev_priv->drm.struct_mutex)) {
51 				*unlock = true;
52 				break;
53 			}
54 		} while (!need_resched());
55 		preempt_enable();
56 		return *unlock;
57 
58 	case MUTEX_TRYLOCK_SUCCESS:
59 		*unlock = true;
60 		return true;
61 	}
62 
63 	BUG();
64 }
65 
66 static void shrinker_unlock(struct drm_i915_private *dev_priv, bool unlock)
67 {
68 	if (!unlock)
69 		return;
70 
71 	mutex_unlock(&dev_priv->drm.struct_mutex);
72 }
73 
74 static bool swap_available(void)
75 {
76 	return get_nr_swap_pages() > 0;
77 }
78 
79 static bool can_release_pages(struct drm_i915_gem_object *obj)
80 {
81 	/* Consider only shrinkable ojects. */
82 	if (!i915_gem_object_is_shrinkable(obj))
83 		return false;
84 
85 	/* Only report true if by unbinding the object and putting its pages
86 	 * we can actually make forward progress towards freeing physical
87 	 * pages.
88 	 *
89 	 * If the pages are pinned for any other reason than being bound
90 	 * to the GPU, simply unbinding from the GPU is not going to succeed
91 	 * in releasing our pin count on the pages themselves.
92 	 */
93 	if (atomic_read(&obj->mm.pages_pin_count) > obj->bind_count)
94 		return false;
95 
96 	/* If any vma are "permanently" pinned, it will prevent us from
97 	 * reclaiming the obj->mm.pages. We only allow scanout objects to claim
98 	 * a permanent pin, along with a few others like the context objects.
99 	 * To simplify the scan, and to avoid walking the list of vma under the
100 	 * object, we just check the count of its permanently pinned.
101 	 */
102 	if (READ_ONCE(obj->pin_global))
103 		return false;
104 
105 	/* We can only return physical pages to the system if we can either
106 	 * discard the contents (because the user has marked them as being
107 	 * purgeable) or if we can move their contents out to swap.
108 	 */
109 	return swap_available() || obj->mm.madv == I915_MADV_DONTNEED;
110 }
111 
112 static bool unsafe_drop_pages(struct drm_i915_gem_object *obj)
113 {
114 	if (i915_gem_object_unbind(obj) == 0)
115 		__i915_gem_object_put_pages(obj, I915_MM_SHRINKER);
116 	return !i915_gem_object_has_pages(obj);
117 }
118 
119 /**
120  * i915_gem_shrink - Shrink buffer object caches
121  * @dev_priv: i915 device
122  * @target: amount of memory to make available, in pages
123  * @nr_scanned: optional output for number of pages scanned (incremental)
124  * @flags: control flags for selecting cache types
125  *
126  * This function is the main interface to the shrinker. It will try to release
127  * up to @target pages of main memory backing storage from buffer objects.
128  * Selection of the specific caches can be done with @flags. This is e.g. useful
129  * when purgeable objects should be removed from caches preferentially.
130  *
131  * Note that it's not guaranteed that released amount is actually available as
132  * free system memory - the pages might still be in-used to due to other reasons
133  * (like cpu mmaps) or the mm core has reused them before we could grab them.
134  * Therefore code that needs to explicitly shrink buffer objects caches (e.g. to
135  * avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all().
136  *
137  * Also note that any kind of pinning (both per-vma address space pins and
138  * backing storage pins at the buffer object level) result in the shrinker code
139  * having to skip the object.
140  *
141  * Returns:
142  * The number of pages of backing storage actually released.
143  */
144 unsigned long
145 i915_gem_shrink(struct drm_i915_private *dev_priv,
146 		unsigned long target,
147 		unsigned long *nr_scanned,
148 		unsigned flags)
149 {
150 	const struct {
151 		struct list_head *list;
152 		unsigned int bit;
153 	} phases[] = {
154 		{ &dev_priv->mm.unbound_list, I915_SHRINK_UNBOUND },
155 		{ &dev_priv->mm.bound_list, I915_SHRINK_BOUND },
156 		{ NULL, 0 },
157 	}, *phase;
158 	unsigned long count = 0;
159 	unsigned long scanned = 0;
160 	bool unlock;
161 
162 	if (!shrinker_lock(dev_priv, &unlock))
163 		return 0;
164 
165 	/*
166 	 * When shrinking the active list, also consider active contexts.
167 	 * Active contexts are pinned until they are retired, and so can
168 	 * not be simply unbound to retire and unpin their pages. To shrink
169 	 * the contexts, we must wait until the gpu is idle.
170 	 *
171 	 * We don't care about errors here; if we cannot wait upon the GPU,
172 	 * we will free as much as we can and hope to get a second chance.
173 	 */
174 	if (flags & I915_SHRINK_ACTIVE)
175 		i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED);
176 
177 	trace_i915_gem_shrink(dev_priv, target, flags);
178 	i915_gem_retire_requests(dev_priv);
179 
180 	/*
181 	 * Unbinding of objects will require HW access; Let us not wake the
182 	 * device just to recover a little memory. If absolutely necessary,
183 	 * we will force the wake during oom-notifier.
184 	 */
185 	if ((flags & I915_SHRINK_BOUND) &&
186 	    !intel_runtime_pm_get_if_in_use(dev_priv))
187 		flags &= ~I915_SHRINK_BOUND;
188 
189 	/*
190 	 * As we may completely rewrite the (un)bound list whilst unbinding
191 	 * (due to retiring requests) we have to strictly process only
192 	 * one element of the list at the time, and recheck the list
193 	 * on every iteration.
194 	 *
195 	 * In particular, we must hold a reference whilst removing the
196 	 * object as we may end up waiting for and/or retiring the objects.
197 	 * This might release the final reference (held by the active list)
198 	 * and result in the object being freed from under us. This is
199 	 * similar to the precautions the eviction code must take whilst
200 	 * removing objects.
201 	 *
202 	 * Also note that although these lists do not hold a reference to
203 	 * the object we can safely grab one here: The final object
204 	 * unreferencing and the bound_list are both protected by the
205 	 * dev->struct_mutex and so we won't ever be able to observe an
206 	 * object on the bound_list with a reference count equals 0.
207 	 */
208 	for (phase = phases; phase->list; phase++) {
209 		struct list_head still_in_list;
210 		struct drm_i915_gem_object *obj;
211 
212 		if ((flags & phase->bit) == 0)
213 			continue;
214 
215 		INIT_LIST_HEAD(&still_in_list);
216 
217 		/*
218 		 * We serialize our access to unreferenced objects through
219 		 * the use of the struct_mutex. While the objects are not
220 		 * yet freed (due to RCU then a workqueue) we still want
221 		 * to be able to shrink their pages, so they remain on
222 		 * the unbound/bound list until actually freed.
223 		 */
224 		lockmgr(&dev_priv->mm.obj_lock, LK_EXCLUSIVE);
225 		while (count < target &&
226 		       (obj = list_first_entry_or_null(phase->list,
227 						       typeof(*obj),
228 						       mm.link))) {
229 			list_move_tail(&obj->mm.link, &still_in_list);
230 
231 			if (flags & I915_SHRINK_PURGEABLE &&
232 			    obj->mm.madv != I915_MADV_DONTNEED)
233 				continue;
234 
235 			if (flags & I915_SHRINK_VMAPS &&
236 			    !is_vmalloc_addr(obj->mm.mapping))
237 				continue;
238 
239 			if (!(flags & I915_SHRINK_ACTIVE) &&
240 			    (i915_gem_object_is_active(obj) ||
241 			     i915_gem_object_is_framebuffer(obj)))
242 				continue;
243 
244 			if (!can_release_pages(obj))
245 				continue;
246 
247 			lockmgr(&dev_priv->mm.obj_lock, LK_RELEASE);
248 
249 			if (unsafe_drop_pages(obj)) {
250 				/* May arrive from get_pages on another bo */
251 				mutex_lock_nested(&obj->mm.lock,
252 						  I915_MM_SHRINKER);
253 				if (!i915_gem_object_has_pages(obj)) {
254 					__i915_gem_object_invalidate(obj);
255 					count += obj->base.size >> PAGE_SHIFT;
256 				}
257 				mutex_unlock(&obj->mm.lock);
258 			}
259 			scanned += obj->base.size >> PAGE_SHIFT;
260 
261 			lockmgr(&dev_priv->mm.obj_lock, LK_EXCLUSIVE);
262 		}
263 		list_splice_tail(&still_in_list, phase->list);
264 		lockmgr(&dev_priv->mm.obj_lock, LK_RELEASE);
265 	}
266 
267 	if (flags & I915_SHRINK_BOUND)
268 		intel_runtime_pm_put(dev_priv);
269 
270 	i915_gem_retire_requests(dev_priv);
271 
272 	shrinker_unlock(dev_priv, unlock);
273 
274 	if (nr_scanned)
275 		*nr_scanned += scanned;
276 	return count;
277 }
278 
279 /**
280  * i915_gem_shrink_all - Shrink buffer object caches completely
281  * @dev_priv: i915 device
282  *
283  * This is a simple wraper around i915_gem_shrink() to aggressively shrink all
284  * caches completely. It also first waits for and retires all outstanding
285  * requests to also be able to release backing storage for active objects.
286  *
287  * This should only be used in code to intentionally quiescent the gpu or as a
288  * last-ditch effort when memory seems to have run out.
289  *
290  * Returns:
291  * The number of pages of backing storage actually released.
292  */
293 unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
294 {
295 	unsigned long freed;
296 
297 	intel_runtime_pm_get(dev_priv);
298 	freed = i915_gem_shrink(dev_priv, -1UL, NULL,
299 				I915_SHRINK_BOUND |
300 				I915_SHRINK_UNBOUND |
301 				I915_SHRINK_ACTIVE);
302 	intel_runtime_pm_put(dev_priv);
303 
304 	return freed;
305 }
306 
307 static unsigned long
308 i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
309 {
310 #if 0
311 	struct drm_i915_private *dev_priv =
312 		container_of(shrinker, struct drm_i915_private, mm.shrinker);
313 	struct drm_i915_gem_object *obj;
314 	unsigned long count = 0;
315 
316 	spin_lock(&dev_priv->mm.obj_lock);
317 	list_for_each_entry(obj, &dev_priv->mm.unbound_list, mm.link)
318 		if (can_release_pages(obj))
319 			count += obj->base.size >> PAGE_SHIFT;
320 
321 	list_for_each_entry(obj, &dev_priv->mm.bound_list, mm.link)
322 		if (!i915_gem_object_is_active(obj) && can_release_pages(obj))
323 			count += obj->base.size >> PAGE_SHIFT;
324 	spin_unlock(&dev_priv->mm.obj_lock);
325 
326 	return count;
327 #endif
328 	return 0;
329 }
330 
331 static unsigned long
332 i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
333 {
334 #if 0
335 	struct drm_i915_private *dev_priv =
336 		container_of(shrinker, struct drm_i915_private, mm.shrinker);
337 	unsigned long freed;
338 	bool unlock;
339 
340 	sc->nr_scanned = 0;
341 
342 	if (!shrinker_lock(dev_priv, &unlock))
343 		return SHRINK_STOP;
344 
345 	freed = i915_gem_shrink(dev_priv,
346 				sc->nr_to_scan,
347 				&sc->nr_scanned,
348 				I915_SHRINK_BOUND |
349 				I915_SHRINK_UNBOUND |
350 				I915_SHRINK_PURGEABLE);
351 	if (freed < sc->nr_to_scan)
352 		freed += i915_gem_shrink(dev_priv,
353 					 sc->nr_to_scan - sc->nr_scanned,
354 					 &sc->nr_scanned,
355 					 I915_SHRINK_BOUND |
356 					 I915_SHRINK_UNBOUND);
357 	if (freed < sc->nr_to_scan && current_is_kswapd()) {
358 		intel_runtime_pm_get(dev_priv);
359 		freed += i915_gem_shrink(dev_priv,
360 					 sc->nr_to_scan - sc->nr_scanned,
361 					 &sc->nr_scanned,
362 					 I915_SHRINK_ACTIVE |
363 					 I915_SHRINK_BOUND |
364 					 I915_SHRINK_UNBOUND);
365 		intel_runtime_pm_put(dev_priv);
366 	}
367 
368 	shrinker_unlock(dev_priv, unlock);
369 
370 	return freed;
371 #endif
372 	return 0;
373 }
374 
375 #if 0
376 static bool
377 shrinker_lock_uninterruptible(struct drm_i915_private *dev_priv, bool *unlock,
378 			      int timeout_ms)
379 {
380 	unsigned long timeout = jiffies + msecs_to_jiffies_timeout(timeout_ms);
381 
382 	do {
383 		if (i915_gem_wait_for_idle(dev_priv, 0) == 0 &&
384 		    shrinker_lock(dev_priv, unlock))
385 			break;
386 
387 		schedule_timeout_killable(1);
388 		if (fatal_signal_pending(current))
389 			return false;
390 
391 		if (time_after(jiffies, timeout)) {
392 			pr_err("Unable to lock GPU to purge memory.\n");
393 			return false;
394 		}
395 	} while (1);
396 
397 	return true;
398 }
399 
400 static int
401 i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr)
402 {
403 	struct drm_i915_private *dev_priv =
404 		container_of(nb, struct drm_i915_private, mm.oom_notifier);
405 	struct drm_i915_gem_object *obj;
406 	unsigned long unevictable, bound, unbound, freed_pages;
407 
408 	freed_pages = i915_gem_shrink_all(dev_priv);
409 
410 	/* Because we may be allocating inside our own driver, we cannot
411 	 * assert that there are no objects with pinned pages that are not
412 	 * being pointed to by hardware.
413 	 */
414 	unbound = bound = unevictable = 0;
415 	spin_lock(&dev_priv->mm.obj_lock);
416 	list_for_each_entry(obj, &dev_priv->mm.unbound_list, mm.link) {
417 		if (!can_release_pages(obj))
418 			unevictable += obj->base.size >> PAGE_SHIFT;
419 		else
420 			unbound += obj->base.size >> PAGE_SHIFT;
421 	}
422 	list_for_each_entry(obj, &dev_priv->mm.bound_list, mm.link) {
423 		if (!can_release_pages(obj))
424 			unevictable += obj->base.size >> PAGE_SHIFT;
425 		else
426 			bound += obj->base.size >> PAGE_SHIFT;
427 	}
428 	spin_unlock(&dev_priv->mm.obj_lock);
429 
430 	if (freed_pages || unbound || bound)
431 		pr_info("Purging GPU memory, %lu pages freed, "
432 			"%lu pages still pinned.\n",
433 			freed_pages, unevictable);
434 	if (unbound || bound)
435 		pr_err("%lu and %lu pages still available in the "
436 		       "bound and unbound GPU page lists.\n",
437 		       bound, unbound);
438 
439 	*(unsigned long *)ptr += freed_pages;
440 	return NOTIFY_DONE;
441 }
442 
443 static int
444 i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
445 {
446 	struct drm_i915_private *dev_priv =
447 		container_of(nb, struct drm_i915_private, mm.vmap_notifier);
448 	struct i915_vma *vma, *next;
449 	unsigned long freed_pages = 0;
450 	bool unlock;
451 	int ret;
452 
453 	if (!shrinker_lock_uninterruptible(dev_priv, &unlock, 5000))
454 		return NOTIFY_DONE;
455 
456 	/* Force everything onto the inactive lists */
457 	ret = i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED);
458 	if (ret)
459 		goto out;
460 
461 	intel_runtime_pm_get(dev_priv);
462 	freed_pages += i915_gem_shrink(dev_priv, -1UL, NULL,
463 				       I915_SHRINK_BOUND |
464 				       I915_SHRINK_UNBOUND |
465 				       I915_SHRINK_ACTIVE |
466 				       I915_SHRINK_VMAPS);
467 	intel_runtime_pm_put(dev_priv);
468 
469 	/* We also want to clear any cached iomaps as they wrap vmap */
470 	list_for_each_entry_safe(vma, next,
471 				 &dev_priv->ggtt.base.inactive_list, vm_link) {
472 		unsigned long count = vma->node.size >> PAGE_SHIFT;
473 		if (vma->iomap && i915_vma_unbind(vma) == 0)
474 			freed_pages += count;
475 	}
476 
477 out:
478 	shrinker_unlock(dev_priv, unlock);
479 
480 	*(unsigned long *)ptr += freed_pages;
481 	return NOTIFY_DONE;
482 }
483 #endif
484 
485 /**
486  * i915_gem_shrinker_init - Initialize i915 shrinker
487  * @dev_priv: i915 device
488  *
489  * This function registers and sets up the i915 shrinker and OOM handler.
490  */
491 void i915_gem_shrinker_init(struct drm_i915_private *dev_priv)
492 {
493 	dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan;
494 	dev_priv->mm.shrinker.count_objects = i915_gem_shrinker_count;
495 	dev_priv->mm.shrinker.seeks = DEFAULT_SEEKS;
496 #if 0
497 	WARN_ON(register_shrinker(&dev_priv->mm.shrinker));
498 
499 	dev_priv->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom;
500 	WARN_ON(register_oom_notifier(&dev_priv->mm.oom_notifier));
501 
502 	dev_priv->mm.vmap_notifier.notifier_call = i915_gem_shrinker_vmap;
503 	WARN_ON(register_vmap_purge_notifier(&dev_priv->mm.vmap_notifier));
504 #endif
505 }
506 
507 /**
508  * i915_gem_shrinker_cleanup - Clean up i915 shrinker
509  * @dev_priv: i915 device
510  *
511  * This function unregisters the i915 shrinker and OOM handler.
512  */
513 void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv)
514 {
515 #if 0
516 	WARN_ON(unregister_vmap_purge_notifier(&dev_priv->mm.vmap_notifier));
517 	WARN_ON(unregister_oom_notifier(&dev_priv->mm.oom_notifier));
518 	unregister_shrinker(&dev_priv->mm.shrinker);
519 #endif
520 }
521