diff mbox series

[2/2] media: dvb: remove replace frontend_debug with dynamic debug

Message ID 20190520200144.16713-2-sean@mess.org (mailing list archive)
State New, archived
Headers show
Series [1/2] media: dvb: warning about dvb frequency limits produces too much noise | expand

Commit Message

Sean Young May 20, 2019, 8:01 p.m. UTC
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.

Signed-off-by: Sean Young <sean@mess.org>
---
 drivers/media/dvb-core/dvb_frontend.c | 39 +++++++++++++--------------
 1 file changed, 18 insertions(+), 21 deletions(-)

Comments

Mauro Carvalho Chehab May 20, 2019, 8:32 p.m. UTC | #1
Em Mon, 20 May 2019 21:01:44 +0100
Sean Young <sean@mess.org> 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@mess.org>
> ---
>  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
diff mbox series

Patch

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;