Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -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;