mirror of https://gitee.com/openkylin/linux.git
drm/vmwgfx: correct fb_fix_screeninfo.line_length
Previously, the vmwgfx_fb driver would allow users to call FBIOSET_VINFO, but it would not adjust the FINFO properly, resulting in distorted screen rendering. The patch corrects that behaviour. See https://bugs.gentoo.org/show_bug.cgi?id=494794 for examples. Cc: stable@vger.kernel.org Signed-off-by: Christopher Friedt <chrisfriedt@gmail.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
This commit is contained in:
parent
89dcbda65c
commit
aa6de142c9
|
@ -147,7 +147,7 @@ static int vmw_fb_check_var(struct fb_var_screeninfo *var,
|
|||
}
|
||||
|
||||
if (!vmw_kms_validate_mode_vram(vmw_priv,
|
||||
info->fix.line_length,
|
||||
var->xres * var->bits_per_pixel/8,
|
||||
var->yoffset + var->yres)) {
|
||||
DRM_ERROR("Requested geom can not fit in framebuffer\n");
|
||||
return -EINVAL;
|
||||
|
@ -162,6 +162,8 @@ static int vmw_fb_set_par(struct fb_info *info)
|
|||
struct vmw_private *vmw_priv = par->vmw_priv;
|
||||
int ret;
|
||||
|
||||
info->fix.line_length = info->var.xres * info->var.bits_per_pixel/8;
|
||||
|
||||
ret = vmw_kms_write_svga(vmw_priv, info->var.xres, info->var.yres,
|
||||
info->fix.line_length,
|
||||
par->bpp, par->depth);
|
||||
|
@ -177,6 +179,7 @@ static int vmw_fb_set_par(struct fb_info *info)
|
|||
vmw_write(vmw_priv, SVGA_REG_DISPLAY_POSITION_Y, info->var.yoffset);
|
||||
vmw_write(vmw_priv, SVGA_REG_DISPLAY_WIDTH, info->var.xres);
|
||||
vmw_write(vmw_priv, SVGA_REG_DISPLAY_HEIGHT, info->var.yres);
|
||||
vmw_write(vmw_priv, SVGA_REG_BYTES_PER_LINE, info->fix.line_length);
|
||||
vmw_write(vmw_priv, SVGA_REG_DISPLAY_ID, SVGA_ID_INVALID);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue