mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-04 16:15:11 +00:00
drm: omapdrm: fb: Simplify objects lookup when creating framebuffer
Merge the single-user objects_lookup inline function into its caller, allowing reuse of the error code path. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
c9028b3959
commit
a39c94e813
2 changed files with 18 additions and 36 deletions
|
@ -236,29 +236,4 @@ struct drm_gem_object *omap_gem_prime_import(struct drm_device *dev,
|
||||||
uint32_t pipe2vbl(struct drm_crtc *crtc);
|
uint32_t pipe2vbl(struct drm_crtc *crtc);
|
||||||
struct omap_dss_device *omap_encoder_get_dssdev(struct drm_encoder *encoder);
|
struct omap_dss_device *omap_encoder_get_dssdev(struct drm_encoder *encoder);
|
||||||
|
|
||||||
/* should these be made into common util helpers?
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline int objects_lookup(
|
|
||||||
struct drm_file *filp, uint32_t pixel_format,
|
|
||||||
struct drm_gem_object **bos, const uint32_t *handles)
|
|
||||||
{
|
|
||||||
int i, n = drm_format_num_planes(pixel_format);
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
bos[i] = drm_gem_object_lookup(filp, handles[i]);
|
|
||||||
if (!bos[i])
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
while (--i > 0)
|
|
||||||
drm_gem_object_unreference_unlocked(bos[i]);
|
|
||||||
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __OMAP_DRV_H__ */
|
#endif /* __OMAP_DRV_H__ */
|
||||||
|
|
|
@ -354,22 +354,29 @@ void omap_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
|
||||||
struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
|
struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
|
||||||
struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)
|
struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)
|
||||||
{
|
{
|
||||||
|
unsigned int num_planes = drm_format_num_planes(mode_cmd->pixel_format);
|
||||||
struct drm_gem_object *bos[4];
|
struct drm_gem_object *bos[4];
|
||||||
struct drm_framebuffer *fb;
|
struct drm_framebuffer *fb;
|
||||||
int ret;
|
int i;
|
||||||
|
|
||||||
ret = objects_lookup(file, mode_cmd->pixel_format,
|
for (i = 0; i < num_planes; i++) {
|
||||||
bos, mode_cmd->handles);
|
bos[i] = drm_gem_object_lookup(file, mode_cmd->handles[i]);
|
||||||
if (ret)
|
if (!bos[i]) {
|
||||||
return ERR_PTR(ret);
|
fb = ERR_PTR(-ENOENT);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fb = omap_framebuffer_init(dev, mode_cmd, bos);
|
fb = omap_framebuffer_init(dev, mode_cmd, bos);
|
||||||
if (IS_ERR(fb)) {
|
if (IS_ERR(fb))
|
||||||
int i, n = drm_format_num_planes(mode_cmd->pixel_format);
|
goto error;
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
drm_gem_object_unreference_unlocked(bos[i]);
|
return fb;
|
||||||
return fb;
|
|
||||||
}
|
error:
|
||||||
|
while (--i > 0)
|
||||||
|
drm_gem_object_unreference_unlocked(bos[i]);
|
||||||
|
|
||||||
return fb;
|
return fb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue