| From 6709887c448d1cff51b52d09763c7b834ea5f0be Mon Sep 17 00:00:00 2001 |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Date: Tue, 31 May 2016 15:03:17 +0300 |
| Subject: drm: make drm_atomic_set_mode_prop_for_crtc() more reliable |
| |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| |
| commit 6709887c448d1cff51b52d09763c7b834ea5f0be upstream. |
| |
| drm_atomic_set_mode_prop_for_crtc() does not clear the state->mode, so |
| old data may be left there when a new mode is set, possibly causing odd |
| issues. |
| |
| This patch improves the situation by always clearing the state->mode |
| first. |
| |
| Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/drm_atomic.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/gpu/drm/drm_atomic.c |
| +++ b/drivers/gpu/drm/drm_atomic.c |
| @@ -367,6 +367,8 @@ int drm_atomic_set_mode_prop_for_crtc(st |
| drm_property_unreference_blob(state->mode_blob); |
| state->mode_blob = NULL; |
| |
| + memset(&state->mode, 0, sizeof(state->mode)); |
| + |
| if (blob) { |
| if (blob->length != sizeof(struct drm_mode_modeinfo) || |
| drm_mode_convert_umode(&state->mode, |
| @@ -379,7 +381,6 @@ int drm_atomic_set_mode_prop_for_crtc(st |
| DRM_DEBUG_ATOMIC("Set [MODE:%s] for CRTC state %p\n", |
| state->mode.name, state); |
| } else { |
| - memset(&state->mode, 0, sizeof(state->mode)); |
| state->enable = false; |
| DRM_DEBUG_ATOMIC("Set [NOMODE] for CRTC state %p\n", |
| state); |