From 91f126526d556b2cc57c002ec784a0f6dfa719ad Mon Sep 17 00:00:00 2001 From: Steven Toth Date: Sat, 8 Aug 2009 09:22:02 -0400 Subject: SAA7164: Increase the firmware command timeout to avoid firmware errors. From: Steven Toth The firmware typically responds in < 50ms and, via the interrupts and deferred work queue the caller (blocked in the driver) is signalled very efficiently. In a highly stressed system this can take many multiples of seconds. So, we need a larger maximum timeout for busy systems. Priority: normal Signed-off-by: Steven Toth --- linux/drivers/media/video/saa7164/saa7164-cmd.c | 6 ++++++ linux/drivers/media/video/saa7164/saa7164-core.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'linux') diff --git a/linux/drivers/media/video/saa7164/saa7164-cmd.c b/linux/drivers/media/video/saa7164/saa7164-cmd.c index 171ef116f..cd3af4d43 100644 --- a/linux/drivers/media/video/saa7164/saa7164-cmd.c +++ b/linux/drivers/media/video/saa7164/saa7164-cmd.c @@ -234,6 +234,12 @@ int saa7164_cmd_wait(struct saa7164_dev *dev, u8 seqno) __func__, seqno, dev->cmds[seqno].signalled); /* Wait for signalled to be flagged or timeout */ + /* In a highly stressed system this can easily extend + * into multiple seconds before the deferred worker + * is scheduled, and we're woken up via signal. + * We typically are signalled in < 50ms but it can + * take MUCH longer. + */ wait_event_timeout(*q, dev->cmds[seqno].signalled, (HZ * waitsecs)); r = time_before(jiffies, stamp + (HZ * waitsecs)); if (r) diff --git a/linux/drivers/media/video/saa7164/saa7164-core.c b/linux/drivers/media/video/saa7164/saa7164-core.c index d83dae21b..0c03e420e 100644 --- a/linux/drivers/media/video/saa7164/saa7164-core.c +++ b/linux/drivers/media/video/saa7164/saa7164-core.c @@ -50,7 +50,7 @@ unsigned int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "enable debug messages"); -unsigned int waitsecs = 1; +unsigned int waitsecs = 10; module_param(waitsecs, int, 0644); MODULE_PARM_DESC(debug, "timeout on firmware messages"); -- cgit v1.2.3