The intel_frontbuffer_get() and intel_frontbuffer_put() calls are routed through intel_frontbuffer.c to i915_gem_object_frontbuffer.c. We might as well call the functions directly, instead of going through display code. This would only get worse with get/put being moved to the parent interface.
To make this easier, convert overlay code from struct intel_frontbuffer to struct i915_frontbuffer, and add a i915_gem_object_frontbuffer_track() wrapper for clarity. Signed-off-by: Jani Nikula <[email protected]> --- .../gpu/drm/i915/gem/i915_gem_object_frontbuffer.h | 10 ++++++++++ drivers/gpu/drm/i915/i915_overlay.c | 12 ++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h index 1c250ce4ca66..46124048a59f 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h @@ -45,6 +45,16 @@ struct i915_frontbuffer *i915_gem_object_frontbuffer_get(struct drm_i915_gem_obj void i915_gem_object_frontbuffer_ref(struct i915_frontbuffer *front); void i915_gem_object_frontbuffer_put(struct i915_frontbuffer *front); +static inline void i915_gem_object_frontbuffer_track(struct i915_frontbuffer *_old, + struct i915_frontbuffer *_new, + unsigned int frontbuffer_bits) +{ + struct intel_frontbuffer *old = _old ? &_old->base : NULL; + struct intel_frontbuffer *new = _new ? &_new->base : NULL; + + intel_frontbuffer_track(old, new, frontbuffer_bits); +} + /** * i915_gem_object_frontbuffer_lookup - Look up the object's frontbuffer * @obj: The object whose frontbuffer to look up. diff --git a/drivers/gpu/drm/i915/i915_overlay.c b/drivers/gpu/drm/i915/i915_overlay.c index 28518dbb5b8e..f07a07b90b2a 100644 --- a/drivers/gpu/drm/i915/i915_overlay.c +++ b/drivers/gpu/drm/i915/i915_overlay.c @@ -30,7 +30,7 @@ struct i915_overlay { struct intel_context *context; struct i915_vma *vma; struct i915_vma *old_vma; - struct intel_frontbuffer *frontbuffer; + struct i915_frontbuffer *frontbuffer; /* register access */ struct drm_i915_gem_object *reg_bo; void __iomem *regs; @@ -138,18 +138,18 @@ static void i915_overlay_flip_prepare(struct i915_overlay *overlay, struct i915_vma *vma) { struct drm_i915_private *i915 = overlay->i915; - struct intel_frontbuffer *frontbuffer = NULL; + struct i915_frontbuffer *frontbuffer = NULL; drm_WARN_ON(&i915->drm, overlay->old_vma); if (vma) - frontbuffer = intel_frontbuffer_get(intel_bo_to_drm_bo(vma->obj)); + frontbuffer = i915_gem_object_frontbuffer_get(vma->obj); - intel_frontbuffer_track(overlay->frontbuffer, frontbuffer, - overlay->frontbuffer_bits); + i915_gem_object_frontbuffer_track(overlay->frontbuffer, frontbuffer, + overlay->frontbuffer_bits); if (overlay->frontbuffer) - intel_frontbuffer_put(overlay->frontbuffer); + i915_gem_object_frontbuffer_put(overlay->frontbuffer); overlay->frontbuffer = frontbuffer; overlay->old_vma = overlay->vma; -- 2.47.3
