On Wed, May 13, 2015 at 10:37:25AM +0200, Maarten Lankhorst wrote: > There are cases where we want to test if a given object is > part of the state, but don't want to add them if they're not. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Yeah makes sense to wrap these. Applied to topic/drm-misc, thanks. -Daniel > --- > drivers/gpu/drm/drm_atomic.c | 18 +++++++--------- > include/drm/drm_atomic.h | 50 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 58 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index 88259057f87b..47364f244dc0 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -263,13 +263,12 @@ struct drm_crtc_state * > drm_atomic_get_crtc_state(struct drm_atomic_state *state, > struct drm_crtc *crtc) > { > - int ret, index; > + int ret, index = drm_crtc_index(crtc); > struct drm_crtc_state *crtc_state; > > - index = drm_crtc_index(crtc); > - > - if (state->crtc_states[index]) > - return state->crtc_states[index]; > + crtc_state = drm_atomic_get_existing_crtc_state(state, crtc); > + if (crtc_state) > + return crtc_state; > > ret = drm_modeset_lock(&crtc->mutex, state->acquire_ctx); > if (ret) > @@ -397,13 +396,12 @@ struct drm_plane_state * > drm_atomic_get_plane_state(struct drm_atomic_state *state, > struct drm_plane *plane) > { > - int ret, index; > + int ret, index = drm_plane_index(plane); > struct drm_plane_state *plane_state; > > - index = drm_plane_index(plane); > - > - if (state->plane_states[index]) > - return state->plane_states[index]; > + plane_state = drm_atomic_get_existing_plane_state(state, plane); > + if (plane_state) > + return plane_state; > > ret = drm_modeset_lock(&plane->mutex, state->acquire_ctx); > if (ret) > diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h > index 953af6bd7430..6445970535ec 100644 > --- a/include/drm/drm_atomic.h > +++ b/include/drm/drm_atomic.h > @@ -59,6 +59,56 @@ int drm_atomic_connector_set_property(struct drm_connector *connector, > struct drm_connector_state *state, struct drm_property *property, > uint64_t val); > > +/** > + * drm_atomic_get_existing_crtc_state - get crtc state, if it exists > + * @state: global atomic state object > + * @crtc: crtc to grab > + * > + * This function returns the crtc state for the given crtc, or NULL > + * if the crtc is not part of the global atomic state. > + */ > +static inline struct drm_crtc_state * > +drm_atomic_get_existing_crtc_state(struct drm_atomic_state *state, > + struct drm_crtc *crtc) > +{ > + return state->crtc_states[drm_crtc_index(crtc)]; > +} > + > +/** > + * drm_atomic_get_existing_plane_state - get plane state, if it exists > + * @state: global atomic state object > + * @plane: plane to grab > + * > + * This function returns the plane state for the given plane, or NULL > + * if the plane is not part of the global atomic state. > + */ > +static inline struct drm_plane_state * > +drm_atomic_get_existing_plane_state(struct drm_atomic_state *state, > + struct drm_plane *plane) > +{ > + return state->plane_states[drm_plane_index(plane)]; > +} > + > +/** > + * drm_atomic_get_existing_connector_state - get connector state, if it exists > + * @state: global atomic state object > + * @connector: connector to grab > + * > + * This function returns the connector state for the given connector, > + * or NULL if the connector is not part of the global atomic state. > + */ > +static inline struct drm_connector_state * > +drm_atomic_get_existing_connector_state(struct drm_atomic_state *state, > + struct drm_connector *connector) > +{ > + int index = drm_connector_index(connector); > + > + if (index >= state->num_connector) > + return NULL; > + > + return state->connector_states[index]; > +} > + > int __must_check > drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, > struct drm_crtc *crtc); > -- > 2.1.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel