/* Shutdown all ports */
                        for (i = 0; i < EHEA_MAX_PORTS; i++) {
                                struct ehea_port *port = adapter->port[i];
 +                              struct net_device *dev;
  
 -                              if (port) {
 -                                      struct net_device *dev = port->netdev;
 +                              if (!port)
 +                                      continue;
  
 -                                      if (dev->flags & IFF_UP) {
 -                                              down(&port->port_lock);
 -                                              netif_stop_queue(dev);
 -                                              ehea_flush_sq(port);
 -                                              ret = ehea_stop_qps(dev);
 -                                              if (ret) {
 -                                                      up(&port->port_lock);
 -                                                      goto out;
 -                                              }
 -                                              port_napi_disable(port);
 -                                              up(&port->port_lock);
 +                              dev = port->netdev;
 +
 +                              if (dev->flags & IFF_UP) {
 +                                      mutex_lock(&port->port_lock);
 +                                      netif_stop_queue(dev);
++                                      ehea_flush_sq(port);
 +                                      ret = ehea_stop_qps(dev);
 +                                      if (ret) {
 +                                              mutex_unlock(&port->port_lock);
 +                                              goto out;
                                        }
 +                                      port_napi_disable(port);
 +                                      mutex_unlock(&port->port_lock);
                                }
                        }
  
 
        } while (--timeout);
  
        /* restore register states */
 -      SMC_SET_PTR(saved_pointer);
 -      SMC_SET_INT_MASK(mask);
 +      SMC_SET_PTR(lp, saved_pointer);
 +      SMC_SET_INT_MASK(lp, mask);
        spin_unlock(&lp->lock);
  
+ #ifndef CONFIG_NET_POLL_CONTROLLER
        if (timeout == MAX_IRQ_LOOPS)
                PRINTK("%s: spurious interrupt (mask = 0x%02x)\n",
                       dev->name, mask);
 
         * We need to append the descriptor in front of the
         * beacon frame.
         */
 -      if (skb_headroom(skb) < TXD_DESC_SIZE) {
 -              if (pskb_expand_head(skb, TXD_DESC_SIZE, 0, GFP_ATOMIC))
 +      if (skb_headroom(skb) < intf->beacon->queue->desc_size) {
 +              if (pskb_expand_head(skb, intf->beacon->queue->desc_size,
-                                    0, GFP_ATOMIC)) {
-                       dev_kfree_skb(skb);
++                                   0, GFP_ATOMIC))
                        return -ENOMEM;
-               }
        }
  
        /*
 
   * ipt_REJECT needs it.  Future netfilter modules might
   * require us to fill additional fields. */
  static struct net_device __fake_net_device = {
-       .hard_header_len        = ETH_HLEN
+       .hard_header_len        = ETH_HLEN,
++#ifdef CONFIG_NET_NS
+       .nd_net                 = &init_net,
++#endif
  };
  
  static struct rtable __fake_rtable = {
 
  
        ASSERT_RTNL();
  
-       if (dev == init_net.loopback_dev && how == 1)
+       if ((dev->flags & IFF_LOOPBACK) && how == 1)
                how = 0;
  
 -      rt6_ifdown(dev);
 +      rt6_ifdown(net, dev);
        neigh_ifdown(&nd_tbl, dev);
  
        idev = __in6_dev_get(dev);