In intel_crtc_page_flip, intel_display.c, the code changed the framebuffer assigned to plane crtc->primary by crtc->primary->fb = fb; However, it forgot to change crtc->primary->state->fb. However, when we switch to console, some kernel code will read crtc->primary->state->fb to get the framebuffer assigned to crtc->primaty. Then a framebuffer object can be unpinned twice and a kernel BUG will be produced in i915_gem.c. So, update crtc->primary->state->fb in intel_display.c using drm_atomic_set_fb_for_plane to fix the BUG. Signed-off-by: Xi Ruoyao <xry111@xxxxxxxxxxx> Fixed: Bug 93711 <https://bugzilla.kernel.org/show_bug.cgi?id=93711> --- Sorry, the previous patch is mangled by email client, so I am re-sending it. drivers/gpu/drm/i915/intel_display.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index e730789..97083fd 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -37,6 +37,7 @@ #include <drm/i915_drm.h> #include "i915_drv.h" #include "i915_trace.h" +#include <drm/drm_atomic.h> #include <drm/drm_atomic_helper.h> #include <drm/drm_dp_helper.h> #include <drm/drm_crtc_helper.h> @@ -9816,6 +9817,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, drm_gem_object_reference(&obj->base); crtc->primary->fb = fb; + drm_atomic_set_fb_for_plane(crtc->primary->state, fb); work->pending_flip_obj = obj; -- 1.9.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel