e1000e_update_adaptive(&adapter->hw);
  
 -      if (!netif_carrier_ok(netdev)) {
 -              tx_pending = (e1000_desc_unused(tx_ring) + 1 <
 -                             tx_ring->count);
 -              if (tx_pending) {
 -                      /*
 -                       * We've lost link, so the controller stops DMA,
 -                       * but we've got queued Tx work that's never going
 -                       * to get done, so reset controller to flush Tx.
 -                       * (Do the reset outside of interrupt context).
 -                       */
 -                      schedule_work(&adapter->reset_task);
 -                      /* return immediately since reset is imminent */
 -                      return;
 -              }
 +      if (!netif_carrier_ok(netdev) &&
 +          (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) {
 +              /*
 +               * We've lost link, so the controller stops DMA,
 +               * but we've got queued Tx work that's never going
 +               * to get done, so reset controller to flush Tx.
 +               * (Do the reset outside of interrupt context).
 +               */
-               adapter->tx_timeout_count++;
 +              schedule_work(&adapter->reset_task);
 +              /* return immediately since reset is imminent */
 +              return;
        }
  
        /* Simple mode for Interrupt Throttle Rate (ITR) */
 
        struct work_struct paprd_work;
        struct work_struct hw_check_work;
        struct completion paprd_complete;
-       bool paprd_pending;
  
 +      unsigned int hw_busy_count;
 +
        u32 intrstatus;
        u32 sc_flags; /* SC_OP_* */
        u16 ps_flags; /* PS_* */
 
        dev->num_rx_queues = rxqs;
        dev->real_num_rx_queues = rxqs;
        if (netif_alloc_rx_queues(dev))
-               goto free_pcpu;
+               goto free_all;
  #endif
  
-       dev->gso_max_size = GSO_MAX_SIZE;
- 
-       INIT_LIST_HEAD(&dev->ethtool_ntuple_list.list);
-       dev->ethtool_ntuple_list.count = 0;
-       INIT_LIST_HEAD(&dev->napi_list);
-       INIT_LIST_HEAD(&dev->unreg_list);
-       INIT_LIST_HEAD(&dev->link_watch_list);
-       dev->priv_flags = IFF_XMIT_DST_RELEASE;
-       setup(dev);
        strcpy(dev->name, name);
 +      dev->group = INIT_NETDEV_GROUP;
        return dev;
  
+ free_all:
+       free_netdev(dev);
+       return NULL;
+ 
  free_pcpu:
        free_percpu(dev->pcpu_refcnt);
        kfree(dev->_tx);