1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/gpu/drm/i915/gem
Matthew Auld 3f882f2d4f drm/i915: improve the catch-all evict to handle lock contention
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: 7e00897be8 ("drm/i915: Add object locking to i915_gem_evict_for_node and i915_gem_evict_something, v2.")
References: https://gitlab.freedesktop.org/drm/intel/-/issues/7627
References: https://gitlab.freedesktop.org/drm/intel/-/issues/7570
References: https://bugzilla.mozilla.org/show_bug.cgi?id=1779558
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Mani Milani <mani@chromium.org>
Cc: <stable@vger.kernel.org> # v5.18+
Reviewed-by: Mani Milani <mani@chromium.org>
Tested-by: Mani Milani <mani@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20221216113456.414183-1-matthew.auld@intel.com
(cherry picked from commit 801fa7a81f)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2022-12-30 03:04:39 -05:00
..
selftests GVT Changes: 2022-11-23 09:15:44 +10:00
i915_gem_busy.c dma-buf: specify usage while adding fences to dma_resv obj v7 2022-04-07 12:53:53 +02:00
i915_gem_clflush.c drm/i915: Remove unused function parameter 2022-09-24 00:59:13 -04:00
i915_gem_clflush.h
i915_gem_context.c drm/i915: Partial abandonment of legacy DRM logging macros 2022-11-10 12:35:46 +00:00
i915_gem_context.h drm/i915/gem: Use to_gt() helper for GGTT accesses 2022-01-05 10:43:36 -08:00
i915_gem_context_types.h drm/i915: Fixup kerneldoc in struct i915_gem_context 2022-04-06 08:33:40 +01:00
i915_gem_create.c drm/i915/uapi: add NEEDS_CPU_ACCESS hint 2022-07-01 08:30:00 +01:00
i915_gem_create.h drm/i915: split out gem/i915_gem_create.h from i915_drv.h 2022-02-11 14:43:28 +02:00
i915_gem_dmabuf.c Merge tag 'drm-intel-gt-next-2022-11-18' of git://anongit.freedesktop.org/drm/drm-intel into drm-next 2022-11-22 13:51:03 +10:00
i915_gem_dmabuf.h drm/i915: split out gem/i915_gem_dmabuf.h from i915_drv.h 2022-02-11 13:50:37 +02:00
i915_gem_domain.c drm/i915: Rename ggtt_view as gtt_view 2022-09-08 10:24:17 +01:00
i915_gem_domain.h drm/i915: split out gem/i915_gem_domain.h from i915_drv.h 2022-02-14 11:25:52 +02:00
i915_gem_execbuffer.c drm/i915: improve the catch-all evict to handle lock contention 2022-12-30 03:04:39 -05:00
i915_gem_internal.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_internal.h drm/i915: split out i915_gem_internal.h from i915_drv.h 2022-02-11 12:52:50 +02:00
i915_gem_ioctls.h drm/i915/uapi: introduce drm_i915_gem_create_ext 2021-05-04 10:58:56 +01:00
i915_gem_lmem.c Merge tag 'drm-intel-next-2022-05-20' of git://anongit.freedesktop.org/drm/drm-intel into drm-intel-gt-next 2022-05-23 09:34:47 +01:00
i915_gem_lmem.h drm/i915: remove unused i915_gem_lmem_obj_ops declaration 2022-09-13 20:33:27 +03:00
i915_gem_mman.c drm/i915: improve the catch-all evict to handle lock contention 2022-12-30 03:04:39 -05:00
i915_gem_mman.h drm/i915/dgfx: Release mmap on rpm suspend 2022-09-14 18:19:59 +05:30
i915_gem_object.c drm/i915/ttm: consider CCS for backup objects 2022-12-14 12:56:58 -05:00
i915_gem_object.h drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_object_types.h drm/i915/ttm: consider CCS for backup objects 2022-12-14 12:56:58 -05:00
i915_gem_pages.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_phys.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_pm.c drm/i915: Encapsulate lmem rpm stuff in intel_runtime_pm 2022-10-31 18:29:17 +05:30
i915_gem_pm.h drm/i915 Implement LMEM backup and restore for suspend / resume 2021-09-24 08:19:11 +02:00
i915_gem_region.c drm/i915/ttm: fix 32b build 2022-07-17 14:53:47 -04:00
i915_gem_region.h drm/i915: add i915_gem_object_create_region_at() 2022-03-16 17:50:34 +00:00
i915_gem_shmem.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_shrinker.c - The usual batches of cleanups from Baoquan He, Muchun Song, Miaohe 2022-08-05 16:32:45 -07:00
i915_gem_shrinker.h drm/i915: Finally remove obj->mm.lock. 2021-03-24 17:47:20 +01:00
i915_gem_stolen.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_stolen.h drm/i915: add i915_gem_object_create_region_at() 2022-03-16 17:50:34 +00:00
i915_gem_throttle.c drm/i915: split out i915_file_private.h from i915_drv.h 2022-02-14 13:16:28 +02:00
i915_gem_tiling.c drm/i915: split gem quirks from display quirks 2022-08-29 14:31:53 +03:00
i915_gem_tiling.h drm/i915: move i915_gem_object_needs_bit17_swizzle() to i915_gem_tiling.[ch] 2022-03-17 11:35:36 +02:00
i915_gem_ttm.c drm/i915/ttm: never purge busy objects 2022-11-21 09:41:13 +00:00
i915_gem_ttm.h drm/i915: Refactor ttm ghost obj detection 2022-10-19 13:29:21 +01:00
i915_gem_ttm_move.c drm/i915: Refactor ttm ghost obj detection 2022-10-19 13:29:21 +01:00
i915_gem_ttm_move.h drm/i915/ttm: handle blitter failure on DG2 2022-07-01 08:30:00 +01:00
i915_gem_ttm_pm.c drm/i915/ttm: consider CCS for backup objects 2022-12-14 12:56:58 -05:00
i915_gem_ttm_pm.h drm/i915 Implement LMEM backup and restore for suspend / resume 2021-09-24 08:19:11 +02:00
i915_gem_userptr.c drm/i915: use i915_sg_dma_sizes() for all backends 2022-11-09 10:07:22 +00:00
i915_gem_userptr.h drm/i915: split out gem/i915_gem_userptr.h from i915_drv.h 2022-01-10 15:43:19 +02:00
i915_gem_wait.c drm/i915/gem: Look for waitboosting across the whole object prior to individual waits 2022-07-12 18:21:55 -04:00
i915_gemfs.c drm/i915: Only setup private tmpfs mount when needed and fix logging 2022-05-09 14:03:50 +01:00
i915_gemfs.h drm/i915: Only setup private tmpfs mount when needed and fix logging 2022-05-09 14:03:50 +01:00