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@xxxxxxxxx> 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel