tree:
git://people.freedesktop.org/~mlankhorst/linux locking-rework
head: df835d9d9fee30c2d4584242c64c8b32eae0d0a4
commit: df835d9d9fee30c2d4584242c64c8b32eae0d0a4 [30/30] how to implement eviction
:::::: branch date: 10 hours ago
:::::: commit date: 10 hours ago
config: x86_64-randconfig-s022-20200710 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-14) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-37-gc9676a3b-dirty
git checkout df835d9d9fee30c2d4584242c64c8b32eae0d0a4
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:213:54: sparse: sparse: no member
'lock' in struct <unnamed>
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:94:1: sparse: sparse: symbol
'i915_gem_shrink' redeclared with different type (incompatible argument 1
(different base types)):
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:94:1: sparse:
unsigned long extern [addressable] [toplevel] [unsigned] i915_gem_shrink( ... )
drivers/gpu/drm/i915/gem/i915_gem_shrinker.h:15:15: sparse: note: previously declared as:
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.h:15:15: sparse:
unsigned long extern [addressable] [toplevel] [unsigned] i915_gem_shrink( ... )
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:304:33: sparse: sparse: incorrect type
in argument 1 (different base types) @@ expected struct i915_gem_ww_ctx *ww @@ got
struct drm_i915_private *i915 @@
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:304:33: sparse: expected struct
i915_gem_ww_ctx *ww
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:304:33: sparse: got struct
drm_i915_private *i915
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:305:35: sparse: sparse: incorrect type
in argument 2 (different base types) @@ expected struct drm_i915_private *i915 @@
got unsigned long nr_to_scan @@
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:305:35: sparse: expected struct
drm_i915_private *i915
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:305:35: sparse: got unsigned long
nr_to_scan
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:306:34: sparse: sparse: incorrect type
in argument 3 (different base types) @@ expected unsigned long target @@ got
unsigned long * @@
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:306:34: sparse: expected unsigned
long target
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:306:34: sparse: got unsigned long *
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:307:51: sparse: sparse: incorrect type
in argument 4 (different base types) @@ expected unsigned long *nr_scanned @@ got
unsigned long @@
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:307:51: sparse: expected unsigned
long *nr_scanned
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:307:51: sparse:
got unsigned long
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:304:32: sparse:
sparse: not enough arguments for function i915_gem_shrink
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:313:49: sparse: sparse: not enough arguments
for function i915_gem_shrink
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:48: sparse: sparse: incorrect type in
argument 1 (different base types) @@ expected struct i915_gem_ww_ctx *ww @@ got
struct drm_i915_private *i915 @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:48: sparse: expected struct
i915_gem_ww_ctx *ww
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:48: sparse: got struct
drm_i915_private *i915
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:54: sparse:
sparse: incorrect type in argument 2 (different base types) @@ expected struct
drm_i915_private *i915 @@ got unsigned long @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:54: sparse: expected struct
drm_i915_private *i915
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:54: sparse: got unsigned long
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:60: sparse:
sparse: incorrect type in argument 3 (different base types) @@ expected unsigned long
target @@ got void * @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:60:
sparse: expected unsigned long target
> drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:60: sparse:
got void *
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:340:68: sparse: sparse:
incorrect type in argument 4 (different base types) @@ expected unsigned long
*nr_scanned @@ got unsigned long @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:340:68: sparse: expected unsigned long
*nr_scanned
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:340:68: sparse: got unsigned long
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:338:47: sparse: sparse: not enough
arguments for function i915_gem_shrink
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:48: sparse: sparse: incorrect type in
argument 1 (different base types) @@ expected struct i915_gem_ww_ctx *ww @@ got
struct drm_i915_private *i915 @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:48: sparse: expected struct
i915_gem_ww_ctx *ww
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:48: sparse: got struct
drm_i915_private *i915
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:54: sparse: sparse: incorrect type in
argument 2 (different base types) @@ expected struct drm_i915_private *i915 @@ got
unsigned long @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:54: sparse: expected struct
drm_i915_private *i915
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:54: sparse: got unsigned long
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:60: sparse: sparse: incorrect type in
argument 3 (different base types) @@ expected unsigned long target @@ got void *
@@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:60: sparse: expected unsigned long
target
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:60: sparse: got void *
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:378:68: sparse: sparse: incorrect type in
argument 4 (different base types) @@ expected unsigned long *nr_scanned @@ got
unsigned long @@
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:378:68: sparse: expected unsigned long
*nr_scanned
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:378:68: sparse: got unsigned long
drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:376:47: sparse: sparse: not enough
arguments for function i915_gem_shrink
git remote add mlankhorst
git://people.freedesktop.org/~mlankhorst/linux
git remote update mlankhorst
git checkout df835d9d9fee30c2d4584242c64c8b32eae0d0a4
vim +94 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
2d6692e642e7ca drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2019-04-20 67
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 68 /**
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 69 * i915_gem_shrink - Shrink buffer object caches
56fa4bf2b2f084 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-11-23 70 * @i915: i915 device
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 71 * @target: amount of memory to make available, in pages
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 72 * @nr_scanned: optional output for number of pages scanned
(incremental)
70972f51819a22 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-12 73 * @shrink: control flags for selecting cache types
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 74 *
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 75 * This function is the main interface to the shrinker. It will try to
release
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 76 * up to @target pages of main memory backing storage from buffer
objects.
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 77 * Selection of the specific caches can be done with @flags. This is e.g.
useful
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 78 * when purgeable objects should be removed from caches preferentially.
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 79 *
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 80 * Note that it's not guaranteed that released amount is actually
available as
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 81 * free system memory - the pages might still be in-used to due to other
reasons
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 82 * (like cpu mmaps) or the mm core has reused them before we could grab
them.
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 83 * Therefore code that needs to explicitly shrink buffer objects caches
(e.g. to
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 84 * avoid deadlocks in memory reclaim) must fall back to
i915_gem_shrink_all().
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 85 *
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 86 * Also note that any kind of pinning (both per-vma address space pins
and
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 87 * backing storage pins at the buffer object level) result in the
shrinker code
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 88 * having to skip the object.
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 89 *
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 90 * Returns:
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 91 * The number of pages of backing storage actually released.
eb0b44adc08c0b drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 92 */
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 93 unsigned long
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 @94 i915_gem_shrink(struct i915_gem_ww_ctx *ww,
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 95 struct drm_i915_private *i915,
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 96 unsigned long target,
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 97 unsigned long *nr_scanned,
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 98 unsigned int shrink)
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 99 {
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 100 const struct {
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 101 struct list_head *list;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 102 unsigned int bit;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 103 } phases[] = {
3b4fa9640ccded drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-05-30 104 { &i915->mm.purge_list, ~0u },
ecab9be174d98f drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-12 105 {
ecab9be174d98f drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-12 106 &i915->mm.shrink_list,
ecab9be174d98f drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-12 107 I915_SHRINK_BOUND | I915_SHRINK_UNBOUND
ecab9be174d98f drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-12 108 },
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 109 { NULL, 0 },
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 110 }, *phase;
538ef96b9dae7f drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2019-01-14 111 intel_wakeref_t wakeref = 0;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 112 unsigned long count = 0;
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 113 unsigned long scanned = 0;
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 114 int err;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 115
2f6a3783833dde drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-11-08 116 /*
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 117 * When shrinking the active list, we should also consider active
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 118 * contexts. Active contexts are pinned until they are retired, and
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 119 * so can not be simply unbound to retire and unpin their pages. To
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 120 * shrink the contexts, we must wait until the gpu is idle and
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 121 * completed its switch to the kernel context. In short, we do
ce476c80b8bfa8 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-14 122 * not have a good mechanism for idling a specific context.
2f6a3783833dde drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-11-08 123 */
2f6a3783833dde drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-11-08 124
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 125 trace_i915_gem_shrink(i915, target, shrink);
3abafa539d2c17 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-10-01 126
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 127 /*
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 128 * Unbinding of objects will require HW access; Let us not wake the
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 129 * device just to recover a little memory. If absolutely necessary,
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 130 * we will force the wake during oom-notifier.
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 131 */
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 132 if (shrink & I915_SHRINK_BOUND) {
d858d5695f3897 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Daniele Ceraolo Spurio
2019-06-13 133 wakeref = intel_runtime_pm_get_if_in_use(&i915->runtime_pm);
538ef96b9dae7f drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2019-01-14 134 if (!wakeref)
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 135 shrink &= ~I915_SHRINK_BOUND;
538ef96b9dae7f drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2019-01-14 136 }
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 137
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 138 /*
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 139 * As we may completely rewrite the (un)bound list whilst unbinding
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 140 * (due to retiring requests) we have to strictly process only
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 141 * one element of the list at the time, and recheck the list
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 142 * on every iteration.
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 143 *
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 144 * In particular, we must hold a reference whilst removing the
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 145 * object as we may end up waiting for and/or retiring the objects.
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 146 * This might release the final reference (held by the active list)
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 147 * and result in the object being freed from under us. This is
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 148 * similar to the precautions the eviction code must take whilst
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 149 * removing objects.
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 150 *
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 151 * Also note that although these lists do not hold a reference to
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 152 * the object we can safely grab one here: The final object
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 153 * unreferencing and the bound_list are both protected by the
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 154 * dev->struct_mutex and so we won't ever be able to observe an
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 155 * object on the bound_list with a reference count equals 0.
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 156 */
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 157 for (phase = phases; phase->list; phase++) {
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 158 struct list_head still_in_list;
2a1d775201081c drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-07-26 159 struct drm_i915_gem_object *obj;
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 160 unsigned long flags;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 161
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 162 if ((shrink & phase->bit) == 0)
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 163 continue;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 164
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 165 INIT_LIST_HEAD(&still_in_list);
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 166
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 167 /*
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 168 * We serialize our access to unreferenced objects through
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 169 * the use of the struct_mutex. While the objects are not
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 170 * yet freed (due to RCU then a workqueue) we still want
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 171 * to be able to shrink their pages, so they remain on
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 172 * the unbound/bound list until actually freed.
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 173 */
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 174 spin_lock_irqsave(&i915->mm.obj_lock, flags);
2a1d775201081c drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-07-26 175 while (count < target &&
2a1d775201081c drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-07-26 176 (obj = list_first_entry_or_null(phase->list,
2a1d775201081c drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-07-26 177 typeof(*obj),
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 178 mm.link))) {
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 179 list_move_tail(&obj->mm.link, &still_in_list);
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 180
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 181 if (shrink & I915_SHRINK_VMAPS &&
a4f5ea64f0a818 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-10-28 182 !is_vmalloc_addr(obj->mm.mapping))
eae2c43b1233f8 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-04-08 183 continue;
eae2c43b1233f8 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-04-08 184
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 185 if (!(shrink & I915_SHRINK_ACTIVE) &&
c03467ba40f783 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-07-03 186 i915_gem_object_is_framebuffer(obj))
5763ff04dc4ebd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-10-01 187 continue;
5763ff04dc4ebd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-10-01 188
c1a415e261aad0 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-12-04 189 if (!can_release_pages(obj))
c1a415e261aad0 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-12-04 190 continue;
c1a415e261aad0 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2015-12-04 191
0bd6cb6b58f733 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-18 192 if (!kref_get_unless_zero(&obj->base.refcount))
0bd6cb6b58f733 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-18 193 continue;
0bd6cb6b58f733 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-18 194
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 195 spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 196
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 197 err = 0;
c03467ba40f783 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-07-03 198 if (unsafe_drop_pages(obj, shrink)) {
7b7a119e8546e2 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-10-31 199 /* May arrive from get_pages on another bo */
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 200 if (!ww) {
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 201 if (!i915_gem_object_trylock(obj))
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 202 goto skip;
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 203 } else {
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 204 err = i915_gem_object_lock(obj, ww);
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 205 if (err)
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 206 goto skip;
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 207 }
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 208
f1fa4f442c82eb drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-13 209 if (!i915_gem_object_has_pages(obj)) {
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 210 try_to_writeback(obj, shrink);
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 211 count += obj->base.size >> PAGE_SHIFT;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 212 }
1233e2db199dea drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-10-28 @213 mutex_unlock(&obj->mm.lock);
1233e2db199dea drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-10-28 214 }
0bd6cb6b58f733 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-18 215
4e773c3a8a693e drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-13 216 scanned += obj->base.size >> PAGE_SHIFT;
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 217 skip:
0bd6cb6b58f733 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-18 218 i915_gem_object_put(obj);
f2123818ffad03 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-10-16 219
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 220 spin_lock_irqsave(&i915->mm.obj_lock, flags);
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 221 if (err)
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 222 break;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 223 }
535972771d8c99 drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2016-11-01 224 list_splice_tail(&still_in_list, phase->list);
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 225 spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 226 if (err)
df835d9d9fee30 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Maarten Lankhorst
2020-07-10 227 return err;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 228 }
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 229
a8cff4c8283af3 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Chris Wilson
2019-06-10 230 if (shrink & I915_SHRINK_BOUND)
d858d5695f3897 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c Daniele Ceraolo Spurio
2019-06-13 231 intel_runtime_pm_put(&i915->runtime_pm, wakeref);
178a30c90ac74e drivers/gpu/drm/i915/i915_gem_shrinker.c Praveen Paneri
2016-05-02 232
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 233 if (nr_scanned)
912d572d63b8cd drivers/gpu/drm/i915/i915_gem_shrinker.c Chris Wilson
2017-09-06 234 *nr_scanned += scanned;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 235 return count;
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 236 }
be6a0376950475 drivers/gpu/drm/i915/i915_gem_shrinker.c Daniel Vetter
2015-03-18 237
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org