@@ -30,6 +30,10 @@
#include "i915_drv.h"
+static long __i915_request_wait(struct i915_request *rq,
+ unsigned int flags,
+ long timeout);
+
static const char *i915_fence_get_driver_name(struct dma_fence *fence)
{
return "i915";
@@ -66,7 +70,7 @@ static signed long i915_fence_wait(struct dma_fence *fence,
bool interruptible,
signed long timeout)
{
- return i915_request_wait(to_request(fence), interruptible, timeout);
+ return __i915_request_wait(to_request(fence), interruptible, timeout);
}
static void i915_fence_release(struct dma_fence *fence)
@@ -1201,6 +1205,19 @@ static bool __i915_wait_request_check_and_reset(struct i915_request *request)
long i915_request_wait(struct i915_request *rq,
unsigned int flags,
long timeout)
+{
+ long ret;
+
+ dma_fence_wait_acquire();
+ ret = __i915_request_wait(rq, flags, timeout);
+ dma_fence_wait_release();
+
+ return ret;
+}
+
+static long __i915_request_wait(struct i915_request *rq,
+ unsigned int flags,
+ long timeout)
{
const int state = flags & I915_WAIT_INTERRUPTIBLE ?
TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE;
i915_request_wait is simply our i915-optimized version of dma_fence_wait. They both use the exact same code. To help lockdep discovering all the dependencies, annotate it. Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: intel-gfx@lists.freedesktop.org Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> --- drivers/gpu/drm/i915/i915_request.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)