drm/i915: Correctly refcount connectors in hw state readou
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 6 May 2016 13:39:03 +0000 (15:39 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 6 May 2016 14:09:12 +0000 (16:09 +0200)
This was forgotten when adding the the refcounting to
drm_connector_state.

v2: Don't forget to unreference existing connectors. This isn't
relevant on driver load, but this code also runs on resume, and there
we already have an atomic state. Spotted by Chris Wilson.

Cc: Gabriel Feceoru <gabriel.feceoru@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Marius Vlad <marius.c.vlad@intel.com>
Cc: Dave Airlie <airlied@redhat.com>
Fixes: d2307dea14a4 ("drm/atomic: use connector references (v3)")
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1462541943-19620-1-git-send-email-daniel.vetter@ffwll.ch
drivers/gpu/drm/i915/intel_display.c

index 73299f9e77a81ec01811aa7f38b98c91a853cf6d..a297e1ffafb58aa71f58e305c3e725f352a01243 100644 (file)
@@ -12032,11 +12032,16 @@ static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
        struct intel_connector *connector;
 
        for_each_intel_connector(dev, connector) {
+               if (connector->base.state->crtc)
+                       drm_connector_unreference(&connector->base);
+
                if (connector->base.encoder) {
                        connector->base.state->best_encoder =
                                connector->base.encoder;
                        connector->base.state->crtc =
                                connector->base.encoder->crtc;
+
+                       drm_connector_reference(&connector->base);
                } else {
                        connector->base.state->best_encoder = NULL;
                        connector->base.state->crtc = NULL;