On Fri, May 16, 2014 at 03:36:47PM -0700, Matt Roper wrote: > Refactor DRM framebuffer creation into a new function that returns a > struct drm_framebuffer directly. The upcoming universal cursor support > will want to create framebuffers internally to wrap cursor buffers, so > we want to be able to share that framebuffer creation with the > drm_mode_addfb2 ioctl handler. > > Signed-off-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > --- > drivers/gpu/drm/drm_crtc.c | 64 +++++++++++++++++++++++++++------------------- > 1 file changed, 38 insertions(+), 26 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index b6d6c04..1a1a5f4 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -2796,56 +2796,39 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r) > return 0; > } > > -/** > - * drm_mode_addfb2 - add an FB to the graphics configuration > - * @dev: drm device for the ioctl > - * @data: data pointer for the ioctl > - * @file_priv: drm file for the ioctl call > - * > - * Add a new FB to the specified CRTC, given a user request with format. This is > - * the 2nd version of the addfb ioctl, which supports multi-planar framebuffers > - * and uses fourcc codes as pixel format specifiers. > - * > - * Called by the user via ioctl. > - * > - * Returns: > - * Zero on success, errno on failure. > - */ > -int drm_mode_addfb2(struct drm_device *dev, > - void *data, struct drm_file *file_priv) > +static struct drm_framebuffer *add_framebuffer_internal(struct drm_device *dev, > + void *data, s/void/struct drm_mode_fb_cmd2/ With that fixed this is Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > + struct drm_file *file_priv) > { > struct drm_mode_fb_cmd2 *r = data; > struct drm_mode_config *config = &dev->mode_config; > struct drm_framebuffer *fb; > int ret; > > - if (!drm_core_check_feature(dev, DRIVER_MODESET)) > - return -EINVAL; > - > if (r->flags & ~DRM_MODE_FB_INTERLACED) { > DRM_DEBUG_KMS("bad framebuffer flags 0x%08x\n", r->flags); > - return -EINVAL; > + return ERR_PTR(-EINVAL); > } > > if ((config->min_width > r->width) || (r->width > config->max_width)) { > DRM_DEBUG_KMS("bad framebuffer width %d, should be >= %d && <= %d\n", > r->width, config->min_width, config->max_width); > - return -EINVAL; > + return ERR_PTR(-EINVAL); > } > if ((config->min_height > r->height) || (r->height > config->max_height)) { > DRM_DEBUG_KMS("bad framebuffer height %d, should be >= %d && <= %d\n", > r->height, config->min_height, config->max_height); > - return -EINVAL; > + return ERR_PTR(-EINVAL); > } > > ret = framebuffer_check(r); > if (ret) > - return ret; > + return ERR_PTR(ret); > > fb = dev->mode_config.funcs->fb_create(dev, file_priv, r); > if (IS_ERR(fb)) { > DRM_DEBUG_KMS("could not create framebuffer\n"); > - return PTR_ERR(fb); > + return fb; > } > > mutex_lock(&file_priv->fbs_lock); > @@ -2854,8 +2837,37 @@ int drm_mode_addfb2(struct drm_device *dev, > DRM_DEBUG_KMS("[FB:%d]\n", fb->base.id); > mutex_unlock(&file_priv->fbs_lock); > > + return fb; > +} > + > +/** > + * drm_mode_addfb2 - add an FB to the graphics configuration > + * @dev: drm device for the ioctl > + * @data: data pointer for the ioctl > + * @file_priv: drm file for the ioctl call > + * > + * Add a new FB to the specified CRTC, given a user request with format. This is > + * the 2nd version of the addfb ioctl, which supports multi-planar framebuffers > + * and uses fourcc codes as pixel format specifiers. > + * > + * Called by the user via ioctl. > + * > + * Returns: > + * Zero on success, errno on failure. > + */ > +int drm_mode_addfb2(struct drm_device *dev, > + void *data, struct drm_file *file_priv) > +{ > + struct drm_framebuffer *fb; > > - return ret; > + if (!drm_core_check_feature(dev, DRIVER_MODESET)) > + return -EINVAL; > + > + fb = add_framebuffer_internal(dev, data, file_priv); > + if (IS_ERR(fb)) > + return PTR_ERR(fb); > + > + return 0; > } > > /** > -- > 1.8.5.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx