forked from Minki/linux
drm/vmwgfx: Fix two list_for_each loop exit tests
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: a278724aa2
("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>
This commit is contained in:
parent
1d2c0c565b
commit
4437c1152c
@ -2575,7 +2575,7 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv,
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != unit) {
|
if (&con->head == &dev_priv->dev->mode_config.connector_list) {
|
||||||
DRM_ERROR("Could not find initial display unit.\n");
|
DRM_ERROR("Could not find initial display unit.\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
@ -2599,13 +2599,13 @@ int vmw_kms_fbdev_init_data(struct vmw_private *dev_priv,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode->type & DRM_MODE_TYPE_PREFERRED)
|
if (&mode->head == &con->modes) {
|
||||||
*p_mode = mode;
|
|
||||||
else {
|
|
||||||
WARN_ONCE(true, "Could not find initial preferred mode.\n");
|
WARN_ONCE(true, "Could not find initial preferred mode.\n");
|
||||||
*p_mode = list_first_entry(&con->modes,
|
*p_mode = list_first_entry(&con->modes,
|
||||||
struct drm_display_mode,
|
struct drm_display_mode,
|
||||||
head);
|
head);
|
||||||
|
} else {
|
||||||
|
*p_mode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
|
Loading…
Reference in New Issue
Block a user