From 9eb45f228f24a2d1d98cb526e149aa18ba1f5ef5 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Tue, 21 Apr 2015 17:13:07 +0300 Subject: [PATCH] drm/i915: Simplify error handling in __intel_set_mode() The remaining parts of the failure path could only be reached if the allocation of crtc_state_copy would fail. In that case, there is nothing to undo, so just get rid of the label for error handling and return an error code immediately. We also always allocate a pipe_config, even if the pipe is being disabled, so the remaining part of what was the error/done case can be simplified a little too. v2: Ignore return value from drm_plane_helper_update(). (Ander) Signed-off-by: Ander Conselvan de Oliveira Reviewed-by: Maarten Lankhorst Signed-off-by: Daniel Vetter --- drivers/gpu/drm/i915/intel_display.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 9655f1f1ae85..9aa90abab4ba 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -12278,10 +12278,8 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc, return ret; crtc_state_copy = kmalloc(sizeof(*crtc_state_copy), GFP_KERNEL); - if (!crtc_state_copy) { - ret = -ENOMEM; - goto done; - } + if (!crtc_state_copy) + return -ENOMEM; for_each_crtc_in_state(state, crtc, crtc_state, i) { if (!needs_modeset(crtc_state)) @@ -12337,6 +12335,7 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc, hdisplay, vdisplay, x << 16, y << 16, hdisplay << 16, vdisplay << 16); + WARN_ON(ret != 0); } /* Now enable the clocks, plane, pipe, and connectors that we set up. */ @@ -12351,21 +12350,16 @@ static int __intel_set_mode(struct drm_crtc *modeset_crtc, } /* FIXME: add subpixel order */ -done: - if (ret == 0 && pipe_config) { - struct intel_crtc *intel_crtc = to_intel_crtc(modeset_crtc); - - /* The pipe_config will be freed with the atomic state, so - * make a copy. */ - memcpy(crtc_state_copy, intel_crtc->config, - sizeof *crtc_state_copy); - intel_crtc->config = crtc_state_copy; - intel_crtc->base.state = &crtc_state_copy->base; - } else { - kfree(crtc_state_copy); - } - return ret; + intel_crtc = to_intel_crtc(modeset_crtc); + + /* The pipe_config will be freed with the atomic state, so + * make a copy. */ + memcpy(crtc_state_copy, intel_crtc->config, sizeof *crtc_state_copy); + intel_crtc->config = crtc_state_copy; + intel_crtc->base.state = &crtc_state_copy->base; + + return 0; } static int intel_set_mode_with_config(struct drm_crtc *crtc, -- 2.11.0