Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / usb / net / kaweth.c
index fd6ff4c..def3bb8 100644 (file)
@@ -175,7 +175,6 @@ MODULE_DEVICE_TABLE (usb, usb_klsi_table);
  *     kaweth_driver
  ****************************************************************/
 static struct usb_driver kaweth_driver = {
-       .owner =        THIS_MODULE,
        .name =         driver_name,
        .probe =        kaweth_probe,
        .disconnect =   kaweth_disconnect,
@@ -219,7 +218,6 @@ struct kaweth_device
 
        __u32 status;
        int end;
-       int removed;
        int suspend_lowmem_rx;
        int suspend_lowmem_ctrl;
        int linkstate;
@@ -469,7 +467,7 @@ static int kaweth_reset(struct kaweth_device *kaweth)
                                0,
                                KAWETH_CONTROL_TIMEOUT);
 
-       udelay(10000);
+       mdelay(10);
 
        kaweth_dbg("kaweth_reset() returns %d.",result);
 
@@ -477,13 +475,13 @@ static int kaweth_reset(struct kaweth_device *kaweth)
 }
 
 static void kaweth_usb_receive(struct urb *, struct pt_regs *regs);
-static int kaweth_resubmit_rx_urb(struct kaweth_device *, int);
+static int kaweth_resubmit_rx_urb(struct kaweth_device *, gfp_t);
 
 /****************************************************************
        int_callback
 *****************************************************************/
 
-static void kaweth_resubmit_int_urb(struct kaweth_device *kaweth, int mf)
+static void kaweth_resubmit_int_urb(struct kaweth_device *kaweth, gfp_t mf)
 {
        int status;
 
@@ -550,7 +548,7 @@ static void kaweth_resubmit_tl(void *d)
  *     kaweth_resubmit_rx_urb
  ****************************************************************/
 static int kaweth_resubmit_rx_urb(struct kaweth_device *kaweth,
-                                               int mem_flags)
+                                               gfp_t mem_flags)
 {
        int result;
 
@@ -699,6 +697,7 @@ static int kaweth_close(struct net_device *net)
 
        usb_kill_urb(kaweth->irq_urb);
        usb_kill_urb(kaweth->rx_urb);
+       usb_kill_urb(kaweth->tx_urb);
 
        flush_scheduled_work();
 
@@ -750,13 +749,6 @@ static int kaweth_start_xmit(struct sk_buff *skb, struct net_device *net)
 
        spin_lock(&kaweth->device_lock);
 
-       if (kaweth->removed) {
-       /* our device is undergoing disconnection - we bail out */
-               spin_unlock(&kaweth->device_lock);
-               dev_kfree_skb_irq(skb);
-               return 0;
-       }
-
        kaweth_async_set_rx_mode(kaweth);
        netif_stop_queue(net);
 
@@ -787,7 +779,6 @@ static int kaweth_start_xmit(struct sk_buff *skb, struct net_device *net)
                      kaweth_usb_transmit_complete,
                      kaweth);
        kaweth->end = 0;
-       kaweth->tx_urb->transfer_flags |= URB_ASYNC_UNLINK;
 
        if((res = usb_submit_urb(kaweth->tx_urb, GFP_ATOMIC)))
        {
@@ -1137,10 +1128,6 @@ static void kaweth_disconnect(struct usb_interface *intf)
                return;
        }
        netdev = kaweth->net;
-       kaweth->removed = 1;
-       usb_kill_urb(kaweth->irq_urb);
-       usb_kill_urb(kaweth->rx_urb);
-       usb_kill_urb(kaweth->tx_urb);
 
        kaweth_dbg("Unregistering net device");
        unregister_netdev(netdev);