Message ID | 1477597031-5139-2-git-send-email-gustavo@padovan.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Oct 27, 2016 at 05:37:06PM -0200, Gustavo Padovan wrote: > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > This new function should be used by drivers when setting a implicit > fence for the plane. It abstracts the fact that the user might have > chosen explicit fencing instead. > > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > --- > drivers/gpu/drm/drm_atomic.c | 30 ++++++++++++++++++++++++++++++ > include/drm/drm_atomic.h | 2 ++ > include/drm/drm_plane.h | 2 +- > 3 files changed, 33 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index c32fb3c..5e73954 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -1147,6 +1147,36 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, > EXPORT_SYMBOL(drm_atomic_set_fb_for_plane); > > /** > + * drm_atomic_set_fence_for_plane - set fence for plane > + * @plane_state: atomic state object for the plane > + * @fence: dma_fence to use for the plane > + * > + * Helper to setup the plane_state fence in case it is not set yet. > + * By using this drivers doesn't need to worry if the user choose > + * implicit or explicit fencing. > + * > + * This function will not set the fence to the state if it was set > + * via explicit fencing interfaces on the atomic ioctl. It will > + * all drope the reference to the fence as we not storing it > + * anywhere. > + * > + * Otherwise, if plane_state->fence is not set this function we > + * just set it with the received implict fence. > + */ > +void > +drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, > + struct dma_fence *fence) > +{ > + if (plane_state->fence) { > + dma_fence_put(fence); > + return; > + } > + > + plane_state->fence = fence; > +} > +EXPORT_SYMBOL(drm_atomic_set_fence_for_plane); > + > +/** > * drm_atomic_set_crtc_for_connector - set crtc for connector > * @conn_state: atomic state object for the connector > * @crtc: crtc to use for the connector > diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h > index fc8af53..2d1e9c9 100644 > --- a/include/drm/drm_atomic.h > +++ b/include/drm/drm_atomic.h > @@ -345,6 +345,8 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, > struct drm_crtc *crtc); > void drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, > struct drm_framebuffer *fb); > +void drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, > + struct dma_fence *fence); > int __must_check > drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state, > struct drm_crtc *crtc); > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h > index c5e8a0d..68f6d22 100644 > --- a/include/drm/drm_plane.h > +++ b/include/drm/drm_plane.h > @@ -59,7 +59,7 @@ struct drm_plane_state { > > struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */ > struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */ > - struct dma_fence *fence; > + struct dma_fence *fence; /* do not write directly, use drm_atomic_set_fence_for_plane() */ > > /* Signed dest location allows it to be partially off screen */ > int32_t crtc_x, crtc_y; > -- > 2.5.5 >
On Fri, Oct 28, 2016 at 09:30:26AM +0200, Daniel Vetter wrote: > On Thu, Oct 27, 2016 at 05:37:06PM -0200, Gustavo Padovan wrote: > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > > > This new function should be used by drivers when setting a implicit > > fence for the plane. It abstracts the fact that the user might have > > chosen explicit fencing instead. > > > > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > > > --- > > drivers/gpu/drm/drm_atomic.c | 30 ++++++++++++++++++++++++++++++ > > include/drm/drm_atomic.h | 2 ++ > > include/drm/drm_plane.h | 2 +- > > 3 files changed, 33 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > > index c32fb3c..5e73954 100644 > > --- a/drivers/gpu/drm/drm_atomic.c > > +++ b/drivers/gpu/drm/drm_atomic.c > > @@ -1147,6 +1147,36 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, > > EXPORT_SYMBOL(drm_atomic_set_fb_for_plane); > > > > /** > > + * drm_atomic_set_fence_for_plane - set fence for plane > > + * @plane_state: atomic state object for the plane > > + * @fence: dma_fence to use for the plane > > + * > > + * Helper to setup the plane_state fence in case it is not set yet. > > + * By using this drivers doesn't need to worry if the user choose > > + * implicit or explicit fencing. > > + * > > + * This function will not set the fence to the state if it was set > > + * via explicit fencing interfaces on the atomic ioctl. It will > > + * all drope the reference to the fence as we not storing it > > + * anywhere. > > + * > > + * Otherwise, if plane_state->fence is not set this function we > > + * just set it with the received implict fence. > > + */ > > +void > > +drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, > > + struct dma_fence *fence) > > +{ > > + if (plane_state->fence) { > > + dma_fence_put(fence); > > + return; > > + } > > + > > + plane_state->fence = fence; > > +} > > +EXPORT_SYMBOL(drm_atomic_set_fence_for_plane); > > + > > +/** > > * drm_atomic_set_crtc_for_connector - set crtc for connector > > * @conn_state: atomic state object for the connector > > * @crtc: crtc to use for the connector > > diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h > > index fc8af53..2d1e9c9 100644 > > --- a/include/drm/drm_atomic.h > > +++ b/include/drm/drm_atomic.h > > @@ -345,6 +345,8 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, > > struct drm_crtc *crtc); > > void drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, > > struct drm_framebuffer *fb); > > +void drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, > > + struct dma_fence *fence); > > int __must_check > > drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state, > > struct drm_crtc *crtc); > > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h > > index c5e8a0d..68f6d22 100644 > > --- a/include/drm/drm_plane.h > > +++ b/include/drm/drm_plane.h > > @@ -59,7 +59,7 @@ struct drm_plane_state { > > > > struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */ > > struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */ > > - struct dma_fence *fence; > > + struct dma_fence *fence; /* do not write directly, use drm_atomic_set_fence_for_plane() */ Ok, small bikeshed maybe: When you feel the need to add more comments in-line in a struct, then please switch to the in-line kernel-doc member documentation style, and merge the existing kerneldoc together with these additional comments. Would be great to do that with all the others here too. Follow-up patch to address this would be great. -Daniel > > > > /* Signed dest location allows it to be partially off screen */ > > int32_t crtc_x, crtc_y; > > -- > > 2.5.5 > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index c32fb3c..5e73954 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1147,6 +1147,36 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, EXPORT_SYMBOL(drm_atomic_set_fb_for_plane); /** + * drm_atomic_set_fence_for_plane - set fence for plane + * @plane_state: atomic state object for the plane + * @fence: dma_fence to use for the plane + * + * Helper to setup the plane_state fence in case it is not set yet. + * By using this drivers doesn't need to worry if the user choose + * implicit or explicit fencing. + * + * This function will not set the fence to the state if it was set + * via explicit fencing interfaces on the atomic ioctl. It will + * all drope the reference to the fence as we not storing it + * anywhere. + * + * Otherwise, if plane_state->fence is not set this function we + * just set it with the received implict fence. + */ +void +drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, + struct dma_fence *fence) +{ + if (plane_state->fence) { + dma_fence_put(fence); + return; + } + + plane_state->fence = fence; +} +EXPORT_SYMBOL(drm_atomic_set_fence_for_plane); + +/** * drm_atomic_set_crtc_for_connector - set crtc for connector * @conn_state: atomic state object for the connector * @crtc: crtc to use for the connector diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index fc8af53..2d1e9c9 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -345,6 +345,8 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state, struct drm_crtc *crtc); void drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state, struct drm_framebuffer *fb); +void drm_atomic_set_fence_for_plane(struct drm_plane_state *plane_state, + struct dma_fence *fence); int __must_check drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state, struct drm_crtc *crtc); diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h index c5e8a0d..68f6d22 100644 --- a/include/drm/drm_plane.h +++ b/include/drm/drm_plane.h @@ -59,7 +59,7 @@ struct drm_plane_state { struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */ struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */ - struct dma_fence *fence; + struct dma_fence *fence; /* do not write directly, use drm_atomic_set_fence_for_plane() */ /* Signed dest location allows it to be partially off screen */ int32_t crtc_x, crtc_y;