aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_display.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-03-15 06:24:32 -0400
committerDave Airlie <airlied@redhat.com>2012-03-15 06:24:32 -0400
commit8229c885fe361e521ac64de36b16011e54a30de0 (patch)
tree572e5d34b16713ddef9e803308c6f72014aff01b /drivers/gpu/drm/radeon/radeon_display.c
parentc3c50e8b651887bcefcc13beb3739c00b2379b5c (diff)
parentfde7d9049e55ab85a390be7f415d74c9f62dd0f9 (diff)
drm: Merge tag 'v3.3-rc7' into drm-core-next
Merge the fixes so far into core-next, needed to test intel driver. Conflicts: drivers/gpu/drm/i915/intel_ringbuffer.c
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_display.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 1f98e5fbc733..b25bb2a55814 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1087,15 +1087,21 @@ static const struct drm_framebuffer_funcs radeon_fb_funcs = {
1087 .create_handle = radeon_user_framebuffer_create_handle, 1087 .create_handle = radeon_user_framebuffer_create_handle,
1088}; 1088};
1089 1089
1090void 1090int
1091radeon_framebuffer_init(struct drm_device *dev, 1091radeon_framebuffer_init(struct drm_device *dev,
1092 struct radeon_framebuffer *rfb, 1092 struct radeon_framebuffer *rfb,
1093 struct drm_mode_fb_cmd2 *mode_cmd, 1093 struct drm_mode_fb_cmd2 *mode_cmd,
1094 struct drm_gem_object *obj) 1094 struct drm_gem_object *obj)
1095{ 1095{
1096 int ret;
1096 rfb->obj = obj; 1097 rfb->obj = obj;
1097 drm_framebuffer_init(dev, &rfb->base, &radeon_fb_funcs); 1098 ret = drm_framebuffer_init(dev, &rfb->base, &radeon_fb_funcs);
1099 if (ret) {
1100 rfb->obj = NULL;
1101 return ret;
1102 }
1098 drm_helper_mode_fill_fb_struct(&rfb->base, mode_cmd); 1103 drm_helper_mode_fill_fb_struct(&rfb->base, mode_cmd);
1104 return 0;
1099} 1105}
1100 1106
1101static struct drm_framebuffer * 1107static struct drm_framebuffer *
@@ -1105,6 +1111,7 @@ radeon_user_framebuffer_create(struct drm_device *dev,
1105{ 1111{
1106 struct drm_gem_object *obj; 1112 struct drm_gem_object *obj;
1107 struct radeon_framebuffer *radeon_fb; 1113 struct radeon_framebuffer *radeon_fb;
1114 int ret;
1108 1115
1109 obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]); 1116 obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]);
1110 if (obj == NULL) { 1117 if (obj == NULL) {
@@ -1117,7 +1124,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
1117 if (radeon_fb == NULL) 1124 if (radeon_fb == NULL)
1118 return ERR_PTR(-ENOMEM); 1125 return ERR_PTR(-ENOMEM);
1119 1126
1120 radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj); 1127 ret = radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj);
1128 if (ret) {
1129 kfree(radeon_fb);
1130 drm_gem_object_unreference_unlocked(obj);
1131 return NULL;
1132 }
1121 1133
1122 return &radeon_fb->base; 1134 return &radeon_fb->base;
1123} 1135}