Commit 65417489 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush()



intel_bo_frontbuffer_flush_for_display() is a bit too low level
to be directly in the high level dirtyfb code. Move the calls
into intel_frontbuffer_flush().

There is a slight behavioural change here in that we now skip
the flush if the bo is not a current scanout buffer (front->bits
== 0). But that is fine as the flush will eventually happen via
the fb pinning code if/when the bo becomes a scanout buffer again.

Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patch.msgid.link/20251016185408.22735-6-ville.syrjala@linux.intel.com


Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 5391ab25
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2193,7 +2193,6 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,
	return ret;

flush:
	intel_bo_frontbuffer_flush_for_display(front);
	intel_frontbuffer_flush(front, ORIGIN_DIRTYFB);
	return ret;
}
+3 −1
Original line number Diff line number Diff line
@@ -150,6 +150,9 @@ void __intel_fb_flush(struct intel_frontbuffer *front,
{
	struct intel_display *display = to_intel_display(front->obj->dev);

	if (origin == ORIGIN_DIRTYFB)
		intel_bo_frontbuffer_flush_for_display(front);

	if (origin == ORIGIN_CS) {
		spin_lock(&display->fb_tracking.lock);
		/* Filter out new bits since rendering started. */
@@ -167,7 +170,6 @@ static void intel_frontbuffer_flush_work(struct work_struct *work)
	struct intel_frontbuffer *front =
		container_of(work, struct intel_frontbuffer, flush_work);

	intel_bo_frontbuffer_flush_for_display(front);
	intel_frontbuffer_flush(front, ORIGIN_DIRTYFB);
	intel_frontbuffer_put(front);
}