Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: Decouple the object from the unbound list before freeing pages

As we may actually allocate in order to save the physical swizzling bits
during the free, we have to be careful not to trigger the shrinker on
the same object.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
[danvet: Added a small comment in the code to really drive the
scariness of this patch home.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

authored by

Chris Wilson and committed by
Daniel Vetter
a2165e31 7b01e260

+5 -1
+5 -1
drivers/gpu/drm/i915/i915_gem.c
··· 1696 1696 if (obj->pages_pin_count) 1697 1697 return -EBUSY; 1698 1698 1699 + /* ->put_pages might need to allocate memory for the bit17 swizzle 1700 + * array, hence protect them from being reaped by removing them from gtt 1701 + * lists early. */ 1702 + list_del(&obj->gtt_list); 1703 + 1699 1704 ops->put_pages(obj); 1700 1705 obj->pages = NULL; 1701 1706 1702 - list_del(&obj->gtt_list); 1703 1707 if (i915_gem_object_is_purgeable(obj)) 1704 1708 i915_gem_object_truncate(obj); 1705 1709