aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.h25
-rw-r--r--drivers/gpu/drm/omapdrm/omap_fb.c29
2 files changed, 18 insertions, 36 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
index 7d9dd5400cef..919c14d3503c 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.h
+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
@@ -236,29 +236,4 @@ struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev,
236uint32_t pipe2vbl(struct drm_crtc *crtc); 236uint32_t pipe2vbl(struct drm_crtc *crtc);
237struct omap_dss_device *omap_encoder_get_dssdev(struct drm_encoder *encoder); 237struct omap_dss_device *omap_encoder_get_dssdev(struct drm_encoder *encoder);
238 238
239/* should these be made into common util helpers?
240 */
241
242static inline int objects_lookup(
243 struct drm_file *filp, uint32_t pixel_format,
244 struct drm_gem_object **bos, const uint32_t *handles)
245{
246 int i, n = drm_format_num_planes(pixel_format);
247
248 for (i = 0; i < n; i++) {
249 bos[i] = drm_gem_object_lookup(filp, handles[i]);
250 if (!bos[i])
251 goto fail;
252
253 }
254
255 return 0;
256
257fail:
258 while (--i > 0)
259 drm_gem_object_unreference_unlocked(bos[i]);
260
261 return -ENOENT;
262}
263
264#endif /* __OMAP_DRV_H__ */ 239#endif /* __OMAP_DRV_H__ */
diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c
index 6315d68989fc..195ab4c86244 100644
--- a/drivers/gpu/drm/omapdrm/omap_fb.c
+++ b/drivers/gpu/drm/omapdrm/omap_fb.c
@@ -354,22 +354,29 @@ void omap_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
354struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev, 354struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
355 struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd) 355 struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)
356{ 356{
357 unsigned int num_planes = drm_format_num_planes(mode_cmd->pixel_format);
357 struct drm_gem_object *bos[4]; 358 struct drm_gem_object *bos[4];
358 struct drm_framebuffer *fb; 359 struct drm_framebuffer *fb;
359 int ret; 360 int i;
360 361
361 ret = objects_lookup(file, mode_cmd->pixel_format, 362 for (i = 0; i < num_planes; i++) {
362 bos, mode_cmd->handles); 363 bos[i] = drm_gem_object_lookup(file, mode_cmd->handles[i]);
363 if (ret) 364 if (!bos[i]) {
364 return ERR_PTR(ret); 365 fb = ERR_PTR(-ENOENT);
366 goto error;
367 }
368 }
365 369
366 fb = omap_framebuffer_init(dev, mode_cmd, bos); 370 fb = omap_framebuffer_init(dev, mode_cmd, bos);
367 if (IS_ERR(fb)) { 371 if (IS_ERR(fb))
368 int i, n = drm_format_num_planes(mode_cmd->pixel_format); 372 goto error;
369 for (i = 0; i < n; i++) 373
370 drm_gem_object_unreference_unlocked(bos[i]); 374 return fb;
371 return fb; 375
372 } 376error:
377 while (--i > 0)
378 drm_gem_object_unreference_unlocked(bos[i]);
379
373 return fb; 380 return fb;
374} 381}
375 382