| From 4437c1152ce0e57ab8f401aa696ea6291cc07ab1 Mon Sep 17 00:00:00 2001 |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| Date: Fri, 26 Jun 2020 13:39:59 +0300 |
| Subject: [PATCH] drm/vmwgfx: Fix two list_for_each loop exit tests |
| |
| commit 4437c1152ce0e57ab8f401aa696ea6291cc07ab1 upstream. |
| |
| These if statements are supposed to be true if we ended the |
| list_for_each_entry() loops without hitting a break statement but they |
| don't work. |
| |
| In the first loop, we increment "i" after the "if (i == unit)" condition |
| so we don't necessarily know that "i" is not equal to unit at the end of |
| the loop. |
| |
| In the second loop we exit when mode is not pointing to a valid |
| drm_display_mode struct so it doesn't make sense to check "mode->type". |
| |
| Fixes: a278724aa23c ("drm/vmwgfx: Implement fbdev on kms v2") |
| Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Reviewed-by: Roland Scheidegger <sroland@vmware.com> |
| Signed-off-by: Roland Scheidegger <sroland@vmware.com> |
| |
| diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c |
| index bbce45d142aa..6e9a6135533a 100644 |
| --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c |
| +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c |
| @@ -2575,7 +2575,7 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv, |
| ++i; |
| } |
| |
| - if (i != unit) { |
| + if (&con->head == &dev_priv->dev->mode_config.connector_list) { |
| DRM_ERROR("Could not find initial display unit.\n"); |
| ret = -EINVAL; |
| goto out_unlock; |
| @@ -2599,13 +2599,13 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv, |
| break; |
| } |
| |
| - if (mode->type & DRM_MODE_TYPE_PREFERRED) |
| - *p_mode = mode; |
| - else { |
| + if (&mode->head == &con->modes) { |
| WARN_ONCE(true, "Could not find initial preferred mode.\n"); |
| *p_mode = list_first_entry(&con->modes, |
| struct drm_display_mode, |
| head); |
| + } else { |
| + *p_mode = mode; |
| } |
| |
| out_unlock: |
| -- |
| 2.27.0 |
| |