diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_request.h | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_overlay.c | 3 |
2 files changed, 21 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_request.h b/drivers/gpu/drm/i915/i915_gem_request.h index e2b077df2da0..d229f47d1028 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.h +++ b/drivers/gpu/drm/i915/i915_gem_request.h | |||
@@ -413,6 +413,25 @@ i915_gem_active_set(struct i915_gem_active *active, | |||
413 | rcu_assign_pointer(active->request, request); | 413 | rcu_assign_pointer(active->request, request); |
414 | } | 414 | } |
415 | 415 | ||
416 | /** | ||
417 | * i915_gem_active_set_retire_fn - updates the retirement callback | ||
418 | * @active - the active tracker | ||
419 | * @fn - the routine called when the request is retired | ||
420 | * @mutex - struct_mutex used to guard retirements | ||
421 | * | ||
422 | * i915_gem_active_set_retire_fn() updates the function pointer that | ||
423 | * is called when the final request associated with the @active tracker | ||
424 | * is retired. | ||
425 | */ | ||
426 | static inline void | ||
427 | i915_gem_active_set_retire_fn(struct i915_gem_active *active, | ||
428 | i915_gem_retire_fn fn, | ||
429 | struct mutex *mutex) | ||
430 | { | ||
431 | lockdep_assert_held(mutex); | ||
432 | active->retire = fn ?: i915_gem_retire_noop; | ||
433 | } | ||
434 | |||
416 | static inline struct drm_i915_gem_request * | 435 | static inline struct drm_i915_gem_request * |
417 | __i915_gem_active_peek(const struct i915_gem_active *active) | 436 | __i915_gem_active_peek(const struct i915_gem_active *active) |
418 | { | 437 | { |
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index ef7dfea40242..57ef9c88843c 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c | |||
@@ -216,7 +216,8 @@ static void intel_overlay_submit_request(struct intel_overlay *overlay, | |||
216 | { | 216 | { |
217 | GEM_BUG_ON(i915_gem_active_peek(&overlay->last_flip, | 217 | GEM_BUG_ON(i915_gem_active_peek(&overlay->last_flip, |
218 | &overlay->i915->drm.struct_mutex)); | 218 | &overlay->i915->drm.struct_mutex)); |
219 | overlay->last_flip.retire = retire; | 219 | i915_gem_active_set_retire_fn(&overlay->last_flip, retire, |
220 | &overlay->i915->drm.struct_mutex); | ||
220 | i915_gem_active_set(&overlay->last_flip, req); | 221 | i915_gem_active_set(&overlay->last_flip, req); |
221 | i915_add_request(req); | 222 | i915_add_request(req); |
222 | } | 223 | } |