On Fri, May 30, 2014 at 01:12:03PM -0400, Rob Clark wrote:
> Add a few more useful helpers to find mode objects.
> 
> Signed-off-by: Rob Clark <robdclark at gmail.com>

Still a pile of these in drivers and still a perfect use-case for cocci.
Patch itself looks good.
-Daniel
> ---
>  drivers/gpu/drm/drm_crtc.c | 90 
> +++++++++++++++-------------------------------
>  include/drm/drm_crtc.h     | 33 +++++++++++++++++
>  2 files changed, 61 insertions(+), 62 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 37a3e07..02872af 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -1711,7 +1711,6 @@ int drm_mode_getcrtc(struct drm_device *dev,
>  {
>       struct drm_mode_crtc *crtc_resp = data;
>       struct drm_crtc *crtc;
> -     struct drm_mode_object *obj;
>       int ret = 0;
>  
>       if (!drm_core_check_feature(dev, DRIVER_MODESET))
> @@ -1719,13 +1718,11 @@ int drm_mode_getcrtc(struct drm_device *dev,
>  
>       drm_modeset_lock_all(dev);
>  
> -     obj = drm_mode_object_find(dev, crtc_resp->crtc_id,
> -                                DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, crtc_resp->crtc_id);
> +     if (!crtc) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     crtc = obj_to_crtc(obj);
>  
>       crtc_resp->x = crtc->x;
>       crtc_resp->y = crtc->y;
> @@ -1779,7 +1776,6 @@ int drm_mode_getconnector(struct drm_device *dev, void 
> *data,
>                         struct drm_file *file_priv)
>  {
>       struct drm_mode_get_connector *out_resp = data;
> -     struct drm_mode_object *obj;
>       struct drm_connector *connector;
>       struct drm_display_mode *mode;
>       int mode_count = 0;
> @@ -1803,13 +1799,11 @@ int drm_mode_getconnector(struct drm_device *dev, 
> void *data,
>  
>       mutex_lock(&dev->mode_config.mutex);
>  
> -     obj = drm_mode_object_find(dev, out_resp->connector_id,
> -                                DRM_MODE_OBJECT_CONNECTOR);
> -     if (!obj) {
> +     connector = drm_connector_find(dev, out_resp->connector_id);
> +     if (!connector) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     connector = obj_to_connector(obj);
>  
>       props_count = connector->properties.count;
>  
> @@ -1924,7 +1918,6 @@ int drm_mode_getencoder(struct drm_device *dev, void 
> *data,
>                       struct drm_file *file_priv)
>  {
>       struct drm_mode_get_encoder *enc_resp = data;
> -     struct drm_mode_object *obj;
>       struct drm_encoder *encoder;
>       int ret = 0;
>  
> @@ -1932,13 +1925,11 @@ int drm_mode_getencoder(struct drm_device *dev, void 
> *data,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, enc_resp->encoder_id,
> -                                DRM_MODE_OBJECT_ENCODER);
> -     if (!obj) {
> +     encoder = drm_encoder_find(dev, enc_resp->encoder_id);
> +     if (!encoder) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     encoder = obj_to_encoder(obj);
>  
>       if (encoder->crtc)
>               enc_resp->crtc_id = encoder->crtc->base.id;
> @@ -2036,7 +2027,6 @@ int drm_mode_getplane(struct drm_device *dev, void 
> *data,
>                     struct drm_file *file_priv)
>  {
>       struct drm_mode_get_plane *plane_resp = data;
> -     struct drm_mode_object *obj;
>       struct drm_plane *plane;
>       uint32_t __user *format_ptr;
>       int ret = 0;
> @@ -2045,13 +2035,11 @@ int drm_mode_getplane(struct drm_device *dev, void 
> *data,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, plane_resp->plane_id,
> -                                DRM_MODE_OBJECT_PLANE);
> -     if (!obj) {
> +     plane = drm_plane_find(dev, plane_resp->plane_id);
> +     if (!plane) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     plane = obj_to_plane(obj);
>  
>       if (plane->crtc)
>               plane_resp->crtc_id = plane->crtc->base.id;
> @@ -2104,7 +2092,6 @@ int drm_mode_setplane(struct drm_device *dev, void 
> *data,
>                     struct drm_file *file_priv)
>  {
>       struct drm_mode_set_plane *plane_req = data;
> -     struct drm_mode_object *obj;
>       struct drm_plane *plane;
>       struct drm_crtc *crtc;
>       struct drm_framebuffer *fb = NULL, *old_fb = NULL;
> @@ -2119,14 +2106,12 @@ int drm_mode_setplane(struct drm_device *dev, void 
> *data,
>        * First, find the plane, crtc, and fb objects.  If not available,
>        * we don't bother to call the driver.
>        */
> -     obj = drm_mode_object_find(dev, plane_req->plane_id,
> -                                DRM_MODE_OBJECT_PLANE);
> -     if (!obj) {
> +     plane = drm_plane_find(dev, plane_req->plane_id);
> +     if (!plane) {
>               DRM_DEBUG_KMS("Unknown plane ID %d\n",
>                             plane_req->plane_id);
>               return -ENOENT;
>       }
> -     plane = obj_to_plane(obj);
>  
>       /* No fb means shut it down */
>       if (!plane_req->fb_id) {
> @@ -2143,15 +2128,13 @@ int drm_mode_setplane(struct drm_device *dev, void 
> *data,
>               goto out;
>       }
>  
> -     obj = drm_mode_object_find(dev, plane_req->crtc_id,
> -                                DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, plane_req->crtc_id);
> +     if (!crtc) {
>               DRM_DEBUG_KMS("Unknown crtc ID %d\n",
>                             plane_req->crtc_id);
>               ret = -ENOENT;
>               goto out;
>       }
> -     crtc = obj_to_crtc(obj);
>  
>       fb = drm_framebuffer_lookup(dev, plane_req->fb_id);
>       if (!fb) {
> @@ -2338,7 +2321,6 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
>  {
>       struct drm_mode_config *config = &dev->mode_config;
>       struct drm_mode_crtc *crtc_req = data;
> -     struct drm_mode_object *obj;
>       struct drm_crtc *crtc;
>       struct drm_connector **connector_set = NULL, *connector;
>       struct drm_framebuffer *fb = NULL;
> @@ -2356,14 +2338,12 @@ int drm_mode_setcrtc(struct drm_device *dev, void 
> *data,
>               return -ERANGE;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, crtc_req->crtc_id,
> -                                DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, crtc_req->crtc_id);
> +     if (!crtc) {
>               DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
>               ret = -ENOENT;
>               goto out;
>       }
> -     crtc = obj_to_crtc(obj);
>       DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
>  
>       if (crtc_req->mode_valid) {
> @@ -2446,15 +2426,13 @@ int drm_mode_setcrtc(struct drm_device *dev, void 
> *data,
>                               goto out;
>                       }
>  
> -                     obj = drm_mode_object_find(dev, out_id,
> -                                                DRM_MODE_OBJECT_CONNECTOR);
> -                     if (!obj) {
> +                     connector = drm_connector_find(dev, out_id);
> +                     if (!connector) {
>                               DRM_DEBUG_KMS("Connector id %d unknown\n",
>                                               out_id);
>                               ret = -ENOENT;
>                               goto out;
>                       }
> -                     connector = obj_to_connector(obj);
>                       DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
>                                       connector->base.id,
>                                       drm_get_connector_name(connector));
> @@ -2486,7 +2464,6 @@ static int drm_mode_cursor_common(struct drm_device 
> *dev,
>                                 struct drm_mode_cursor2 *req,
>                                 struct drm_file *file_priv)
>  {
> -     struct drm_mode_object *obj;
>       struct drm_crtc *crtc;
>       int ret = 0;
>  
> @@ -2496,12 +2473,11 @@ static int drm_mode_cursor_common(struct drm_device 
> *dev,
>       if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
>               return -EINVAL;
>  
> -     obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, req->crtc_id);
> +     if (!crtc) {
>               DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
>               return -ENOENT;
>       }
> -     crtc = obj_to_crtc(obj);
>  
>       mutex_lock(&crtc->mutex);
>       if (req->flags & DRM_MODE_CURSOR_BO) {
> @@ -3458,7 +3434,6 @@ EXPORT_SYMBOL(drm_object_property_get_value);
>  int drm_mode_getproperty_ioctl(struct drm_device *dev,
>                              void *data, struct drm_file *file_priv)
>  {
> -     struct drm_mode_object *obj;
>       struct drm_mode_get_property *out_resp = data;
>       struct drm_property *property;
>       int enum_count = 0;
> @@ -3477,12 +3452,11 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, out_resp->prop_id, 
> DRM_MODE_OBJECT_PROPERTY);
> -     if (!obj) {
> +     property = drm_property_find(dev, out_resp->prop_id);
> +     if (!property) {
>               ret = -ENOENT;
>               goto done;
>       }
> -     property = obj_to_property(obj);
>  
>       if (property->flags & (DRM_MODE_PROP_ENUM | DRM_MODE_PROP_BITMASK)) {
>               list_for_each_entry(prop_enum, &property->enum_blob_list, head)
> @@ -3610,7 +3584,6 @@ static void drm_property_destroy_blob(struct drm_device 
> *dev,
>  int drm_mode_getblob_ioctl(struct drm_device *dev,
>                          void *data, struct drm_file *file_priv)
>  {
> -     struct drm_mode_object *obj;
>       struct drm_mode_get_blob *out_resp = data;
>       struct drm_property_blob *blob;
>       int ret = 0;
> @@ -3620,12 +3593,11 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, out_resp->blob_id, 
> DRM_MODE_OBJECT_BLOB);
> -     if (!obj) {
> +     blob = drm_property_blob_find(dev, out_resp->blob_id);
> +     if (!blob) {
>               ret = -ENOENT;
>               goto done;
>       }
> -     blob = obj_to_blob(obj);
>  
>       if (out_resp->length == blob->length) {
>               blob_ptr = (void __user *)(unsigned long)out_resp->data;
> @@ -4007,7 +3979,6 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
>                            void *data, struct drm_file *file_priv)
>  {
>       struct drm_mode_crtc_lut *crtc_lut = data;
> -     struct drm_mode_object *obj;
>       struct drm_crtc *crtc;
>       void *r_base, *g_base, *b_base;
>       int size;
> @@ -4017,12 +3988,11 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, crtc_lut->crtc_id, 
> DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, crtc_lut->crtc_id);
> +     if (!crtc) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     crtc = obj_to_crtc(obj);
>  
>       if (crtc->funcs->gamma_set == NULL) {
>               ret = -ENOSYS;
> @@ -4081,7 +4051,6 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
>                            void *data, struct drm_file *file_priv)
>  {
>       struct drm_mode_crtc_lut *crtc_lut = data;
> -     struct drm_mode_object *obj;
>       struct drm_crtc *crtc;
>       void *r_base, *g_base, *b_base;
>       int size;
> @@ -4091,12 +4060,11 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
>               return -EINVAL;
>  
>       drm_modeset_lock_all(dev);
> -     obj = drm_mode_object_find(dev, crtc_lut->crtc_id, 
> DRM_MODE_OBJECT_CRTC);
> -     if (!obj) {
> +     crtc = drm_crtc_find(dev, crtc_lut->crtc_id);
> +     if (!crtc) {
>               ret = -ENOENT;
>               goto out;
>       }
> -     crtc = obj_to_crtc(obj);
>  
>       /* memcpy into gamma store */
>       if (crtc_lut->gamma_size != crtc->gamma_size) {
> @@ -4149,7 +4117,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>                            void *data, struct drm_file *file_priv)
>  {
>       struct drm_mode_crtc_page_flip *page_flip = data;
> -     struct drm_mode_object *obj;
>       struct drm_crtc *crtc;
>       struct drm_framebuffer *fb = NULL, *old_fb = NULL;
>       struct drm_pending_vblank_event *e = NULL;
> @@ -4163,10 +4130,9 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
>       if ((page_flip->flags & DRM_MODE_PAGE_FLIP_ASYNC) && 
> !dev->mode_config.async_page_flip)
>               return -EINVAL;
>  
> -     obj = drm_mode_object_find(dev, page_flip->crtc_id, 
> DRM_MODE_OBJECT_CRTC);
> -     if (!obj)
> +     crtc = drm_crtc_find(dev, page_flip->crtc_id);
> +     if (!crtc)
>               return -ENOENT;
> -     crtc = obj_to_crtc(obj);
>  
>       mutex_lock(&crtc->mutex);
>       if (crtc->primary->fb == NULL) {
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 5c1c31c..cdd5687 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -1063,6 +1063,15 @@ extern int drm_format_vert_chroma_subsampling(uint32_t 
> format);
>  extern const char *drm_get_format_name(uint32_t format);
>  
>  /* Helpers */
> +
> +static inline struct drm_plane *drm_plane_find(struct drm_device *dev,
> +             uint32_t id)
> +{
> +     struct drm_mode_object *mo;
> +     mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PLANE);
> +     return mo ? obj_to_plane(mo) : NULL;
> +}
> +
>  static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
>       uint32_t id)
>  {
> @@ -1079,6 +1088,30 @@ static inline struct drm_encoder 
> *drm_encoder_find(struct drm_device *dev,
>       return mo ? obj_to_encoder(mo) : NULL;
>  }
>  
> +static inline struct drm_connector *drm_connector_find(struct drm_device 
> *dev,
> +             uint32_t id)
> +{
> +     struct drm_mode_object *mo;
> +     mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CONNECTOR);
> +     return mo ? obj_to_connector(mo) : NULL;
> +}
> +
> +static inline struct drm_property *drm_property_find(struct drm_device *dev,
> +             uint32_t id)
> +{
> +     struct drm_mode_object *mo;
> +     mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PROPERTY);
> +     return mo ? obj_to_property(mo) : NULL;
> +}
> +
> +static inline struct drm_property_blob *
> +drm_property_blob_find(struct drm_device *dev, uint32_t id)
> +{
> +     struct drm_mode_object *mo;
> +     mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_BLOB);
> +     return mo ? obj_to_blob(mo) : NULL;
> +}
> +
>  /* Plane list iterator for legacy (overlay only) planes. */
>  #define drm_for_each_legacy_plane(plane, planelist) \
>       list_for_each_entry(plane, planelist, head) \
> -- 
> 1.9.3
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

Reply via email to