From: Roland Scheidegger <srol...@vmware.com>

commit 1f054fd26e29784d373c3d29c348ee48f1c41fb2 upstream.

The assignment of metadata overwrote the new display resolution values,
hence we'd miss the size actually changed and wouldn't redefine the
surface. This would then lead to command buffer error when trying to
update the screen target (due to the size mismatch), and result in a
VM with black screen.

Fixes: 504901dbb0b5 ("drm/vmwgfx: Refactor surface_define to use 
vmw_surface_metadata")
Reviewed-by: Charmaine Lee <charmai...@vmware.com>
Signed-off-by: Roland Scheidegger <srol...@vmware.com>
Cc: sta...@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -1069,10 +1069,6 @@ vmw_stdu_primary_plane_prepare_fb(struct
        if (new_content_type != SAME_AS_DISPLAY) {
                struct vmw_surface_metadata metadata = {0};
 
-               metadata.base_size.width = hdisplay;
-               metadata.base_size.height = vdisplay;
-               metadata.base_size.depth = 1;
-
                /*
                 * If content buffer is a buffer object, then we have to
                 * construct surface info
@@ -1104,6 +1100,10 @@ vmw_stdu_primary_plane_prepare_fb(struct
                        metadata = new_vfbs->surface->metadata;
                }
 
+               metadata.base_size.width = hdisplay;
+               metadata.base_size.height = vdisplay;
+               metadata.base_size.depth = 1;
+
                if (vps->surf) {
                        struct drm_vmw_size cur_base_size =
                                vps->surf->metadata.base_size;


Reply via email to