vserver 2.0 rc7
[linux-2.6.git] / drivers / usb / serial / kl5kusb105.c
index 2e261c7..a11e829 100644 (file)
@@ -178,7 +178,7 @@ struct klsi_105_private {
  */
 
 
-#define KLSI_TIMEOUT    (HZ * 5 ) /* default urb timeout */
+#define KLSI_TIMEOUT    5000 /* default urb timeout */
 
 static int klsi_105_chg_port_settings(struct usb_serial_port *port,
                                      struct klsi_105_port_settings *settings)
@@ -236,7 +236,7 @@ static int klsi_105_get_line_state(struct usb_serial_port *port,
                             0, /* value */
                             0, /* index */
                             status_buf, KLSI_STATUSBUF_LEN,
-                            10*HZ
+                            10000
                             );
        if (rc < 0)
                err("Reading line status failed (error = %d)", rc);
@@ -341,8 +341,7 @@ static void klsi_105_shutdown (struct usb_serial *serial)
                                         * finished.  Otherwise this call
                                         * oopses. */
                                        /* usb_kill_urb(write_urbs[j]); */
-                                       if (write_urbs[j]->transfer_buffer)
-                                                   kfree(write_urbs[j]->transfer_buffer);
+                                       kfree(write_urbs[j]->transfer_buffer);
                                        usb_free_urb (write_urbs[j]);
                                }
                        }
@@ -925,45 +924,34 @@ static int klsi_105_ioctl (struct usb_serial_port *port, struct file * file,
                /* TODO */
                dbg("%s - TIOCMIWAIT not handled", __FUNCTION__);
                return -ENOIOCTLCMD;
-
        case TIOCGICOUNT:
                /* return count of modemline transitions */
                /* TODO */
                dbg("%s - TIOCGICOUNT not handled", __FUNCTION__);
                return -ENOIOCTLCMD;
-       case TCGETS: {
-            /* return current info to caller */
-            int retval;
-
-            dbg("%s - TCGETS data faked/incomplete", __FUNCTION__);
-
-            retval = verify_area(VERIFY_WRITE, user_arg,
-                                 sizeof(struct termios));
-            if (retval)
-                        return retval;
-
-            if (kernel_termios_to_user_termios((struct termios __user *)arg,
-                                               &priv->termios))
-                    return -EFAULT;
-            return(0);
-            }
-       case TCSETS: {
-               /* set port termios to the one given by the user */
-               int retval;
+       case TCGETS:
+               /* return current info to caller */
+               dbg("%s - TCGETS data faked/incomplete", __FUNCTION__);
+
+               if (!access_ok(VERIFY_WRITE, user_arg, sizeof(struct termios)))
+                       return -EFAULT;
 
+               if (kernel_termios_to_user_termios((struct termios __user *)arg,
+                                                  &priv->termios))
+                       return -EFAULT;
+               return 0;
+       case TCSETS:
+               /* set port termios to the one given by the user */
                dbg("%s - TCSETS not handled", __FUNCTION__);
 
-               retval = verify_area(VERIFY_READ, user_arg,
-                                    sizeof(struct termios));
-               if (retval)
-                           return retval;
+               if (!access_ok(VERIFY_READ, user_arg, sizeof(struct termios)))
+                       return -EFAULT;
 
                if (user_termios_to_kernel_termios(&priv->termios,
-                                                 (struct termios __user *)arg))
+                                                  (struct termios __user *)arg))
                        return -EFAULT;
                klsi_105_set_termios(port, &priv->termios);
-               return(0);
-            }
+               return 0;
        case TCSETSW: {
                /* set port termios and try to wait for completion of last
                 * write operation */