Lines Matching defs:obj

26 static bool can_release_pages(struct drm_i915_gem_object *obj)
29 if (!i915_gem_object_is_shrinkable(obj))
37 return swap_available() || obj->mm.madv == I915_MADV_DONTNEED;
40 static bool drop_pages(struct drm_i915_gem_object *obj,
53 if (i915_gem_object_unbind(obj, flags) == 0)
59 static int try_to_writeback(struct drm_i915_gem_object *obj, unsigned int flags)
61 if (obj->ops->shrink) {
70 return obj->ops->shrink(obj, shrink_flags);
179 struct drm_i915_gem_object *obj;
196 (obj = list_first_entry_or_null(phase->list,
197 typeof(*obj),
199 list_move_tail(&obj->mm.link, &still_in_list);
202 !is_vmalloc_addr(obj->mm.mapping))
206 i915_gem_object_is_framebuffer(obj))
209 if (!can_release_pages(obj))
212 if (!kref_get_unless_zero(&obj->base.refcount))
219 if (!i915_gem_object_trylock(obj, NULL))
222 err = i915_gem_object_lock(obj, ww);
227 if (drop_pages(obj, shrink, trylock_vm) &&
228 !__i915_gem_object_put_pages(obj) &&
229 !try_to_writeback(obj, shrink))
230 count += obj->base.size >> PAGE_SHIFT;
233 i915_gem_object_unlock(obj);
235 scanned += obj->base.size >> PAGE_SHIFT;
237 i915_gem_object_put(obj);
351 struct drm_i915_gem_object *obj;
369 list_for_each_entry(obj, &i915->mm.shrink_list, mm.link) {
370 if (!can_release_pages(obj))
371 unevictable += obj->base.size >> PAGE_SHIFT;
373 available += obj->base.size >> PAGE_SHIFT;
409 struct drm_i915_gem_object *obj = vma->obj;
414 if (!i915_gem_object_trylock(obj, NULL))
420 i915_gem_object_unlock(obj);
479 * @obj: The GEM object.
484 void i915_gem_object_make_unshrinkable(struct drm_i915_gem_object *obj)
486 struct drm_i915_private *i915 = obj_to_i915(obj);
495 if (atomic_add_unless(&obj->mm.shrink_pin, 1, 0))
499 if (!atomic_fetch_inc(&obj->mm.shrink_pin) &&
500 !list_empty(&obj->mm.link)) {
501 list_del_init(&obj->mm.link);
503 i915->mm.shrink_memory -= obj->base.size;
508 static void ___i915_gem_object_make_shrinkable(struct drm_i915_gem_object *obj,
511 struct drm_i915_private *i915 = obj_to_i915(obj);
514 if (!i915_gem_object_is_shrinkable(obj))
517 if (atomic_add_unless(&obj->mm.shrink_pin, -1, 1))
521 GEM_BUG_ON(!kref_read(&obj->base.refcount));
522 if (atomic_dec_and_test(&obj->mm.shrink_pin)) {
523 GEM_BUG_ON(!list_empty(&obj->mm.link));
525 list_add_tail(&obj->mm.link, head);
527 i915->mm.shrink_memory += obj->base.size;
537 * @obj: The GEM object.
543 void __i915_gem_object_make_shrinkable(struct drm_i915_gem_object *obj)
545 ___i915_gem_object_make_shrinkable(obj,
546 &obj_to_i915(obj)->mm.shrink_list);
553 * @obj: The GEM object.
559 void __i915_gem_object_make_purgeable(struct drm_i915_gem_object *obj)
561 ___i915_gem_object_make_shrinkable(obj,
562 &obj_to_i915(obj)->mm.purge_list);
569 * @obj: The GEM object.
575 void i915_gem_object_make_shrinkable(struct drm_i915_gem_object *obj)
577 GEM_BUG_ON(!i915_gem_object_has_pages(obj));
578 __i915_gem_object_make_shrinkable(obj);
586 * @obj: The GEM object.
592 void i915_gem_object_make_purgeable(struct drm_i915_gem_object *obj)
594 GEM_BUG_ON(!i915_gem_object_has_pages(obj));
595 __i915_gem_object_make_purgeable(obj);