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/shmem_fs.h> 26 #include <linux/slab.h> 27 #include <linux/swap.h> 28 #include <linux/pci.h> 29 #include <linux/dma-buf.h> 30 #include <linux/vmalloc.h> 31 #include <drm/drmP.h> 32 #include <drm/i915_drm.h> 33 34 #include "i915_drv.h" 35 #include "i915_trace.h" 36 37 #if 0 38 static bool mutex_is_locked_by(struct mutex *mutex, struct task_struct *task) 39 { 40 if (!mutex_is_locked(mutex)) 41 return false; 42 43 #if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER) 44 return mutex->owner == task; 45 #else 46 /* Since UP may be pre-empted, we cannot assume that we own the lock */ 47 return false; 48 #endif 49 } 50 #endif 51 52 static bool any_vma_pinned(struct drm_i915_gem_object *obj) 53 { 54 struct i915_vma *vma; 55 56 list_for_each_entry(vma, &obj->vma_list, obj_link) 57 if (i915_vma_is_pinned(vma)) 58 return true; 59 60 return false; 61 } 62 63 static bool swap_available(void) 64 { 65 return get_nr_swap_pages() > 0; 66 } 67 68 static bool can_release_pages(struct drm_i915_gem_object *obj) 69 { 70 /* Only shmemfs objects are backed by swap */ 71 if (!obj->base.filp) 72 return false; 73 74 /* Only report true if by unbinding the object and putting its pages 75 * we can actually make forward progress towards freeing physical 76 * pages. 77 * 78 * If the pages are pinned for any other reason than being bound 79 * to the GPU, simply unbinding from the GPU is not going to succeed 80 * in releasing our pin count on the pages themselves. 81 */ 82 if (obj->pages_pin_count > obj->bind_count) 83 return false; 84 85 if (any_vma_pinned(obj)) 86 return false; 87 88 /* We can only return physical pages to the system if we can either 89 * discard the contents (because the user has marked them as being 90 * purgeable) or if we can move their contents out to swap. 91 */ 92 return swap_available() || obj->madv == I915_MADV_DONTNEED; 93 } 94 95 /** 96 * i915_gem_shrink - Shrink buffer object caches 97 * @dev_priv: i915 device 98 * @target: amount of memory to make available, in pages 99 * @flags: control flags for selecting cache types 100 * 101 * This function is the main interface to the shrinker. It will try to release 102 * up to @target pages of main memory backing storage from buffer objects. 103 * Selection of the specific caches can be done with @flags. This is e.g. useful 104 * when purgeable objects should be removed from caches preferentially. 105 * 106 * Note that it's not guaranteed that released amount is actually available as 107 * free system memory - the pages might still be in-used to due to other reasons 108 * (like cpu mmaps) or the mm core has reused them before we could grab them. 109 * Therefore code that needs to explicitly shrink buffer objects caches (e.g. to 110 * avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all(). 111 * 112 * Also note that any kind of pinning (both per-vma address space pins and 113 * backing storage pins at the buffer object level) result in the shrinker code 114 * having to skip the object. 115 * 116 * Returns: 117 * The number of pages of backing storage actually released. 118 */ 119 unsigned long 120 i915_gem_shrink(struct drm_i915_private *dev_priv, 121 unsigned long target, unsigned flags) 122 { 123 const struct { 124 struct list_head *list; 125 unsigned int bit; 126 } phases[] = { 127 { &dev_priv->mm.unbound_list, I915_SHRINK_UNBOUND }, 128 { &dev_priv->mm.bound_list, I915_SHRINK_BOUND }, 129 { NULL, 0 }, 130 }, *phase; 131 unsigned long count = 0; 132 133 trace_i915_gem_shrink(dev_priv, target, flags); 134 i915_gem_retire_requests(dev_priv); 135 136 /* 137 * Unbinding of objects will require HW access; Let us not wake the 138 * device just to recover a little memory. If absolutely necessary, 139 * we will force the wake during oom-notifier. 140 */ 141 if ((flags & I915_SHRINK_BOUND) && 142 !intel_runtime_pm_get_if_in_use(dev_priv)) 143 flags &= ~I915_SHRINK_BOUND; 144 145 /* 146 * As we may completely rewrite the (un)bound list whilst unbinding 147 * (due to retiring requests) we have to strictly process only 148 * one element of the list at the time, and recheck the list 149 * on every iteration. 150 * 151 * In particular, we must hold a reference whilst removing the 152 * object as we may end up waiting for and/or retiring the objects. 153 * This might release the final reference (held by the active list) 154 * and result in the object being freed from under us. This is 155 * similar to the precautions the eviction code must take whilst 156 * removing objects. 157 * 158 * Also note that although these lists do not hold a reference to 159 * the object we can safely grab one here: The final object 160 * unreferencing and the bound_list are both protected by the 161 * dev->struct_mutex and so we won't ever be able to observe an 162 * object on the bound_list with a reference count equals 0. 163 */ 164 for (phase = phases; phase->list; phase++) { 165 struct list_head still_in_list; 166 struct drm_i915_gem_object *obj; 167 168 if ((flags & phase->bit) == 0) 169 continue; 170 171 INIT_LIST_HEAD(&still_in_list); 172 while (count < target && 173 (obj = list_first_entry_or_null(phase->list, 174 typeof(*obj), 175 global_list))) { 176 list_move_tail(&obj->global_list, &still_in_list); 177 178 if (flags & I915_SHRINK_PURGEABLE && 179 obj->madv != I915_MADV_DONTNEED) 180 continue; 181 182 if (flags & I915_SHRINK_VMAPS && 183 !is_vmalloc_addr(obj->mapping)) 184 continue; 185 186 if ((flags & I915_SHRINK_ACTIVE) == 0 && 187 i915_gem_object_is_active(obj)) 188 continue; 189 190 if (!can_release_pages(obj)) 191 continue; 192 193 i915_gem_object_get(obj); 194 195 /* For the unbound phase, this should be a no-op! */ 196 i915_gem_object_unbind(obj); 197 if (i915_gem_object_put_pages(obj) == 0) 198 count += obj->base.size >> PAGE_SHIFT; 199 200 i915_gem_object_put(obj); 201 } 202 list_splice(&still_in_list, phase->list); 203 } 204 205 if (flags & I915_SHRINK_BOUND) 206 intel_runtime_pm_put(dev_priv); 207 208 i915_gem_retire_requests(dev_priv); 209 /* expedite the RCU grace period to free some request slabs */ 210 synchronize_rcu_expedited(); 211 212 return count; 213 } 214 215 /** 216 * i915_gem_shrink_all - Shrink buffer object caches completely 217 * @dev_priv: i915 device 218 * 219 * This is a simple wraper around i915_gem_shrink() to aggressively shrink all 220 * caches completely. It also first waits for and retires all outstanding 221 * requests to also be able to release backing storage for active objects. 222 * 223 * This should only be used in code to intentionally quiescent the gpu or as a 224 * last-ditch effort when memory seems to have run out. 225 * 226 * Returns: 227 * The number of pages of backing storage actually released. 228 */ 229 unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv) 230 { 231 unsigned long freed; 232 233 freed = i915_gem_shrink(dev_priv, -1UL, 234 I915_SHRINK_BOUND | 235 I915_SHRINK_UNBOUND | 236 I915_SHRINK_ACTIVE); 237 rcu_barrier(); /* wait until our RCU delayed slab frees are completed */ 238 239 return freed; 240 } 241 242 #if 0 243 static bool i915_gem_shrinker_lock(struct drm_device *dev, bool *unlock) 244 { 245 if (!mutex_trylock(&dev->struct_mutex)) { 246 if (!mutex_is_locked_by(&dev->struct_mutex, current)) 247 return false; 248 249 *unlock = false; 250 } else 251 *unlock = true; 252 253 return true; 254 } 255 #endif 256 257 static unsigned long 258 i915_gem_shrinker_count(struct shrinker *shrinker, struct shrink_control *sc) 259 { 260 #if 0 261 struct drm_i915_private *dev_priv = 262 container_of(shrinker, struct drm_i915_private, mm.shrinker); 263 struct drm_device *dev = &dev_priv->drm; 264 struct drm_i915_gem_object *obj; 265 unsigned long count; 266 bool unlock; 267 268 if (!i915_gem_shrinker_lock(dev, &unlock)) 269 return 0; 270 271 i915_gem_retire_requests(dev_priv); 272 273 count = 0; 274 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) 275 if (can_release_pages(obj)) 276 count += obj->base.size >> PAGE_SHIFT; 277 278 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 279 if (!i915_gem_object_is_active(obj) && can_release_pages(obj)) 280 count += obj->base.size >> PAGE_SHIFT; 281 } 282 283 if (unlock) 284 mutex_unlock(&dev->struct_mutex); 285 286 return count; 287 #endif 288 return 0; 289 } 290 291 static unsigned long 292 i915_gem_shrinker_scan(struct shrinker *shrinker, struct shrink_control *sc) 293 { 294 #if 0 295 struct drm_i915_private *dev_priv = 296 container_of(shrinker, struct drm_i915_private, mm.shrinker); 297 struct drm_device *dev = &dev_priv->drm; 298 unsigned long freed; 299 bool unlock; 300 301 if (!i915_gem_shrinker_lock(dev, &unlock)) 302 return SHRINK_STOP; 303 304 freed = i915_gem_shrink(dev_priv, 305 sc->nr_to_scan, 306 I915_SHRINK_BOUND | 307 I915_SHRINK_UNBOUND | 308 I915_SHRINK_PURGEABLE); 309 if (freed < sc->nr_to_scan) 310 freed += i915_gem_shrink(dev_priv, 311 sc->nr_to_scan - freed, 312 I915_SHRINK_BOUND | 313 I915_SHRINK_UNBOUND); 314 if (unlock) 315 mutex_unlock(&dev->struct_mutex); 316 317 return freed; 318 #endif 319 return 0; 320 } 321 322 #if 0 323 struct shrinker_lock_uninterruptible { 324 bool was_interruptible; 325 bool unlock; 326 }; 327 328 static bool 329 i915_gem_shrinker_lock_uninterruptible(struct drm_i915_private *dev_priv, 330 struct shrinker_lock_uninterruptible *slu, 331 int timeout_ms) 332 { 333 unsigned long timeout = jiffies + msecs_to_jiffies_timeout(timeout_ms); 334 335 do { 336 if (i915_gem_wait_for_idle(dev_priv, false) == 0 && 337 i915_gem_shrinker_lock(&dev_priv->drm, &slu->unlock)) 338 break; 339 340 schedule_timeout_killable(1); 341 if (fatal_signal_pending(current)) 342 return false; 343 344 if (time_after(jiffies, timeout)) { 345 pr_err("Unable to lock GPU to purge memory.\n"); 346 return false; 347 } 348 } while (1); 349 350 slu->was_interruptible = dev_priv->mm.interruptible; 351 dev_priv->mm.interruptible = false; 352 return true; 353 } 354 355 static void 356 i915_gem_shrinker_unlock_uninterruptible(struct drm_i915_private *dev_priv, 357 struct shrinker_lock_uninterruptible *slu) 358 { 359 dev_priv->mm.interruptible = slu->was_interruptible; 360 if (slu->unlock) 361 mutex_unlock(&dev_priv->drm.struct_mutex); 362 } 363 364 static int 365 i915_gem_shrinker_oom(struct notifier_block *nb, unsigned long event, void *ptr) 366 { 367 struct drm_i915_private *dev_priv = 368 container_of(nb, struct drm_i915_private, mm.oom_notifier); 369 struct shrinker_lock_uninterruptible slu; 370 struct drm_i915_gem_object *obj; 371 unsigned long unevictable, bound, unbound, freed_pages; 372 373 if (!i915_gem_shrinker_lock_uninterruptible(dev_priv, &slu, 5000)) 374 return NOTIFY_DONE; 375 376 intel_runtime_pm_get(dev_priv); 377 freed_pages = i915_gem_shrink_all(dev_priv); 378 intel_runtime_pm_put(dev_priv); 379 380 /* Because we may be allocating inside our own driver, we cannot 381 * assert that there are no objects with pinned pages that are not 382 * being pointed to by hardware. 383 */ 384 unbound = bound = unevictable = 0; 385 list_for_each_entry(obj, &dev_priv->mm.unbound_list, global_list) { 386 if (!can_release_pages(obj)) 387 unevictable += obj->base.size >> PAGE_SHIFT; 388 else 389 unbound += obj->base.size >> PAGE_SHIFT; 390 } 391 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) { 392 if (!can_release_pages(obj)) 393 unevictable += obj->base.size >> PAGE_SHIFT; 394 else 395 bound += obj->base.size >> PAGE_SHIFT; 396 } 397 398 i915_gem_shrinker_unlock_uninterruptible(dev_priv, &slu); 399 400 if (freed_pages || unbound || bound) 401 pr_info("Purging GPU memory, %lu pages freed, " 402 "%lu pages still pinned.\n", 403 freed_pages, unevictable); 404 if (unbound || bound) 405 pr_err("%lu and %lu pages still available in the " 406 "bound and unbound GPU page lists.\n", 407 bound, unbound); 408 409 *(unsigned long *)ptr += freed_pages; 410 return NOTIFY_DONE; 411 } 412 413 static int 414 i915_gem_shrinker_vmap(struct notifier_block *nb, unsigned long event, void *ptr) 415 { 416 struct drm_i915_private *dev_priv = 417 container_of(nb, struct drm_i915_private, mm.vmap_notifier); 418 struct shrinker_lock_uninterruptible slu; 419 struct i915_vma *vma, *next; 420 unsigned long freed_pages = 0; 421 int ret; 422 423 if (!i915_gem_shrinker_lock_uninterruptible(dev_priv, &slu, 5000)) 424 return NOTIFY_DONE; 425 426 /* Force everything onto the inactive lists */ 427 ret = i915_gem_wait_for_idle(dev_priv, false); 428 if (ret) 429 goto out; 430 431 intel_runtime_pm_get(dev_priv); 432 freed_pages += i915_gem_shrink(dev_priv, -1UL, 433 I915_SHRINK_BOUND | 434 I915_SHRINK_UNBOUND | 435 I915_SHRINK_ACTIVE | 436 I915_SHRINK_VMAPS); 437 intel_runtime_pm_put(dev_priv); 438 439 /* We also want to clear any cached iomaps as they wrap vmap */ 440 list_for_each_entry_safe(vma, next, 441 &dev_priv->ggtt.base.inactive_list, vm_link) { 442 unsigned long count = vma->node.size >> PAGE_SHIFT; 443 if (vma->iomap && i915_vma_unbind(vma) == 0) 444 freed_pages += count; 445 } 446 447 out: 448 i915_gem_shrinker_unlock_uninterruptible(dev_priv, &slu); 449 450 *(unsigned long *)ptr += freed_pages; 451 return NOTIFY_DONE; 452 } 453 #endif 454 455 /** 456 * i915_gem_shrinker_init - Initialize i915 shrinker 457 * @dev_priv: i915 device 458 * 459 * This function registers and sets up the i915 shrinker and OOM handler. 460 */ 461 void i915_gem_shrinker_init(struct drm_i915_private *dev_priv) 462 { 463 dev_priv->mm.shrinker.scan_objects = i915_gem_shrinker_scan; 464 dev_priv->mm.shrinker.count_objects = i915_gem_shrinker_count; 465 dev_priv->mm.shrinker.seeks = DEFAULT_SEEKS; 466 #if 0 467 WARN_ON(register_shrinker(&dev_priv->mm.shrinker)); 468 469 dev_priv->mm.oom_notifier.notifier_call = i915_gem_shrinker_oom; 470 WARN_ON(register_oom_notifier(&dev_priv->mm.oom_notifier)); 471 472 dev_priv->mm.vmap_notifier.notifier_call = i915_gem_shrinker_vmap; 473 WARN_ON(register_vmap_purge_notifier(&dev_priv->mm.vmap_notifier)); 474 #endif 475 } 476 477 /** 478 * i915_gem_shrinker_cleanup - Clean up i915 shrinker 479 * @dev_priv: i915 device 480 * 481 * This function unregisters the i915 shrinker and OOM handler. 482 */ 483 void i915_gem_shrinker_cleanup(struct drm_i915_private *dev_priv) 484 { 485 #if 0 486 WARN_ON(unregister_vmap_purge_notifier(&dev_priv->mm.vmap_notifier)); 487 WARN_ON(unregister_oom_notifier(&dev_priv->mm.oom_notifier)); 488 unregister_shrinker(&dev_priv->mm.shrinker); 489 #endif 490 } 491