patch-2.4.6 linux/drivers/usb/serial/empeg.c
Next file: linux/drivers/usb/serial/ftdi_sio.c
Previous file: linux/drivers/usb/serial/digi_acceleport.c
Back to the patch index
Back to the overall index
- Lines: 181
- Date:
Wed Jun 20 16:52:30 2001
- Orig file:
v2.4.5/linux/drivers/usb/serial/empeg.c
- Orig date:
Mon May 21 15:02:06 2001
diff -u --recursive --new-file v2.4.5/linux/drivers/usb/serial/empeg.c linux/drivers/usb/serial/empeg.c
@@ -1,10 +1,10 @@
/*
* USB Empeg empeg-car player driver
*
- * Copyright (C) 2000
+ * Copyright (C) 2000, 2001
* Gary Brubaker (xavyer@ix.netcom.com)
*
- * Copyright (C) 1999, 2000
+ * Copyright (C) 1999 - 2001
* Greg Kroah-Hartman (greg@kroah.com)
*
* This program is free software; you can redistribute it and/or modify
@@ -13,6 +13,9 @@
*
* See Documentation/usb/usb-serial.txt for more information on using this driver
*
+ * (05/30/2001) gkh
+ * switched from using spinlock to a semaphore, which fixes lots of problems.
+ *
* (04/08/2001) gb
* Identify version on module load.
*
@@ -71,7 +74,7 @@
/*
* Version Information
*/
-#define DRIVER_VERSION "v1.0.0"
+#define DRIVER_VERSION "v1.1"
#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Gary Brubaker <xavyer@ix.netcom.com>"
#define DRIVER_DESC "USB Empeg Mark I/II Driver"
@@ -147,15 +150,14 @@
static int empeg_open (struct usb_serial_port *port, struct file *filp)
{
struct usb_serial *serial = port->serial;
- unsigned long flags;
- int result;
+ int result = 0;;
if (port_paranoia_check (port, __FUNCTION__))
return -ENODEV;
dbg(__FUNCTION__ " - port %d", port->number);
- spin_lock_irqsave (&port->port_lock, flags);
+ down (&port->sem);
++port->open_count;
MOD_INC_USE_COUNT;
@@ -236,9 +238,9 @@
}
- spin_unlock_irqrestore (&port->port_lock, flags);
+ up (&port->sem);
- return 0;
+ return result;
}
@@ -246,7 +248,6 @@
{
struct usb_serial *serial;
unsigned char *transfer_buffer;
- unsigned long flags;
if (port_paranoia_check (port, __FUNCTION__))
return;
@@ -257,7 +258,7 @@
if (!serial)
return;
- spin_lock_irqsave (&port->port_lock, flags);
+ down (&port->sem);
--port->open_count;
@@ -276,13 +277,12 @@
port->open_count = 0;
}
- spin_unlock_irqrestore (&port->port_lock, flags);
+ up (&port->sem);
/* Uncomment the following line if you want to see some statistics in your syslog */
/* info ("Bytes In = %d Bytes Out = %d", bytes_in, bytes_out); */
MOD_DEC_USE_COUNT;
-
}
@@ -377,7 +377,7 @@
dbg(__FUNCTION__ " - port %d", port->number);
- spin_lock_irqsave (&port->port_lock, flags);
+ spin_lock_irqsave (&write_urb_pool_lock, flags);
/* tally up the number of bytes available */
for (i = 0; i < NUM_URBS; ++i) {
@@ -386,7 +386,7 @@
}
}
- spin_unlock_irqrestore (&port->port_lock, flags);
+ spin_unlock_irqrestore (&write_urb_pool_lock, flags);
dbg(__FUNCTION__ " - returns %d", room);
@@ -403,7 +403,7 @@
dbg(__FUNCTION__ " - port %d", port->number);
- spin_lock_irqsave (&port->port_lock, flags);
+ spin_lock_irqsave (&write_urb_pool_lock, flags);
/* tally up the number of bytes waiting */
for (i = 0; i < NUM_URBS; ++i) {
@@ -412,7 +412,7 @@
}
}
- spin_unlock_irqrestore (&port->port_lock, flags);
+ spin_unlock_irqrestore (&write_urb_pool_lock, flags);
dbg (__FUNCTION__ " - returns %d", chars);
@@ -514,15 +514,13 @@
static void empeg_throttle (struct usb_serial_port *port)
{
- unsigned long flags;
-
dbg(__FUNCTION__ " - port %d", port->number);
- spin_lock_irqsave (&port->port_lock, flags);
+ down (&port->sem);
usb_unlink_urb (port->read_urb);
- spin_unlock_irqrestore (&port->port_lock, flags);
+ up (&port->sem);
return;
@@ -531,12 +529,11 @@
static void empeg_unthrottle (struct usb_serial_port *port)
{
- unsigned long flags;
int result;
dbg(__FUNCTION__ " - port %d", port->number);
- spin_lock_irqsave (&port->port_lock, flags);
+ down (&port->sem);
port->read_urb->dev = port->serial->dev;
@@ -545,7 +542,7 @@
if (result)
err(__FUNCTION__ " - failed submitting read urb, error %d", result);
- spin_unlock_irqrestore (&port->port_lock, flags);
+ up (&port->sem);
return;
@@ -680,8 +677,7 @@
}
}
- info(DRIVER_VERSION " " DRIVER_AUTHOR);
- info(DRIVER_DESC);
+ info(DRIVER_VERSION ":" DRIVER_DESC);
return 0;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)