FAILED: patch "[PATCH] drm/i915: Call intel_fbc_pre_update() after pinning the new" failed to apply to 4.8-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.8-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
1f061316cf556fe07804ca2eb30f7807cffc3f53Mon Sep 17 00:00:00 2001
From: Paulo Zanoni <[email protected]>
Date: Wed, 17 Aug 2016 16:41:44 -0300
Subject: [PATCH] drm/i915: Call intel_fbc_pre_update() after pinning the new
pageflip
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
intel_fbc_pre_update() depends upon the new state being already pinned in place in the Global GTT (primarily for both fencing which wants both an offset and a fence register, if assigned). This requires the call to intel_fbc_pre_update() be after intel_pin_and_fence_fb() - but commit e8216e502aca ("drm/i915/fbc: call intel_fbc_pre_update earlier during page flips") moved the code way too much up in its attempt to call it before the page flip.
v2 (from Paulo):
- Point the original bad commit.
- Add a comment to maybe prevent further regressions.
drivers/gpu/drm/i915/intel_display.c +11 -3
@@ -12094,9 +12094,6 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, crtc->primary->fb = fb;update_state_fb (crtc->primary); -intel_fbc_pre_update (intel_crtc, intel_crtc->config, -to_intel_plane_state (primary->state)); - work->pending_flip_obj =i915_gem_object_get (obj); ret =i915_mutex_lock_interruptible (dev);
@@ -12142,6 +12139,17 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, work->gtt_offset += intel_crtc->dspaddr_offset; work->rotation = crtc->primary->state->rotation; +/* +* There's the potential that the next frame will not be compatible with +* FBC, so we want to call pre_update() before the actual page flip. +* The problem is that pre_update() caches some information about the fb +* object, so we want to do this only after the object is pinned. Let's +* be on the safe side and do this immediately before scheduling the +* flip. +*/ +intel_fbc_pre_update (intel_crtc, intel_crtc->config, +to_intel_plane_state (primary->state)); +if (mmio_flip) {INIT_WORK (&work->mmio_work, intel_mmio_flip_work_func);