summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/usbdux.c
diff options
context:
space:
mode:
authorBernd Porr <BerndPorr@f2s.com>2009-05-24 20:36:09 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-19 11:00:34 -0700
commitefe8d60a923ddd00de394381cb30aab5114b71a4 (patch)
tree5579b441e220826643224e44f9e96065a996b4c9 /drivers/staging/comedi/drivers/usbdux.c
parent0b8f754a6220158f2348bc6eae2772bc64bc98a2 (diff)
Staging: comedi: usbdux: buffer overflow error handling
These changes guarantee that the URBs are not resubmitted in case of a comedi buffer overflow. Otherwise this runs in the background even when the userspace program has terminated. From: Bernd Porr <BerndPorr@f2s.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/comedi/drivers/usbdux.c')
-rw-r--r--drivers/staging/comedi/drivers/usbdux.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c
index eea7dbdde0be..171a6f2ff74f 100644
--- a/drivers/staging/comedi/drivers/usbdux.c
+++ b/drivers/staging/comedi/drivers/usbdux.c
@@ -509,14 +509,19 @@ static void usbduxsub_ai_IsocIrq(struct urb *urb)
for (i = 0; i < n; i++) {
/* transfer data */
if (CR_RANGE(s->async->cmd.chanlist[i]) <= 1) {
- comedi_buf_put
+ err = comedi_buf_put
(s->async,
- le16_to_cpu(this_usbduxsub->
- inBuffer[i]) ^ 0x800);
+ le16_to_cpu(this_usbduxsub->
+ inBuffer[i]) ^ 0x800);
} else {
- comedi_buf_put
+ err = comedi_buf_put
(s->async,
- le16_to_cpu(this_usbduxsub->inBuffer[i]));
+ le16_to_cpu(this_usbduxsub->inBuffer[i]));
+ }
+ if (unlikely(err == 0)) {
+ /* buffer overflow */
+ usbdux_ai_stop(this_usbduxsub, 0);
+ return;
}
}
/* tell comedi that data is there */