瀏覽代碼

vmwgfx: Free prefered mode on error path

Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Jakob Bornecrantz 13 年之前
父節點
當前提交
55bde5b215
共有 1 個文件被更改,包括 11 次插入6 次删除
  1. 11 6
      drivers/gpu/drm/vmwgfx/vmwgfx_kms.c

+ 11 - 6
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c

@@ -1710,17 +1710,22 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector,
 		mode->hdisplay = du->pref_width;
 		mode->hdisplay = du->pref_width;
 		mode->vdisplay = du->pref_height;
 		mode->vdisplay = du->pref_height;
 		vmw_guess_mode_timing(mode);
 		vmw_guess_mode_timing(mode);
+
 		if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
 		if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2,
 					       mode->vdisplay)) {
 					       mode->vdisplay)) {
 			drm_mode_probed_add(connector, mode);
 			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++) {
 	for (i = 0; vmw_kms_connector_builtin[i].type != 0; i++) {