drm/i915: Protect i915_request_await_start from early waits
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 27 Feb 2020 08:57:14 +0000 (08:57 +0000)
committerJani Nikula <jani.nikula@intel.com>
Mon, 2 Mar 2020 10:10:46 +0000 (12:10 +0200)
commit0b1570b7ffe68dfefa07cb092a0723f898bb8184
tree769ba17043aed00537e84aa22e8fe65e6ee4010c
parenteddf309a8ed42eb3312b17a6934686b018189cd3
drm/i915: Protect i915_request_await_start from early waits

We need to be extremely careful inside i915_request_await_start() as it
needs to walk the list of requests in the foreign timeline with very
little protection. As we hold our own timeline mutex, we can not nest
inside the signaler's timeline mutex, so all that remains is our RCU
protection. However, to be safe we need to tell the compiler that we may
be traversing the list only under RCU protection, and furthermore we
need to start declaring requests as elements of the timeline from their
construction.

Fixes: 9ddc8ec027a3 ("drm/i915: Eliminate the trylock for awaiting an earlier request")
Fixes: 6a79d848403d ("drm/i915: Lock signaler timeline while navigating")
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/20200227085723.1961649-11-chris@chris-wilson.co.uk
(cherry picked from commit d22d2d073ef859b346bc32cb25299262e3973769)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_request.c