Hi Sakari,
On Friday 06 September 2013 20:10:12 Sakari Ailus wrote:
> On Fri, Sep 06, 2013 at 06:30:47PM +0200, Laurent Pinchart wrote:
> > On Wednesday 04 September 2013 03:09:42 Sakari Ailus wrote:
> > > Do not allow streaming if a pad with MEDIA_PAD_FL_MUST_CONNECT flag is
> > > connected by links that are all inactive.
> > >
> > > This patch makes it possible to avoid drivers having to check for the
> > > most common case of link state validation: a sink pad that must be
> > > connected.
> > >
> > > Signed-off-by: Sakari Ailus <[email protected]>
> > > ---
> > >
> > > drivers/media/media-entity.c | 41 +++++++++++++++++++++++++++++------
> > > 1 file changed, 34 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
> > > index 2c286c3..567a171 100644
> > > --- a/drivers/media/media-entity.c
> > > +++ b/drivers/media/media-entity.c
[snip]
> > > @@ -248,21 +250,46 @@ __must_check int
> > > media_entity_pipeline_start(struct
> > > media_entity *entity,
> > > if (!entity->ops || !entity->ops->link_validate)
> > > continue;
> > >
> > > + bitmap_zero(active, entity->num_pads);
> > > + bitmap_fill(has_no_links, entity->num_pads);
> > > +
> > > for (i = 0; i < entity->num_links; i++) {
> > > struct media_link *link = &entity->links[i];
> > > -
> > > - /* Is this pad part of an enabled link? */
> > > - if (!(link->flags & MEDIA_LNK_FL_ENABLED))
> > > - continue;
> > > -
> > > - /* Are we the sink or not? */
> > > - if (link->sink->entity != entity)
> > > + struct media_pad *pad = link->sink->entity == entity
> > > + ? link->sink : link->source;
> > > +
> > > + /* Mark that a pad is connected by a link. */
> > > + bitmap_clear(has_no_links, pad->index, 1);
> > > +
> > > + /*
> > > + * Pads that either do not need to connect or
> > > + * are connected through an enabled link are
> > > + * fine.
> > > + */
> > > + if (!(pad->flags & MEDIA_PAD_FL_MUST_CONNECT)
> > > + || link->flags & MEDIA_LNK_FL_ENABLED)
> >
> > With the || moved on the previous line (here and below),
>
> I'd like to claim the above is more clear and conforms to GNU coding
> standards whereas the kernel CodingStyle doesn't suggest either way:
>
> <URL:http://www.gnu.org/prep/standards/standards.html#Formatting>
Quoting Documentation/CodingStyle:
"First off, I'd suggest printing out a copy of the GNU coding standards,
and NOT read it. Burn them, it's a great symbolic gesture."
:-)
> I feel we've had this discussion before. :-)
>
> I have to admit I disagree with Stallman's liberal use of parentheses and a
> funny habit of having a space between a function name and the parentheses
> enclosing its arguments. ;-)
>
> > Acked-by: Laurent Pinchart <[email protected]>
> >
> > If that's fine with you there's no need to resent, I'll take the patch in
> > my tree with that modification.
>
> I won't say no, but I would prefer getting an ack from someone else, too,
> for the two first patches. A less permissive variant of this was dismissed
> around a year ago, potentially perhaps there was no pressing need for that
> kind of a change. The earlier set required all sink pads must have a
> connected link (which indeed was too restrictive, I agree).
>
> <URL:https://linuxtv.org/patch/15205/>
I'm fine with waiting for other ack's. I'll let you handle the required
pinging and poking though :-)
> As seen in the fourth patch of this set, this makes it possible to avoid
> another loop (done in the driver) over the pipeline, which was my motivation
> for this patch --- so I think this is the right thing to do.
>
> Other drivers could be changed the same way but I think this is up to the
> driver authors. There could be other reasons for the pad to need connecting;
> tha absence of the flag won't say there aren't.
>
> > > + bitmap_set(active, pad->index, 1);
> > > +
> > > + /*
> > > + * Link validation will only take place for
> > > + * sink ends of the link that are enabled.
> > > + */
> > > + if (link->sink != pad
> > > + || !(link->flags & MEDIA_LNK_FL_ENABLED))
> > > continue;
> > >
> > > ret = entity->ops->link_validate(link);
> > > if (ret < 0 && ret != -ENOIOCTLCMD)
> > > goto error;
> > > }
> > > +
> > > + /* Either no links or validated links are fine. */
> > > + bitmap_or(active, active, has_no_links, entity->num_pads);
> > > +
> > > + if (!bitmap_full(active, entity->num_pads)) {
> > > + ret = -EPIPE;
> > > + goto error;
> > > + }
> > > }
> > >
> > > mutex_unlock(&mdev->graph_mutex);
--
Regards,
Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html