mirror of
https://github.com/torvalds/linux
synced 2024-09-22 12:26:27 +00:00
Merge branch 'vmwgfx-fixes-5.1' of git://people.freedesktop.org/~thomash/linux into drm-fixes
Two fixes CC'd stable. One fix for a long-standing a bit hard-to-trigger fbdev modesetting bug and one out-of-bo-id fix. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Hellstrom <thellstrom@vmware.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190321112026.114328-1-thellstrom@vmware.com
This commit is contained in:
commit
6a9d8fc018
|
@ -564,11 +564,9 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
|
DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC)
|
||||||
};
|
};
|
||||||
struct drm_display_mode *old_mode;
|
|
||||||
struct drm_display_mode *mode;
|
struct drm_display_mode *mode;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
old_mode = par->set_mode;
|
|
||||||
mode = drm_mode_duplicate(vmw_priv->dev, &new_mode);
|
mode = drm_mode_duplicate(vmw_priv->dev, &new_mode);
|
||||||
if (!mode) {
|
if (!mode) {
|
||||||
DRM_ERROR("Could not create new fb mode.\n");
|
DRM_ERROR("Could not create new fb mode.\n");
|
||||||
|
@ -579,11 +577,7 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||||
mode->vdisplay = var->yres;
|
mode->vdisplay = var->yres;
|
||||||
vmw_guess_mode_timing(mode);
|
vmw_guess_mode_timing(mode);
|
||||||
|
|
||||||
if (old_mode && drm_mode_equal(old_mode, mode)) {
|
if (!vmw_kms_validate_mode_vram(vmw_priv,
|
||||||
drm_mode_destroy(vmw_priv->dev, mode);
|
|
||||||
mode = old_mode;
|
|
||||||
old_mode = NULL;
|
|
||||||
} else if (!vmw_kms_validate_mode_vram(vmw_priv,
|
|
||||||
mode->hdisplay *
|
mode->hdisplay *
|
||||||
DIV_ROUND_UP(var->bits_per_pixel, 8),
|
DIV_ROUND_UP(var->bits_per_pixel, 8),
|
||||||
mode->vdisplay)) {
|
mode->vdisplay)) {
|
||||||
|
@ -620,8 +614,8 @@ static int vmw_fb_set_par(struct fb_info *info)
|
||||||
schedule_delayed_work(&par->local_work, 0);
|
schedule_delayed_work(&par->local_work, 0);
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
if (old_mode)
|
if (par->set_mode)
|
||||||
drm_mode_destroy(vmw_priv->dev, old_mode);
|
drm_mode_destroy(vmw_priv->dev, par->set_mode);
|
||||||
par->set_mode = mode;
|
par->set_mode = mode;
|
||||||
|
|
||||||
mutex_unlock(&par->bo_mutex);
|
mutex_unlock(&par->bo_mutex);
|
||||||
|
|
|
@ -57,7 +57,7 @@ static int vmw_gmrid_man_get_node(struct ttm_mem_type_manager *man,
|
||||||
|
|
||||||
id = ida_alloc_max(&gman->gmr_ida, gman->max_gmr_ids - 1, GFP_KERNEL);
|
id = ida_alloc_max(&gman->gmr_ida, gman->max_gmr_ids - 1, GFP_KERNEL);
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
return id;
|
return (id != -ENOMEM ? 0 : id);
|
||||||
|
|
||||||
spin_lock(&gman->lock);
|
spin_lock(&gman->lock);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue