mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
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: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/20251016185408.22735-6-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
5391ab2542
commit
6541748954
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user