aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-12-13 17:39:01 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-01-20 09:29:35 -0500
commit80f0b5aff8f49f63eaf08bdae243de3a8ea3f77e (patch)
tree15b19aa9ecd65b26fa4779d8616f78efae2eb4ef /drivers/gpu/drm/vmwgfx
parentc7d73f6a8ad71f9d9f58c86981322c6e48093a4f (diff)
drm/vmwgfx: reorder framebuffer init sequence
vmwgfx has an oddity, when failing to reference the surface it'll return 0, since that's what the successfull drm_framebuffer_init will leave behind in ret. Fix this up by returning -EINVAL. Split out from all the other driver updates due to the above tiny semantic change. Shouldn't matter though since the reference grabbing seemingly can't fail. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_kms.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 54743943d8b3..edc97929c9a3 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -681,14 +681,10 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
681 goto out_err1; 681 goto out_err1;
682 } 682 }
683 683
684 ret = drm_framebuffer_init(dev, &vfbs->base.base,
685 &vmw_framebuffer_surface_funcs);
686 if (ret)
687 goto out_err2;
688
689 if (!vmw_surface_reference(surface)) { 684 if (!vmw_surface_reference(surface)) {
690 DRM_ERROR("failed to reference surface %p\n", surface); 685 DRM_ERROR("failed to reference surface %p\n", surface);
691 goto out_err3; 686 ret = -EINVAL;
687 goto out_err2;
692 } 688 }
693 689
694 /* XXX get the first 3 from the surface info */ 690 /* XXX get the first 3 from the surface info */
@@ -707,10 +703,15 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
707 703
708 *out = &vfbs->base; 704 *out = &vfbs->base;
709 705
706 ret = drm_framebuffer_init(dev, &vfbs->base.base,
707 &vmw_framebuffer_surface_funcs);
708 if (ret)
709 goto out_err3;
710
710 return 0; 711 return 0;
711 712
712out_err3: 713out_err3:
713 drm_framebuffer_cleanup(&vfbs->base.base); 714 vmw_surface_unreference(&surface);
714out_err2: 715out_err2:
715 kfree(vfbs); 716 kfree(vfbs);
716out_err1: 717out_err1:
@@ -1053,14 +1054,10 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv,
1053 goto out_err1; 1054 goto out_err1;
1054 } 1055 }
1055 1056
1056 ret = drm_framebuffer_init(dev, &vfbd->base.base,
1057 &vmw_framebuffer_dmabuf_funcs);
1058 if (ret)
1059 goto out_err2;
1060
1061 if (!vmw_dmabuf_reference(dmabuf)) { 1057 if (!vmw_dmabuf_reference(dmabuf)) {
1062 DRM_ERROR("failed to reference dmabuf %p\n", dmabuf); 1058 DRM_ERROR("failed to reference dmabuf %p\n", dmabuf);
1063 goto out_err3; 1059 ret = -EINVAL;
1060 goto out_err2;
1064 } 1061 }
1065 1062
1066 vfbd->base.base.bits_per_pixel = mode_cmd->bpp; 1063 vfbd->base.base.bits_per_pixel = mode_cmd->bpp;
@@ -1077,10 +1074,15 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv,
1077 vfbd->base.user_handle = mode_cmd->handle; 1074 vfbd->base.user_handle = mode_cmd->handle;
1078 *out = &vfbd->base; 1075 *out = &vfbd->base;
1079 1076
1077 ret = drm_framebuffer_init(dev, &vfbd->base.base,
1078 &vmw_framebuffer_dmabuf_funcs);
1079 if (ret)
1080 goto out_err3;
1081
1080 return 0; 1082 return 0;
1081 1083
1082out_err3: 1084out_err3:
1083 drm_framebuffer_cleanup(&vfbd->base.base); 1085 vmw_dmabuf_unreference(&dmabuf);
1084out_err2: 1086out_err2:
1085 kfree(vfbd); 1087 kfree(vfbd);
1086out_err1: 1088out_err1: