Commit 385384a8 authored by Chris Wilson's avatar Chris Wilson

drm/i915: Wrap the protected active RCU dereference in a helper

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: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1470728222-10243-2-git-send-email-chris@chris-wilson.co.uk
parent 2e7ba014
...@@ -359,6 +359,21 @@ __i915_gem_active_peek(const struct i915_gem_active *active) ...@@ -359,6 +359,21 @@ __i915_gem_active_peek(const struct i915_gem_active *active)
return rcu_dereference_protected(active->request, 1); 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 * i915_gem_active_peek - report the active request being monitored
* @active - the active tracker * @active - the active tracker
...@@ -372,8 +387,7 @@ i915_gem_active_peek(const struct i915_gem_active *active, struct mutex *mutex) ...@@ -372,8 +387,7 @@ i915_gem_active_peek(const struct i915_gem_active *active, struct mutex *mutex)
{ {
struct drm_i915_gem_request *request; struct drm_i915_gem_request *request;
request = rcu_dereference_protected(active->request, request = i915_gem_active_raw(active, mutex);
lockdep_is_held(mutex));
if (!request || i915_gem_request_completed(request)) if (!request || i915_gem_request_completed(request))
return NULL; return NULL;
...@@ -614,8 +628,7 @@ i915_gem_active_retire(struct i915_gem_active *active, ...@@ -614,8 +628,7 @@ i915_gem_active_retire(struct i915_gem_active *active,
struct drm_i915_gem_request *request; struct drm_i915_gem_request *request;
int ret; int ret;
request = rcu_dereference_protected(active->request, request = i915_gem_active_raw(active, mutex);
lockdep_is_held(mutex));
if (!request) if (!request)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment