summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira2015-04-21 16:13:20 +0200
committerDaniel Vetter2015-05-08 13:04:09 +0200
commit2bfb4627580ae91d2978e1c071ed1a4b5039f2fd (patch)
tree4df3c4f58a705b0e62b06c309e0d11c444ee45e6 /drivers/gpu/drm/i915/intel_display.c
parentdrm/i915: Use atomic helpers for computing changed flags (diff)
downloadkernel-qcow2-linux-2bfb4627580ae91d2978e1c071ed1a4b5039f2fd.tar.gz
kernel-qcow2-linux-2bfb4627580ae91d2978e1c071ed1a4b5039f2fd.tar.xz
kernel-qcow2-linux-2bfb4627580ae91d2978e1c071ed1a4b5039f2fd.zip
drm/i915: Take ownership of atomic state on success in intel_set_mode()
To match the behavior of ->atomic_commit(). Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index db450772b4a5..e3e4a04a18bf 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9968,9 +9968,9 @@ void intel_release_load_detect_pipe(struct drm_connector *connector,
if (ret)
goto fail;
- intel_set_mode(crtc, state);
-
- drm_atomic_state_free(state);
+ ret = intel_set_mode(crtc, state);
+ if (ret)
+ goto fail;
if (old->release_fb) {
drm_framebuffer_unregister_private(old->release_fb);
@@ -12425,6 +12425,8 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc,
intel_crtc->config = crtc_state_copy;
intel_crtc->base.state = &crtc_state_copy->base;
+ drm_atomic_state_free(state);
+
return 0;
}
@@ -12470,6 +12472,7 @@ void intel_crtc_restore_mode(struct drm_crtc *crtc)
struct intel_connector *connector;
struct drm_connector_state *connector_state;
struct intel_crtc_state *crtc_state;
+ int ret;
state = drm_atomic_state_alloc(dev);
if (!state) {
@@ -12528,9 +12531,9 @@ void intel_crtc_restore_mode(struct drm_crtc *crtc)
intel_modeset_setup_plane_state(state, crtc, &crtc->mode,
crtc->primary->fb, crtc->x, crtc->y);
- intel_set_mode(crtc, state);
-
- drm_atomic_state_free(state);
+ ret = intel_set_mode(crtc, state);
+ if (ret)
+ drm_atomic_state_free(state);
}
#undef for_each_intel_crtc_masked
@@ -12759,7 +12762,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
}
out:
- drm_atomic_state_free(state);
+ if (ret)
+ drm_atomic_state_free(state);
return ret;
}