mirror of https://github.com/torvalds/linux.git
The catch-all evict can fail due to object lock contention, since it only goes as far as trylocking the object, due to us already holding the vm->mutex. Doing a full object lock here can deadlock, since the vm->mutex is always our inner lock. Add another execbuf pass which drops the vm->mutex and then tries to grab the object will the full lock, before then retrying the eviction. This should be good enough for now to fix the immediate regression with userspace seeing -ENOSPC from execbuf due to contended object locks during GTT eviction. v2 (Mani) - Also revamp the docs for the different passes. Testcase: igt@gem_ppgtt@shrink-vs-evict-* Fixes: |
||
|---|---|---|
| .. | ||
| i915_active.c | ||
| i915_gem.c | ||
| i915_gem_evict.c | ||
| i915_gem_gtt.c | ||
| i915_live_selftests.h | ||
| i915_mock_selftests.h | ||
| i915_perf.c | ||
| i915_perf_selftests.h | ||
| i915_random.c | ||
| i915_random.h | ||
| i915_request.c | ||
| i915_selftest.c | ||
| i915_sw_fence.c | ||
| i915_syncmap.c | ||
| i915_vma.c | ||
| igt_atomic.c | ||
| igt_atomic.h | ||
| igt_flush_test.c | ||
| igt_flush_test.h | ||
| igt_live_test.c | ||
| igt_live_test.h | ||
| igt_mmap.c | ||
| igt_mmap.h | ||
| igt_reset.c | ||
| igt_reset.h | ||
| igt_spinner.c | ||
| igt_spinner.h | ||
| intel_memory_region.c | ||
| intel_scheduler_helpers.c | ||
| intel_scheduler_helpers.h | ||
| intel_uncore.c | ||
| lib_sw_fence.c | ||
| lib_sw_fence.h | ||
| librapl.c | ||
| librapl.h | ||
| mock_drm.h | ||
| mock_gem_device.c | ||
| mock_gem_device.h | ||
| mock_gtt.c | ||
| mock_gtt.h | ||
| mock_region.c | ||
| mock_region.h | ||
| mock_request.c | ||
| mock_request.h | ||
| mock_uncore.c | ||
| mock_uncore.h | ||
| scatterlist.c | ||