From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Michael Ira Krufky <mkrufky@linuxtv.org>
Cc: Abylay Ospan <aospan@netup.ru>,
linux-media <linux-media@vger.kernel.org>
Subject: Re: [PATCH] [media] lgdt3306a: remove 20*50 msec unnecessary timeout
Date: Mon, 25 Jul 2016 22:36:53 -0300 [thread overview]
Message-ID: <20160725223653.62493982@recife.lan> (raw)
In-Reply-To: <CAOcJUbwOHCx1y50zt3Mcd39aUZpqd=mOjkQUgJaPxZzzrzzeLQ@mail.gmail.com>
Em Mon, 25 Jul 2016 15:37:14 -0400
Michael Ira Krufky <mkrufky@linuxtv.org> escreveu:
> On Mon, Jul 25, 2016 at 3:28 PM, Mauro Carvalho Chehab
> <mchehab@osg.samsung.com> wrote:
> > Hi Michael,
> >
> > Em Mon, 25 Jul 2016 14:55:51 -0400
> > Michael Ira Krufky <mkrufky@linuxtv.org> escreveu:
> >
> >> On Mon, Jul 25, 2016 at 2:38 PM, Abylay Ospan <aospan@netup.ru> wrote:
> >> > inside lgdt3306a_search we reading demod status 20 times with 50 msec sleep after each read.
> >> > This gives us more than 1 sec of delay. Removing this delay should not affect demod functionality.
> >> >
> >> > Signed-off-by: Abylay Ospan <aospan@netup.ru>
> >> > ---
> >> > drivers/media/dvb-frontends/lgdt3306a.c | 16 ++++------------
> >> > 1 file changed, 4 insertions(+), 12 deletions(-)
> >> >
> >> > diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
> >> > index 179c26e..dad7ad3 100644
> >> > --- a/drivers/media/dvb-frontends/lgdt3306a.c
> >> > +++ b/drivers/media/dvb-frontends/lgdt3306a.c
> >> > @@ -1737,24 +1737,16 @@ static int lgdt3306a_get_tune_settings(struct dvb_frontend *fe,
> >> > static int lgdt3306a_search(struct dvb_frontend *fe)
> >> > {
> >> > enum fe_status status = 0;
> >> > - int i, ret;
> >> > + int ret;
> >> >
> >> > /* set frontend */
> >> > ret = lgdt3306a_set_parameters(fe);
> >> > if (ret)
> >> > goto error;
> >> >
> >> > - /* wait frontend lock */
> >> > - for (i = 20; i > 0; i--) {
> >> > - dbg_info(": loop=%d\n", i);
> >> > - msleep(50);
> >> > - ret = lgdt3306a_read_status(fe, &status);
> >> > - if (ret)
> >> > - goto error;
> >> > -
> >> > - if (status & FE_HAS_LOCK)
> >> > - break;
> >> > - }
> >
> > Could you please explain why lgdt3306a needs the above ugly hack?
> >
> >
> >> > + ret = lgdt3306a_read_status(fe, &status);
> >> > + if (ret)
> >> > + goto error;
> >
> >
> >> >
> >> > /* check if we have a valid signal */
> >> > if (status & FE_HAS_LOCK)
> >>
> >> Your patch removes a loop that was purposefully written here to handle
> >> conditions that are not ideal. Are you sure this change is best for
> >> all users?
> >>
> >> I would disagree with merging this patch.
> >>
> >> Best regards,
> >>
> >> Michael Ira Krufky
>
> Mauro,
>
> I cannot speak for the LG DT3306a part itself, but based on my past
> experience I can say the following:
>
> To my understanding, the hardware might not report a lock on the first
> read_status request, so the driver author chose to include a loop to
> retry a few times before giving up.
A one second wait, trying 50 times is not a "few times". It is a lot!
> In real life scenarios, there are marginal signals that may take a
> longer time to lock onto, but once locked, the demod will deliver a
> reliable stream.
>
> Most applications will only issue a single tune request when trying to
> tune to a given program. The application does not retry the tune
> request if the driver reports no lock.
I don't know a single application that would give up after a
single status request with FE_READ_STATUS. Not even simple
applications like the legacy dvb-tools do that. If such application
exits, it is already broken, as it would fail with most drivers,
as almost no drivers wait for frontend locks.
Also, the frontend thread assumes that the lock will take some
polls to happen, and it keep polling the status for some time,
using the status return to do frequency zig-zag, on tuners that
don't have hardware zig-zag, and to try bandwidth inversion.
Please notice that some legacy DVBv3 applications might want to
be bothered only after lock. In such case, they would be calling
FE_GET_EVENT with the device opened in blocking mode:
https://linuxtv.org/downloads/v4l-dvb-apis-new/media/uapi/dvb/fe-get-event.html
In such case, the frontend's kthread will keep the ioctl blocked
until the device is locked, or will keep returning -EWOULDBLOCK
in non-blocking mode.
> Applying this patch will have the potential to cause userspace to
> appear broken. Some users will not be able to receive some weaker
> channels anymore, and they will have no way to diagnose the problem
> from within their application.
This is not how it is supposed to work. An ioctl should not block
for that long time for no reason, specially since the file
descriptor could be opened in no blocking mode.
The only possible reason to block would be on really broken hardware
that would stop working if the status is called before a certain
number of milliseconds. Even so, the proper implementation would be
add some logic at the driver level to ensure that the hardware won't
be receiving the status command when it is not ready to answer to
it. Some drivers do that.
Regards,
Mauro
next prev parent reply other threads:[~2016-07-26 1:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-25 18:38 [PATCH] [media] lgdt3306a: remove 20*50 msec unnecessary timeout Abylay Ospan
2016-07-25 18:55 ` Michael Ira Krufky
2016-07-25 19:26 ` Abylay Ospan
2016-07-25 19:28 ` Mauro Carvalho Chehab
2016-07-25 19:37 ` Michael Ira Krufky
2016-07-26 1:36 ` Mauro Carvalho Chehab [this message]
2016-07-26 11:11 ` Michael Ira Krufky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160725223653.62493982@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=aospan@netup.ru \
--cc=linux-media@vger.kernel.org \
--cc=mkrufky@linuxtv.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox