diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-13 17:39:01 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-01-20 09:29:35 -0500 |
commit | 80f0b5aff8f49f63eaf08bdae243de3a8ea3f77e (patch) | |
tree | 15b19aa9ecd65b26fa4779d8616f78efae2eb4ef /drivers/gpu/drm/vmwgfx | |
parent | c7d73f6a8ad71f9d9f58c86981322c6e48093a4f (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.c | 30 |
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 | ||
712 | out_err3: | 713 | out_err3: |
713 | drm_framebuffer_cleanup(&vfbs->base.base); | 714 | vmw_surface_unreference(&surface); |
714 | out_err2: | 715 | out_err2: |
715 | kfree(vfbs); | 716 | kfree(vfbs); |
716 | out_err1: | 717 | out_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 | ||
1082 | out_err3: | 1084 | out_err3: |
1083 | drm_framebuffer_cleanup(&vfbd->base.base); | 1085 | vmw_dmabuf_unreference(&dmabuf); |
1084 | out_err2: | 1086 | out_err2: |
1085 | kfree(vfbd); | 1087 | kfree(vfbd); |
1086 | out_err1: | 1088 | out_err1: |