[Lucid] [Patch 1/3] SRU: Staging: comedi: fix usbdux timeout bug
Andy Whitcroft
apw at canonical.com
Fri Apr 16 18:11:38 UTC 2010
On Fri, Apr 16, 2010 at 10:25:02AM -0700, Leann Ogasawara wrote:
> >From 840aaea048c018cae6211588292d228d186fa2ab Mon Sep 17 00:00:00 2001
> From: Bernd Porr <BerndPorr at f2s.com>
> Date: Mon, 16 Nov 2009 01:12:02 +0000
> Subject: [PATCH 1/3] Staging: comedi: fix usbdux timeout bug
>
> BugLink: http://bugs.launchpad.net/bugs/483343
>
> I've fixed a bug in the USBDUX driver which caused timeouts while
> sending commands to the boards. This was mainly because of one bulk
> transfer which had a timeout of 1ms (!). I've now set all timeouts to
> 1000ms.
>
> From: Bernd Porr <BerndPorr at f2s.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
>
> (cherry picked from commit ea25371a78c33e276527361d3ab19393d558b2fd upstream)
>
> Signed-off-by: Leann Ogasawara <leann.ogasawara at canonical.com>
> ---
> drivers/staging/comedi/drivers/usbdux.c | 17 +++++++++--------
> 1 files changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c
> index cca4e86..a4a65b0 100644
> --- a/drivers/staging/comedi/drivers/usbdux.c
> +++ b/drivers/staging/comedi/drivers/usbdux.c
> @@ -1,4 +1,4 @@
> -#define DRIVER_VERSION "v2.2"
> +#define DRIVER_VERSION "v2.3"
> #define DRIVER_AUTHOR "Bernd Porr, BerndPorr at f2s.com"
> #define DRIVER_DESC "Stirling/ITL USB-DUX -- Bernd.Porr at f2s.com"
> /*
> @@ -80,6 +80,7 @@ sampling rate. If you sample two channels you get 4kHz and so on.
> * 2.0: PWM seems to be stable and is not interfering with the other functions
> * 2.1: changed PWM API
> * 2.2: added firmware kernel request to fix an udev problem
> + * 2.3: corrected a bug in bulk timeouts which were far too short
> *
> */
>
> @@ -101,8 +102,8 @@ sampling rate. If you sample two channels you get 4kHz and so on.
>
> #define BOARDNAME "usbdux"
>
> -/* timeout for the USB-transfer */
> -#define EZTIMEOUT 30
> +/* timeout for the USB-transfer in ms*/
> +#define BULK_TIMEOUT 1000
>
> /* constants for "firmware" upload and download */
> #define USBDUXSUB_FIRMWARE 0xA0
> @@ -750,7 +751,7 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub)
> /* Length */
> 1,
> /* Timeout */
> - EZTIMEOUT);
> + BULK_TIMEOUT);
> if (errcode < 0) {
> dev_err(&usbduxsub->interface->dev,
> "comedi_: control msg failed (start)\n");
> @@ -780,7 +781,7 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub)
> /* Length */
> 1,
> /* Timeout */
> - EZTIMEOUT);
> + BULK_TIMEOUT);
> if (errcode < 0) {
> dev_err(&usbduxsub->interface->dev,
> "comedi_: control msg failed (stop)\n");
> @@ -810,7 +811,7 @@ static int usbduxsub_upload(struct usbduxsub *usbduxsub,
> /* length */
> len,
> /* timeout */
> - EZTIMEOUT);
> + BULK_TIMEOUT);
> dev_dbg(&usbduxsub->interface->dev, "comedi_: result=%d\n", errcode);
> if (errcode < 0) {
> dev_err(&usbduxsub->interface->dev, "comedi_: upload failed\n");
> @@ -1110,7 +1111,7 @@ static int send_dux_commands(struct usbduxsub *this_usbduxsub, int cmd_type)
> usb_sndbulkpipe(this_usbduxsub->usbdev,
> COMMAND_OUT_EP),
> this_usbduxsub->dux_commands, SIZEOFDUXBUFFER,
> - &nsent, 10);
> + &nsent, BULK_TIMEOUT);
> if (result < 0)
> dev_err(&this_usbduxsub->interface->dev, "comedi%d: "
> "could not transmit dux_command to the usb-device, "
> @@ -1130,7 +1131,7 @@ static int receive_dux_commands(struct usbduxsub *this_usbduxsub, int command)
> usb_rcvbulkpipe(this_usbduxsub->usbdev,
> COMMAND_IN_EP),
> this_usbduxsub->insnBuffer, SIZEINSNBUF,
> - &nrec, 1);
> + &nrec, BULK_TIMEOUT);
> if (result < 0) {
> dev_err(&this_usbduxsub->interface->dev, "comedi%d: "
> "insn: USB error %d while receiving DUX command"
> --
Looks possible.
Acked-by: Andy Whitcroft <apw at canonical.com>
-apw
More information about the kernel-team
mailing list