linux/drivers/gpu/drm/i915/gem
Chris Wilson c2314b8bd4 drm/i915/gem: Reduce context termination list iteration guard to RCU
As we now protect the timeline list using RCU, we can drop the
timeline->mutex for guarding the list iteration during context close, as
we are searching for an inflight request. Any new request will see the
context is banned and not be submitted. In doing so, pull the checks for
a concurrent submission of the request (notably the
i915_request_completed()) under the engine spinlock, to fully serialise
with __i915_request_submit()). That is in the case of preempt-to-busy
where the request may be completed during the __i915_request_submit(),
we need to be careful that we sample the request status after
serialising so that we don't miss the request the engine is actually
submitting.

Fixes: 4a31741521 ("drm/i915/gem: Refine occupancy test in kill_context()")
References: d22d2d073e ("drm/i915: Protect i915_request_await_start from early waits") # rcu protection of timeline->requests
References: https://gitlab.freedesktop.org/drm/intel/-/issues/1622
References: https://gitlab.freedesktop.org/drm/intel/-/issues/2158
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200806105954.7766-1-chris@chris-wilson.co.uk
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
(cherry picked from commit 736e785f9b)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2020-09-16 11:09:43 +03:00
..
selftests Revert "drm/i915/gem: Async GPU relocations only" 2020-09-08 15:45:17 +10:00
i915_gem_busy.c drm/i915: Align engine->uabi_class/instance with i915_drm.h 2020-01-20 09:13:01 +00:00
i915_gem_clflush.c drm/i915: Replace the hardcoded I915_FENCE_TIMEOUT 2020-05-09 12:57:57 +01:00
i915_gem_clflush.h
i915_gem_client_blt.c drm/i915: Export ppgtt_bind_vma 2020-07-03 15:14:35 +01:00
i915_gem_client_blt.h
i915_gem_context_types.h drm/i915/gem: Split the context's obj:vma lut into its own mutex 2020-07-03 10:13:13 +01:00
i915_gem_context.c drm/i915/gem: Reduce context termination list iteration guard to RCU 2020-09-16 11:09:43 +03:00
i915_gem_context.h drm/i915/sseu: Move sseu_info under gt_info 2020-07-08 21:13:09 +01:00
i915_gem_dmabuf.c drm/i915/gem: Give each object class a friendly name 2020-05-29 23:38:29 +01:00
i915_gem_domain.c drm/i915/gem: Remove object_is_locked assertion from unpin_from_display_plane 2020-05-06 15:37:31 -07:00
i915_gem_execbuffer.c Revert "drm/i915/gem: Delete unused code" 2020-09-08 15:45:27 +10:00
i915_gem_fence.c drm/i915: Replace the hardcoded I915_FENCE_TIMEOUT 2020-05-09 12:57:57 +01:00
i915_gem_internal.c drm/i915/gem: Give each object class a friendly name 2020-05-29 23:38:29 +01:00
i915_gem_ioctls.h drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET 2019-12-04 15:11:44 +00:00
i915_gem_lmem.c drm/i915/gem: Give each object class a friendly name 2020-05-29 23:38:29 +01:00
i915_gem_lmem.h drm/i915/gem: Support discontiguous lmem object maps 2020-01-03 11:26:01 +00:00
i915_gem_mman.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
i915_gem_mman.h drm/i915/gem: Only revoke mmap handlers if active 2020-07-02 20:46:08 +01:00
i915_gem_object_blt.c drm/i915: Remove redundant i915_request_await_object in blit clears 2020-06-16 21:53:56 +01:00
i915_gem_object_blt.h drm/i915/gt: Move the batch buffer pool from the engine to the gt 2020-04-30 19:12:02 +01:00
i915_gem_object_types.h drm/i915/gem: Move obj->lut_list under its own lock 2020-07-01 11:58:49 +01:00
i915_gem_object.c drm/i915/gem: Split the context's obj:vma lut into its own mutex 2020-07-03 10:13:13 +01:00
i915_gem_object.h Revert "drm/i915: Remove i915_gem_object_get_dirty_page()" 2020-09-08 15:44:07 +10:00
i915_gem_pages.c Revert "drm/i915: Remove i915_gem_object_get_dirty_page()" 2020-09-08 15:44:07 +10:00
i915_gem_phys.c Merge drm/drm-next into drm-intel-next-queued 2020-06-25 18:05:03 +03:00
i915_gem_pm.c drm/i915/gem: Make WARN* drm specific where drm_priv ptr is available 2020-01-22 17:52:39 +02:00
i915_gem_pm.h
i915_gem_region.c drm/i915/gem: Single page objects are naturally contiguous 2020-01-02 21:21:17 +00:00
i915_gem_region.h
i915_gem_shmem.c drm/i915/gem: Give each object class a friendly name 2020-05-29 23:38:29 +01:00
i915_gem_shrinker.c drm/i915/gem: Unpin idle contexts from kswapd reclaim 2020-07-08 22:05:49 +01:00
i915_gem_shrinker.h
i915_gem_stolen.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
i915_gem_stolen.h drm/i915/display: Be explicit in handling the preallocated vma 2020-02-05 09:20:39 +00:00
i915_gem_throttle.c
i915_gem_tiling.c drm/i915/gem: Only revoke the GGTT mmappings on aperture detiling changes 2020-07-02 20:46:08 +01:00
i915_gem_userptr.c Merge branch 'simplify-do_wp_page' 2020-09-04 09:31:54 -07:00
i915_gem_wait.c
i915_gemfs.c
i915_gemfs.h