summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Bornecrantz <jakob@vmware.com>2011-11-01 04:45:28 +0100
committerThomas Hellstrom <thellstrom@vmware.com>2011-11-09 10:02:41 +0100
commit636bf314b1c4e77d27e2443672cf725bf08aa689 (patch)
tree5e3d84f75b7e9b2da079be1fb83fb23ee8630885
parent7e90f56a61a6635addefc194a1c9033c6a20d36e (diff)
vmwgfx: Free prefered mode on error path
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
-rw-r--r--vmwgfx_kms.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/vmwgfx_kms.c b/vmwgfx_kms.c
index 204f5b9..55bd86d 100644
--- a/vmwgfx_kms.c
+++ b/vmwgfx_kms.c
@@ -1715,17 +1715,22 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
mode->hdisplay = du->pref_width;
mode->vdisplay = du->pref_height;
vmw_guess_mode_timing(mode);
+
if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
mode->vdisplay)) {
drm_mode_probed_add(connector, mode);
+ } else {
+ drm_mode_destroy(dev, mode);
+ mode = NULL;
+ }
- if (du->pref_mode) {
- list_del_init(&du->pref_mode->head);
- drm_mode_destroy(dev, du->pref_mode);
- }
-
- du->pref_mode = mode;
+ if (du->pref_mode) {
+ list_del_init(&du->pref_mode->head);
+ drm_mode_destroy(dev, du->pref_mode);
}
+
+ /* mode might be null here, this is intended */
+ du->pref_mode = mode;
}
for (i = 0; vmw_kms_connector_builtin[i].type != 0; i++) {