drm/i915: Use crtc->state for duplication.
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 10 Sep 2015 14:08:03 +0000 (16:08 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 10 Sep 2015 16:27:17 +0000 (18:27 +0200)
In async mode crtc->config can be updated after the locks are released,
resulting in the wrong state being duplicated.

Note that this also removes a spurious assignment of crtc_state->crtc
introduced in

commit f0c60574eb1216b0904c0d696c64d5096d6e4913
Author: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Date:   Tue Apr 21 17:12:58 2015 +0300

    drm/i915: Call drm helpers when duplicating crtc and plane states

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_atomic.c

index 9336e8030980b09e233340c3610a28affca792d6..2c4b1c44296c79413adf6816fc8cd562d5061e87 100644 (file)
@@ -85,22 +85,14 @@ intel_connector_atomic_get_property(struct drm_connector *connector,
 struct drm_crtc_state *
 intel_crtc_duplicate_state(struct drm_crtc *crtc)
 {
-       struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
        struct intel_crtc_state *crtc_state;
 
-       if (WARN_ON(!intel_crtc->config))
-               crtc_state = kzalloc(sizeof(*crtc_state), GFP_KERNEL);
-       else
-               crtc_state = kmemdup(intel_crtc->config,
-                                    sizeof(*intel_crtc->config), GFP_KERNEL);
-
+       crtc_state = kmemdup(crtc->state, sizeof(*crtc_state), GFP_KERNEL);
        if (!crtc_state)
                return NULL;
 
        __drm_atomic_helper_crtc_duplicate_state(crtc, &crtc_state->base);
 
-       crtc_state->base.crtc = crtc;
-
        return &crtc_state->base;
 }