Em Mon, 20 May 2019 21:01:44 +0100 Sean Young <sean@xxxxxxxx> escreveu: > This simplifies the code a little. This does move a dev_dbg() into a > timing sensitive code path. This is in the microseconds order so dev_dbg() > should not make a difference. This may actually not be true... I remember we had, in the past, at the saa7134 driver a certain tuner that require a small delay at the order of ~1 millisecond for it to work. There was a printk() message between the two hardware register settings at the place that would require the delay. I usually debug those things using a serial console, with debug messages enabled. So, every time I tested, I was unable to reproduce the bug, while, for others, the bug was there. Ok, the internal print facilities upstream changed a lot those years, so, things may have changed if I was here to do the tests, but it sounds a little risky to do such change without enabling a lot of debug stuff and test it on a real hardware via a serial console. > > Signed-off-by: Sean Young <sean@xxxxxxxx> > --- > drivers/media/dvb-core/dvb_frontend.c | 39 +++++++++++++-------------- > 1 file changed, 18 insertions(+), 21 deletions(-) > > diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c > index d3c0f6267bf8..3aad13415654 100644 > --- a/drivers/media/dvb-core/dvb_frontend.c > +++ b/drivers/media/dvb-core/dvb_frontend.c > @@ -47,15 +47,12 @@ > #include <media/dvbdev.h> > #include <linux/dvb/version.h> > > -static int dvb_frontend_debug; > static int dvb_shutdown_timeout; > static int dvb_force_auto_inversion; > static int dvb_override_tune_delay; > static int dvb_powerdown_on_sleep = 1; > static int dvb_mfe_wait_time = 5; > > -module_param_named(frontend_debug, dvb_frontend_debug, int, 0644); > -MODULE_PARM_DESC(frontend_debug, "Turn on/off frontend core debugging (default:off)."); > module_param(dvb_shutdown_timeout, int, 0644); > MODULE_PARM_DESC(dvb_shutdown_timeout, "wait <shutdown_timeout> seconds after close() before suspending hardware"); > module_param(dvb_force_auto_inversion, int, 0644); > @@ -917,9 +914,9 @@ static void dvb_frontend_get_frequency_limits(struct dvb_frontend *fe, > "DVB: adapter %i frontend %u frequency limits undefined - fix the driver\n", > fe->dvb->num, fe->id); > > - if (dvb_frontend_debug) > - dprintk("frequency interval: tuner: %u...%u, frontend: %u...%u", > - tuner_min, tuner_max, frontend_min, frontend_max); > + dev_dbg(fe->dvb->device, > + "frequency interval: tuner: %u...%u, frontend: %u...%u", > + tuner_min, tuner_max, frontend_min, frontend_max); > > /* If the standard is for satellite, convert frequencies to kHz */ > switch (c->delivery_system) { > @@ -2586,41 +2583,41 @@ static int dvb_frontend_handle_ioctl(struct file *file, > */ > unsigned long swcmd = ((unsigned long)parg) << 1; > ktime_t nexttime; > - ktime_t tv[10]; > + ktime_t now, lasttime; > int i; > u8 last = 1; > > - if (dvb_frontend_debug) > - dprintk("switch command: 0x%04lx\n", > - swcmd); > + dev_dbg(fe->dvb->device, "switch command: 0x%04lx\n", > + swcmd); > nexttime = ktime_get_boottime(); > - if (dvb_frontend_debug) > - tv[0] = nexttime; > /* before sending a command, initialize by sending > * a 32ms 18V to the switch > */ > fe->ops.set_voltage(fe, SEC_VOLTAGE_18); > + > + dev_dbg(fe->dvb->device, "(adapter %d): switch delay (should be 32k followed by all 8k)\n", > + fe->dvb->num); > + > + lasttime = nexttime; > dvb_frontend_sleep_until(&nexttime, 32000); > > for (i = 0; i < 9; i++) { > - if (dvb_frontend_debug) > - tv[i + 1] = ktime_get_boottime(); > if ((swcmd & 0x01) != last) { > /* set voltage to (last ? 13V : 18V) */ > fe->ops.set_voltage(fe, (last) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18); > last = (last) ? 0 : 1; > } > swcmd = swcmd >> 1; > + > + now = ktime_get_boottime(); > + dev_dbg(fe->dvb->device, "%d: %lld\n", i, > + ktime_us_delta(now, lasttime)); > + lasttime = now; > + > if (i != 8) > dvb_frontend_sleep_until(&nexttime, 8000); > } > - if (dvb_frontend_debug) { > - dprintk("(adapter %d): switch delay (should be 32k followed by all 8k)\n", > - fe->dvb->num); > - for (i = 1; i < 10; i++) > - pr_info("%d: %d\n", i, > - (int)ktime_us_delta(tv[i], tv[i - 1])); > - } > + > err = 0; > fepriv->state = FESTATE_DISEQC; > fepriv->status = 0; Thanks, Mauro