drm/i915: Correctly refcount connectors in hw state readou
authorDaniel Vetter <[email protected]>
Fri, 6 May 2016 13:39:03 +0000 (15:39 +0200)
committerDaniel Vetter <[email protected]>
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 <[email protected]>
Cc: Chris Wilson <[email protected]>
Cc: Marius Vlad <[email protected]>
Cc: Dave Airlie <[email protected]>
Fixes: d2307dea14a4 ("drm/atomic: use connector references (v3)")
Signed-off-by: Daniel Vetter <[email protected]>
Reviewed-by: Chris Wilson <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
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;