vserver 1.9.5.x5
[linux-2.6.git] / drivers / usb / serial / whiteheat.c
index 1b75901..b6384a3 100644 (file)
@@ -143,7 +143,7 @@ static int  whiteheat_attach                (struct usb_serial *serial);
 static void whiteheat_shutdown         (struct usb_serial *serial);
 static int  whiteheat_open             (struct usb_serial_port *port, struct file *filp);
 static void whiteheat_close            (struct usb_serial_port *port, struct file *filp);
-static int  whiteheat_write            (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count);
+static int  whiteheat_write            (struct usb_serial_port *port, const unsigned char *buf, int count);
 static int  whiteheat_write_room       (struct usb_serial_port *port);
 static int  whiteheat_ioctl            (struct usb_serial_port *port, struct file * file, unsigned int cmd, unsigned long arg);
 static void whiteheat_set_termios      (struct usb_serial_port *port, struct termios * old);
@@ -679,7 +679,7 @@ static void whiteheat_close(struct usb_serial_port *port, struct file * filp)
        list_for_each_safe(tmp, tmp2, &info->rx_urbs_submitted) {
                wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
                urb = wrap->urb;
-               usb_unlink_urb(urb);
+               usb_kill_urb(urb);
                list_del(tmp);
                list_add(tmp, &info->rx_urbs_free);
        }
@@ -690,7 +690,7 @@ static void whiteheat_close(struct usb_serial_port *port, struct file * filp)
        list_for_each_safe(tmp, tmp2, &info->tx_urbs_submitted) {
                wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
                urb = wrap->urb;
-               usb_unlink_urb(urb);
+               usb_kill_urb(urb);
                list_del(tmp);
                list_add(tmp, &info->tx_urbs_free);
        }
@@ -702,7 +702,7 @@ static void whiteheat_close(struct usb_serial_port *port, struct file * filp)
 }
 
 
-static int whiteheat_write(struct usb_serial_port *port, int from_user, const unsigned char *buf, int count)
+static int whiteheat_write(struct usb_serial_port *port, const unsigned char *buf, int count)
 {
        struct usb_serial *serial = port->serial;
        struct whiteheat_private *info = usb_get_serial_port_data(port);
@@ -734,12 +734,7 @@ static int whiteheat_write(struct usb_serial_port *port, int from_user, const un
                wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
                urb = wrap->urb;
                bytes = (count > port->bulk_out_size) ? port->bulk_out_size : count;
-               if (from_user) {
-                       if (copy_from_user(urb->transfer_buffer, buf + sent, bytes))
-                               return -EFAULT;
-               } else {
-                       memcpy (urb->transfer_buffer, buf + sent, bytes);
-               }
+               memcpy (urb->transfer_buffer, buf + sent, bytes);
 
                usb_serial_debug_data(debug, &port->dev, __FUNCTION__, bytes, urb->transfer_buffer);
 
@@ -1119,11 +1114,11 @@ static int firm_send_command (struct usb_serial_port *port, __u8 command, __u8 *
        command_port->write_urb->transfer_buffer_length = datasize + 1;
        command_port->write_urb->dev = port->serial->dev;
        retval = usb_submit_urb (command_port->write_urb, GFP_KERNEL);
-       spin_unlock_irqrestore(&command_info->lock, flags);
        if (retval) {
                dbg("%s - submit urb failed", __FUNCTION__);
                goto exit;
        }
+       spin_unlock_irqrestore(&command_info->lock, flags);
 
        /* wait for the command to complete */
        wait_event_interruptible_timeout(command_info->wait_command, 
@@ -1343,7 +1338,7 @@ static void stop_command_port(struct usb_serial *serial)
        spin_lock_irqsave(&command_info->lock, flags);
        command_info->port_running--;
        if (!command_info->port_running)
-               usb_unlink_urb(command_port->read_urb);
+               usb_kill_urb(command_port->read_urb);
        spin_unlock_irqrestore(&command_info->lock, flags);
 }
 
@@ -1371,7 +1366,7 @@ static int start_port_read(struct usb_serial_port *port)
                        list_for_each_safe(tmp, tmp2, &info->rx_urbs_submitted) {
                                wrap = list_entry(tmp, struct whiteheat_urb_wrap, list);
                                urb = wrap->urb;
-                               usb_unlink_urb(urb);
+                               usb_kill_urb(urb);
                                list_del(tmp);
                                list_add(tmp, &info->rx_urbs_free);
                        }