Patch "drm/vmwgfx: Fix a width / pitch mismatch on framebuffer updates" has been added to the 4.4-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
drm/vmwgfx: Fix a width / pitch mismatch on framebuffer updates
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-vmwgfx-fix-a-width-pitch-mismatch-on-framebuffer-updates.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a50e2bf5a0f674d62b69f51f6935a30e82bd015cMon Sep 17 00:00:00 2001
From: Thomas Hellstrom <[email protected]>
Date: Fri, 8 Jan 2016 20:29:40 +0100
Subject: drm/vmwgfx: Fix a width / pitch mismatch on framebuffer updates
From: Thomas Hellstrom <[email protected]>
commit a50e2bf5a0f674d62b69f51f6935a30e82bd015c upstream.
When the framebuffer is a vmwgfx dma buffer and a proxy surface is created, the vmw_kms_update_proxy() function requires that the proxy surface width and the framebuffer pitch are compatible, otherwise display corruption occurs as seen in gnome-shell/native with software 3D. Since the framebuffer pitch is determined by user-space, allocate a proxy surface the width of which is based on the framebuffer pitch rather than on the framebuffer width.
--- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +5 -1
@@ -763,21 +763,25 @@ static int vmw_create_dmabuf_proxy(strucuint32_t format;struct drm_vmw_size content_base_size;struct vmw_resource *res; +unsigned int bytes_pp;int ret;switch (mode_cmd->depth) {case 32 :case 24 : format =SVGA3D_X8R8G8B8 ; + bytes_pp =4 ;break ;case 16 :case 15 : format =SVGA3D_R5G6B5 ; + bytes_pp =2 ;break ;case 8 : format =SVGA3D_P8 ; + bytes_pp =1 ;break ;default :
@@ -785,7 +789,7 @@ static int vmw_create_dmabuf_proxy(strucreturn -EINVAL ; } - content_base_size.width = mode_cmd->width; + content_base_size.width = mode_cmd->pitch / bytes_pp; content_base_size.height = mode_cmd->height; content_base_size.depth =1 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-vmwgfx-respect-nomodeset.patch queue-4.4/drm-vmwgfx-fix-an-incorrect-lock-check.patch queue-4.4/drm-vmwgfx-fix-a-width-pitch-mismatch-on-framebuffer-updates.patch