Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / i915_gem_shrinker.c
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 any_vma_pinned(struct drm_i915_gem_object *obj)
75 {
76         struct i915_vma *vma;
77
78         list_for_each_entry(vma, &obj->vma_list, obj_link) {
79                 /* Only GGTT vma may be permanently pinned, and are always
80                  * at the start of the list. We can stop hunting as soon
81                  * as we see a ppGTT vma.
82                  */
83                 if (!i915_vma_is_ggtt(vma))
84                         break;
85
86                 if (i915_vma_is_pinned(vma))
87                         return true;
88         }
89
90         return false;
91 }
92
93 static bool swap_available(void)
94 {
95         return get_nr_swap_pages() > 0;
96 }
97
98 static bool can_release_pages(struct drm_i915_gem_object *obj)
99 {
100         if (!obj->mm.pages)
101                 return false;
102
103         /* Consider only shrinkable ojects. */
104         if (!i915_gem_object_is_shrinkable(obj))
105                 return false;
106
107         /* Only report true if by unbinding the object and putting its pages
108          * we can actually make forward progress towards freeing physical
109          * pages.
110          *
111          * If the pages are pinned for any other reason than being bound
112          * to the GPU, simply unbinding from the GPU is not going to succeed
113          * in releasing our pin count on the pages themselves.
114          */
115         if (atomic_read(&obj->mm.pages_pin_count) > obj->bind_count)
116                 return false;
117
118         if (any_vma_pinned(obj))
119                 return false;
120
121         /* We can only return physical pages to the system if we can either
122          * discard the contents (because the user has marked them as being
123          * purgeable) or if we can move their contents out to swap.
124          */
125         return swap_available() || obj->mm.madv == I915_MADV_DONTNEED;
126 }
127
128 static bool unsafe_drop_pages(struct drm_i915_gem_object *obj)
129 {
130         if (i915_gem_object_unbind(obj) == 0)
131                 __i915_gem_object_put_pages(obj, I915_MM_SHRINKER);
132         return !READ_ONCE(obj->mm.pages);
133 }
134
135 /**
136  * i915_gem_shrink - Shrink buffer object caches
137  * @dev_priv: i915 device
138  * @target: amount of memory to make available, in pages
139  * @nr_scanned: optional output for number of pages scanned (incremental)
140  * @flags: control flags for selecting cache types
141  *
142  * This function is the main interface to the shrinker. It will try to release
143  * up to @target pages of main memory backing storage from buffer objects.
144  * Selection of the specific caches can be done with @flags. This is e.g. useful
145  * when purgeable objects should be removed from caches preferentially.
146  *
147  * Note that it's not guaranteed that released amount is actually available as
148  * free system memory - the pages might still be in-used to due to other reasons
149  * (like cpu mmaps) or the mm core has reused them before we could grab them.
150  * Therefore code that needs to explicitly shrink buffer objects caches (e.g. to
151  * avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all().
152  *
153  * Also note that any kind of pinning (both per-vma address space pins and
154  * backing storage pins at the buffer object level) result in the shrinker code
155  * having to skip the object.
156  *
157  * Returns:
158  * The number of pages of backing storage actually released.
159  */
160 unsigned long
161 i915_gem_shrink(struct drm_i915_private *dev_priv,
162                 unsigned long target,
163                 unsigned long *nr_scanned,
164                 unsigned flags)
165 {
166         const struct {
167                 struct list_head *list;
168                 unsigned int bit;
169         } phases[] = {
170                 { &dev_priv->mm.unbound_list, I915_SHRINK_UNBOUND },
171                 { &dev_priv->mm.bound_list, I915_SHRINK_BOUND },
172                 { NULL, 0 },
173         }, *phase;
174         unsigned long count = 0;
175         unsigned long scanned = 0;
176         bool unlock;
177
178         if (!shrinker_lock(dev_priv, &unlock))
179                 return 0;
180
181         trace_i915_gem_shrink(dev_priv, target, flags);
182         i915_gem_retire_requests(dev_priv);
183
184         /*
185          * Unbinding of objects will require HW access; Let us not wake the
186          * device just to recover a little memory. If absolutely necessary,
187          * we will force the wake during oom-notifier.
188          */
189         if ((flags & I915_SHRINK_BOUND) &&
190             !intel_runtime_pm_get_if_in_use(dev_priv))
191                 flags &= ~I915_SHRINK_BOUND;
192
193         /*
194          * As we may completely rewrite the (un)bound list whilst unbinding
195          * (due to retiring requests) we have to strictly process only
196          * one element of the list at the time, and recheck the list
197          * on every iteration.
198          *
199          * In particular, we must hold a reference whilst removing the
200          * object as we may end up waiting for and/or retiring the objects.
201          * This might release the final reference (held by the active list)
202          * and result in the object being freed from under us. This is
203          * similar to the precautions the eviction code must take whilst
204          * removing objects.
205          *
206          * Also note that although these lists do not hold a reference to
207          * the object we can safely grab one here: The final object
208          * unreferencing and the bound_list are both protected by the
209          * dev->struct_mutex and so we won't ever be able to observe an
210          * object on the bound_list with a reference count equals 0.
211          */
212         for (phase = phases; phase->list; phase++) {
213                 struct list_head still_in_list;
214                 struct drm_i915_gem_object *obj;
215
216                 if ((flags & phase->bit) == 0)
217                         continue;
218
219                 INIT_LIST_HEAD(&still_in_list);
220                 while (count < target &&
221                        (obj = list_first_entry_or_null(phase->list,
222                                                        typeof(*obj),
223                                                        global_link))) {
224                         list_move_tail(&obj->global_link, &still_in_list);
225                         if (!obj->mm.pages) {
226                                 list_del_init(&obj->global_link);
227                                 continue;
228                         }
229
230                         if (flags & I915_SHRINK_PURGEABLE &&
231                             obj->mm.madv != I915_MADV_DONTNEED)
232                                 continue;
233
234                         if (flags & I915_SHRINK_VMAPS &&
235                             !is_vmalloc_addr(obj->mm.mapping))
236                                 continue;
237
238                         if (!(flags & I915_SHRINK_ACTIVE) &&
239                             (i915_gem_object_is_active(obj) ||
240                              i915_gem_object_is_framebuffer(obj)))
241                                 continue;
242
243                         if (!can_release_pages(obj))
244                                 continue;
245
246                         if (unsafe_drop_pages(obj)) {
247                                 /* May arrive from get_pages on another bo */
248                                 mutex_lock_nested(&obj->mm.lock,
249                                                   I915_MM_SHRINKER);
250                                 if (!obj->mm.pages) {
251                                         __i915_gem_object_invalidate(obj);
252                                         list_del_init(&obj->global_link);
253                                         count += obj->base.size >> PAGE_SHIFT;
254                                 }
255                                 mutex_unlock(&obj->mm.lock);
256                                 scanned += obj->base.size >> PAGE_SHIFT;
257                         }
258                 }
259                 list_splice_tail(&still_in_list, phase->list);
260         }
261
262         if (flags & I915_SHRINK_BOUND)
263                 intel_runtime_pm_put(dev_priv);
264
265         i915_gem_retire_requests(dev_priv);
266
267         shrinker_unlock(dev_priv, unlock);
268
269         if (nr_scanned)
270                 *nr_scanned += scanned;
271         return count;
272 }
273
274 /**
275  * i915_gem_shrink_all - Shrink buffer object caches completely
276  * @dev_priv: i915 device
277  *
278  * This is a simple wraper around i915_gem_shrink() to aggressively shrink all
279  * caches completely. It also first waits for and retires all outstanding
280  * requests to also be able to release backing storage for active objects.
281  *
282  * This should only be used in code to intentionally quiescent the gpu or as a
283  * last-ditch effort when memory seems to have run out.
284  *
285  * Returns:
286  * The number of pages of backing storage actually released.
287  */
288 unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
289 {
290         unsigned long freed;
291
292         intel_runtime_pm_get(dev_priv);
293         freed = i915_gem_shrink(dev_priv, -1UL, NULL,
294                                 I915_SHRINK_BOUND |
295                                 I915_SHRINK_UNBOUND |
296                                 I915_SHRINK_ACTIVE);
297         intel_runtime_pm_put(dev_priv);
298
299         return freed;
300 }
301
302 static unsigned long
303 i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc)
304 {
305         struct drm_i915_private *dev_priv =
306                 container_of(shrinker, struct drm_i915_private, mm.shrinker);
307         struct drm_i915_gem_object *obj;
308         unsigned long count;
309         bool unlock;
310
311         if (!shrinker_lock(dev_priv, &unlock))
312                 return 0;
313
314         i915_gem_retire_requests(dev_priv);
315
316         count = 0;
317         list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_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, global_link) {
322                 if (!i915_gem_object_is_active(obj) && can_release_pages(obj))
323                         count += obj->base.size >> PAGE_SHIFT;
324         }
325
326         shrinker_unlock(dev_priv, unlock);
327
328         return count;
329 }
330
331 static unsigned long
332 i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc)
333 {
334         struct drm_i915_private *dev_priv =
335                 container_of(shrinker, struct drm_i915_private, mm.shrinker);
336         unsigned long freed;
337         bool unlock;
338
339         sc->nr_scanned = 0;
340
341         if (!shrinker_lock(dev_priv, &unlock))
342                 return SHRINK_STOP;
343
344         freed = i915_gem_shrink(dev_priv,
345                                 sc->nr_to_scan,
346                                 &sc->nr_scanned,
347                                 I915_SHRINK_BOUND |
348                                 I915_SHRINK_UNBOUND |
349                                 I915_SHRINK_PURGEABLE);
350         if (freed < sc->nr_to_scan)
351                 freed += i915_gem_shrink(dev_priv,
352                                          sc->nr_to_scan - sc->nr_scanned,
353                                          &sc->nr_scanned,
354                                          I915_SHRINK_BOUND |
355                                          I915_SHRINK_UNBOUND);
356         if (freed < sc->nr_to_scan && current_is_kswapd()) {
357                 intel_runtime_pm_get(dev_priv);
358                 freed += i915_gem_shrink(dev_priv,
359                                          sc->nr_to_scan - sc->nr_scanned,
360                                          &sc->nr_scanned,
361                                          I915_SHRINK_ACTIVE |
362                                          I915_SHRINK_BOUND |
363                                          I915_SHRINK_UNBOUND);
364                 intel_runtime_pm_put(dev_priv);
365         }
366
367         shrinker_unlock(dev_priv, unlock);
368
369         return sc->nr_scanned ? freed : SHRINK_STOP;
370 }
371
372 static bool
373 shrinker_lock_uninterruptible(struct drm_i915_private *dev_priv, bool *unlock,
374                               int timeout_ms)
375 {
376         unsigned long timeout = jiffies + msecs_to_jiffies_timeout(timeout_ms);
377
378         do {
379                 if (i915_gem_wait_for_idle(dev_priv, 0) == 0 &&
380                     shrinker_lock(dev_priv, unlock))
381                         break;
382
383                 schedule_timeout_killable(1);
384                 if (fatal_signal_pending(current))
385                         return false;
386
387                 if (time_after(jiffies, timeout)) {
388                         pr_err("Unable to lock GPU to purge memory.\n");
389                         return false;
390                 }
391         } while (1);
392
393         return true;
394 }
395
396 static int
397 i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr)
398 {
399         struct drm_i915_private *dev_priv =
400                 container_of(nb, struct drm_i915_private, mm.oom_notifier);
401         struct drm_i915_gem_object *obj;
402         unsigned long unevictable, bound, unbound, freed_pages;
403         bool unlock;
404
405         if (!shrinker_lock_uninterruptible(dev_priv, &unlock, 5000))
406                 return NOTIFY_DONE;
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         list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_link) {
416                 if (!obj->mm.pages)
417                         continue;
418
419                 if (!can_release_pages(obj))
420                         unevictable += obj->base.size >> PAGE_SHIFT;
421                 else
422                         unbound += obj->base.size >> PAGE_SHIFT;
423         }
424         list_for_each_entry(obj, &dev_priv->mm.bound_list, global_link) {
425                 if (!obj->mm.pages)
426                         continue;
427
428                 if (!can_release_pages(obj))
429                         unevictable += obj->base.size >> PAGE_SHIFT;
430                 else
431                         bound += obj->base.size >> PAGE_SHIFT;
432         }
433
434         shrinker_unlock(dev_priv, unlock);
435
436         if (freed_pages || unbound || bound)
437                 pr_info("Purging GPU memory, %lu pages freed, "
438                         "%lu pages still pinned.\n",
439                         freed_pages, unevictable);
440         if (unbound || bound)
441                 pr_err("%lu and %lu pages still available in the "
442                        "bound and unbound GPU page lists.\n",
443                        bound, unbound);
444
445         *(unsigned long *)ptr += freed_pages;
446         return NOTIFY_DONE;
447 }
448
449 static int
450 i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr)
451 {
452         struct drm_i915_private *dev_priv =
453                 container_of(nb, struct drm_i915_private, mm.vmap_notifier);
454         struct i915_vma *vma, *next;
455         unsigned long freed_pages = 0;
456         bool unlock;
457         int ret;
458
459         if (!shrinker_lock_uninterruptible(dev_priv, &unlock, 5000))
460                 return NOTIFY_DONE;
461
462         /* Force everything onto the inactive lists */
463         ret = i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED);
464         if (ret)
465                 goto out;
466
467         intel_runtime_pm_get(dev_priv);
468         freed_pages += i915_gem_shrink(dev_priv, -1UL, NULL,
469                                        I915_SHRINK_BOUND |
470                                        I915_SHRINK_UNBOUND |
471                                        I915_SHRINK_ACTIVE |
472                                        I915_SHRINK_VMAPS);
473         intel_runtime_pm_put(dev_priv);
474
475         /* We also want to clear any cached iomaps as they wrap vmap */
476         list_for_each_entry_safe(vma, next,
477                                  &dev_priv->ggtt.base.inactive_list, vm_link) {
478                 unsigned long count = vma->node.size >> PAGE_SHIFT;
479                 if (vma->iomap && i915_vma_unbind(vma) == 0)
480                         freed_pages += count;
481         }
482
483 out:
484         shrinker_unlock(dev_priv, unlock);
485
486         *(unsigned long *)ptr += freed_pages;
487         return NOTIFY_DONE;
488 }
489
490 /**
491  * i915_gem_shrinker_init - Initialize i915 shrinker
492  * @dev_priv: i915 device
493  *
494  * This function registers and sets up the i915 shrinker and OOM handler.
495  */
496 void i915_gem_shrinker_init(struct drm_i915_private *dev_priv)
497 {
498         dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan;
499         dev_priv->mm.shrinker.count_objects = i915_gem_shrinker_count;
500         dev_priv->mm.shrinker.seeks = DEFAULT_SEEKS;
501         WARN_ON(register_shrinker(&dev_priv->mm.shrinker));
502
503         dev_priv->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom;
504         WARN_ON(register_oom_notifier(&dev_priv->mm.oom_notifier));
505
506         dev_priv->mm.vmap_notifier.notifier_call = i915_gem_shrinker_vmap;
507         WARN_ON(register_vmap_purge_notifier(&dev_priv->mm.vmap_notifier));
508 }
509
510 /**
511  * i915_gem_shrinker_cleanup - Clean up i915 shrinker
512  * @dev_priv: i915 device
513  *
514  * This function unregisters the i915 shrinker and OOM handler.
515  */
516 void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv)
517 {
518         WARN_ON(unregister_vmap_purge_notifier(&dev_priv->mm.vmap_notifier));
519         WARN_ON(unregister_oom_notifier(&dev_priv->mm.oom_notifier));
520         unregister_shrinker(&dev_priv->mm.shrinker);
521 }