drm/i915: Wrap the protected active RCU dereference in a helper
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 9 Aug 2016 07:37:01 +0000 (08:37 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 9 Aug 2016 08:11:59 +0000 (09:11 +0100)
As we do the lockdep protected RCU lookup in a couple of places,
refactor that code to a common helper i915_gem_active_raw().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1470728222-10243-2-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem_request.h

index 583e237b98d1dd5c718cff0cf1b7b359df6d67ef..f6661f31a34845a90adb25b6efadf707468d3410 100644 (file)
@@ -359,6 +359,21 @@ __i915_gem_active_peek(const struct i915_gem_active *active)
        return rcu_dereference_protected(active->request, 1);
 }
 
+/**
+ * i915_gem_active_raw - return the active request
+ * @active - the active tracker
+ *
+ * i915_gem_active_raw() returns the current request being tracked, or NULL.
+ * It does not obtain a reference on the request for the caller, so the caller
+ * must hold struct_mutex.
+ */
+static inline struct drm_i915_gem_request *
+i915_gem_active_raw(const struct i915_gem_active *active, struct mutex *mutex)
+{
+       return rcu_dereference_protected(active->request,
+                                        lockdep_is_held(mutex));
+}
+
 /**
  * i915_gem_active_peek - report the active request being monitored
  * @active - the active tracker
@@ -372,8 +387,7 @@ i915_gem_active_peek(const struct i915_gem_active *active, struct mutex *mutex)
 {
        struct drm_i915_gem_request *request;
 
-       request = rcu_dereference_protected(active->request,
-                                           lockdep_is_held(mutex));
+       request = i915_gem_active_raw(active, mutex);
        if (!request || i915_gem_request_completed(request))
                return NULL;
 
@@ -614,8 +628,7 @@ i915_gem_active_retire(struct i915_gem_active *active,
        struct drm_i915_gem_request *request;
        int ret;
 
-       request = rcu_dereference_protected(active->request,
-                                           lockdep_is_held(mutex));
+       request = i915_gem_active_raw(active, mutex);
        if (!request)
                return 0;