Message ID | 1461665802-13149-1-git-send-email-tomi.valkeinen@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Tomi, (CC'ing Daniel) Thank you for the patch. On Tuesday 26 Apr 2016 13:16:42 Tomi Valkeinen wrote: > At the moment we don't check the plane input/output sizes, which can > lead to DSS HW errors when invalid values are given from the userspace. > > Add a check so that the sizes are > 0. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> I don't think it makes sense to have an empty source or destination rectangle for any driver, not just omapdrm. Shouldn't this check be added to drm_atomic_plane_check() instead ? > --- > drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > b/drivers/gpu/drm/omapdrm/omap_plane.c index 93ee538a99f5..fa9e5086eb65 > 100644 > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct drm_plane > *plane, if (IS_ERR(crtc_state)) > return PTR_ERR(crtc_state); > > + if (state->src_w == 0 || state->src_h == 0) > + return -EINVAL; > + > + if (state->crtc_w == 0 || state->crtc_h == 0) > + return -EINVAL; > + > if (state->crtc_x < 0 || state->crtc_y < 0) > return -EINVAL;
On Wed, Apr 27, 2016 at 06:30:19PM +0300, Laurent Pinchart wrote: > Hi Tomi, > > (CC'ing Daniel) > > Thank you for the patch. > > On Tuesday 26 Apr 2016 13:16:42 Tomi Valkeinen wrote: > > At the moment we don't check the plane input/output sizes, which can > > lead to DSS HW errors when invalid values are given from the userspace. > > > > Add a check so that the sizes are > 0. > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > > I don't think it makes sense to have an empty source or destination rectangle > for any driver, not just omapdrm. Shouldn't this check be added to > drm_atomic_plane_check() instead ? It's perfectly legal. Just means you're supposed to turn the plane off. > > > --- > > drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > > b/drivers/gpu/drm/omapdrm/omap_plane.c index 93ee538a99f5..fa9e5086eb65 > > 100644 > > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > > @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct drm_plane > > *plane, if (IS_ERR(crtc_state)) > > return PTR_ERR(crtc_state); > > > > + if (state->src_w == 0 || state->src_h == 0) > > + return -EINVAL; > > + > > + if (state->crtc_w == 0 || state->crtc_h == 0) > > + return -EINVAL; > > + > > if (state->crtc_x < 0 || state->crtc_y < 0) > > return -EINVAL; > > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi Ville, On Wednesday 27 Apr 2016 20:29:24 Ville Syrjälä wrote: > On Wed, Apr 27, 2016 at 06:30:19PM +0300, Laurent Pinchart wrote: > > Hi Tomi, > > > > (CC'ing Daniel) > > > > Thank you for the patch. > > > > On Tuesday 26 Apr 2016 13:16:42 Tomi Valkeinen wrote: > > > At the moment we don't check the plane input/output sizes, which can > > > lead to DSS HW errors when invalid values are given from the userspace. > > > > > > Add a check so that the sizes are > 0. > > > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > > > > I don't think it makes sense to have an empty source or destination > > rectangle for any driver, not just omapdrm. Shouldn't this check be added > > to drm_atomic_plane_check() instead ? > > It's perfectly legal. Just means you're supposed to turn the plane off. Where is that documented ? I thought turning the plane off was done by setting the framebuffer to NULL (in which case the src and crtc coordinates must of course be ignored) ? > > > --- > > > > > > drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > > > 1 file changed, 6 insertions(+) > > > > > > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > > > b/drivers/gpu/drm/omapdrm/omap_plane.c index 93ee538a99f5..fa9e5086eb65 > > > 100644 > > > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > > > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > > > @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct drm_plane > > > *plane, if (IS_ERR(crtc_state)) > > > > > > return PTR_ERR(crtc_state); > > > > > > + if (state->src_w == 0 || state->src_h == 0) > > > + return -EINVAL; > > > + > > > + if (state->crtc_w == 0 || state->crtc_h == 0) > > > + return -EINVAL; > > > + > > > > > > if (state->crtc_x < 0 || state->crtc_y < 0) > > > > > > return -EINVAL;
On Wed, Apr 27, 2016 at 11:02:17PM +0300, Laurent Pinchart wrote: > Hi Ville, > > On Wednesday 27 Apr 2016 20:29:24 Ville Syrjälä wrote: > > On Wed, Apr 27, 2016 at 06:30:19PM +0300, Laurent Pinchart wrote: > > > Hi Tomi, > > > > > > (CC'ing Daniel) > > > > > > Thank you for the patch. > > > > > > On Tuesday 26 Apr 2016 13:16:42 Tomi Valkeinen wrote: > > > > At the moment we don't check the plane input/output sizes, which can > > > > lead to DSS HW errors when invalid values are given from the userspace. > > > > > > > > Add a check so that the sizes are > 0. > > > > > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > > > > > > I don't think it makes sense to have an empty source or destination > > > rectangle for any driver, not just omapdrm. Shouldn't this check be added > > > to drm_atomic_plane_check() instead ? > > > > It's perfectly legal. Just means you're supposed to turn the plane off. > > Where is that documented ? Do we have uapi docs? > I thought turning the plane off was done by setting > the framebuffer to NULL (in which case the src and crtc coordinates must of > course be ignored) ? That's another way. However setting the fb to 0 is a bit different, as then you're not holding a ref on the fb (nor does it get pinned etc.). So eg. if you want to make sure that you really can pin the fb, but want to have the plane disabled for a bit, you could just the clear out the coordinates. Also from an implementation POV it's no different than the plane just getting clipped away entirely, so supporting this way of disabling a plane has no extra cost really. > > > > > --- > > > > > > > > drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > > > > 1 file changed, 6 insertions(+) > > > > > > > > diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > > > > b/drivers/gpu/drm/omapdrm/omap_plane.c index 93ee538a99f5..fa9e5086eb65 > > > > 100644 > > > > --- a/drivers/gpu/drm/omapdrm/omap_plane.c > > > > +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > > > > @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct drm_plane > > > > *plane, if (IS_ERR(crtc_state)) > > > > > > > > return PTR_ERR(crtc_state); > > > > > > > > + if (state->src_w == 0 || state->src_h == 0) > > > > + return -EINVAL; > > > > + > > > > + if (state->crtc_w == 0 || state->crtc_h == 0) > > > > + return -EINVAL; > > > > + > > > > > > > > if (state->crtc_x < 0 || state->crtc_y < 0) > > > > > > > > return -EINVAL; > > -- > Regards, > > Laurent Pinchart
Hi Ville, On Thursday 28 Apr 2016 21:30:18 Ville Syrjälä wrote: > On Wed, Apr 27, 2016 at 11:02:17PM +0300, Laurent Pinchart wrote: > > On Wednesday 27 Apr 2016 20:29:24 Ville Syrjälä wrote: > >> On Wed, Apr 27, 2016 at 06:30:19PM +0300, Laurent Pinchart wrote: > >>> On Tuesday 26 Apr 2016 13:16:42 Tomi Valkeinen wrote: > >>>> At the moment we don't check the plane input/output sizes, which can > >>>> lead to DSS HW errors when invalid values are given from the > >>>> userspace. > >>>> > >>>> Add a check so that the sizes are > 0. > >>>> > >>>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> > >>> > >>> I don't think it makes sense to have an empty source or destination > >>> rectangle for any driver, not just omapdrm. Shouldn't this check be > >>> added to drm_atomic_plane_check() instead ? > >> > >> It's perfectly legal. Just means you're supposed to turn the plane off. > > > > Where is that documented ? > > Do we have uapi docs? My point, really :-) > > I thought turning the plane off was done by setting > > the framebuffer to NULL (in which case the src and crtc coordinates must > > of course be ignored) ? > > That's another way. However setting the fb to 0 is a bit different, as > then you're not holding a ref on the fb (nor does it get pinned etc.). > So eg. if you want to make sure that you really can pin the fb, but > want to have the plane disabled for a bit, you could just the clear out > the coordinates. > > Also from an implementation POV it's no different than the plane just > getting clipped away entirely, so supporting this way of disabling a > plane has no extra cost really. This really needs to be captured in a uapi documentation, this is the first time I hear about that feature, and I'm pretty sure I'm not the only one. We can't expect drivers to implement a consistent behaviour if the expected behaviour isn't documented. > >>>> --- > >>>> > >>>> drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ > >>>> 1 file changed, 6 insertions(+) > >>>> > >>>> diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c > >>>> b/drivers/gpu/drm/omapdrm/omap_plane.c index > >>>> 93ee538a99f5..fa9e5086eb65 > >>>>> 100644 > >>>> --- a/drivers/gpu/drm/omapdrm/omap_plane.c > >>>> +++ b/drivers/gpu/drm/omapdrm/omap_plane.c > >>>> @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct > >>>> drm_plane > >>> *plane, if (IS_ERR(crtc_state)) > >>>> > >>>> return PTR_ERR(crtc_state); > >>>> > >>>> + if (state->src_w == 0 || state->src_h == 0) > >>>> + return -EINVAL; > >>>> + > >>>> + if (state->crtc_w == 0 || state->crtc_h == 0) > >>>> + return -EINVAL; > >>>> + > >>>> > >>>> if (state->crtc_x < 0 || state->crtc_y < 0) > >>>> > >>>> return -EINVAL;
On Thu, Apr 28, 2016 at 11:52 PM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: >> > I thought turning the plane off was done by setting >> > the framebuffer to NULL (in which case the src and crtc coordinates must >> > of course be ignored) ? >> >> That's another way. However setting the fb to 0 is a bit different, as >> then you're not holding a ref on the fb (nor does it get pinned etc.). >> So eg. if you want to make sure that you really can pin the fb, but >> want to have the plane disabled for a bit, you could just the clear out >> the coordinates. >> >> Also from an implementation POV it's no different than the plane just >> getting clipped away entirely, so supporting this way of disabling a >> plane has no extra cost really. > > This really needs to be captured in a uapi documentation, this is the first > time I hear about that feature, and I'm pretty sure I'm not the only one. We > can't expect drivers to implement a consistent behaviour if the expected > behaviour isn't documented. I think we also have some room for better helpers. There's one to validate plane state, but it was written back for legacy planes and so takes slightly different arguments than what drm_plane_state provides. Doing an atomic version of that would likely get rid of lots of duplicated boilerplate all over drivers. And that helper does compute bool visible how Ville explained here. -Daniel
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c index 93ee538a99f5..fa9e5086eb65 100644 --- a/drivers/gpu/drm/omapdrm/omap_plane.c +++ b/drivers/gpu/drm/omapdrm/omap_plane.c @@ -168,6 +168,12 @@ static int omap_plane_atomic_check(struct drm_plane *plane, if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); + if (state->src_w == 0 || state->src_h == 0) + return -EINVAL; + + if (state->crtc_w == 0 || state->crtc_h == 0) + return -EINVAL; + if (state->crtc_x < 0 || state->crtc_y < 0) return -EINVAL;
At the moment we don't check the plane input/output sizes, which can lead to DSS HW errors when invalid values are given from the userspace. Add a check so that the sizes are > 0. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> --- drivers/gpu/drm/omapdrm/omap_plane.c | 6 ++++++ 1 file changed, 6 insertions(+)