Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
authorDavid S. Miller <davem@davemloft.net>
Fri, 31 Oct 2008 07:17:34 +0000 (00:17 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 31 Oct 2008 07:17:34 +0000 (00:17 -0700)
Conflicts:

drivers/net/wireless/p54/p54common.c

24 files changed:
1  2 
MAINTAINERS
drivers/net/amd8111e.c
drivers/net/arm/at91_ether.c
drivers/net/bonding/bond_main.c
drivers/net/gianfar.c
drivers/net/ibm_newemac/core.c
drivers/net/myri10ge/myri10ge.c
drivers/net/pppoe.c
drivers/net/smc91x.c
drivers/net/tulip/dmfe.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/libertas/cmd.c
drivers/net/wireless/libertas/scan.c
drivers/net/wireless/p54/p54common.c
drivers/net/wireless/p54/p54pci.c
drivers/s390/net/qeth_l2_main.c
include/linux/kernel.h
include/net/sock.h
net/core/net_namespace.c
net/core/pktgen.c
net/ipv4/cipso_ipv4.c
net/netlabel/netlabel_addrlist.c
net/sunrpc/xprtsock.c
net/xfrm/xfrm_policy.c

diff --combined MAINTAINERS
@@@ -347,7 -347,7 +347,7 @@@ S: Maintaine
  ALI1563 I2C DRIVER
  P:    Rudolf Marek
  M:    r.marek@assembler.cz
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  ALPHA PORT
@@@ -610,6 -610,11 +610,11 @@@ P:       Philipp Zabe
  M:    philipp.zabel@gmail.com
  S:    Maintained
  
+ ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
+ P:    Michael Petchkovsky
+ M:    mkpetch@internode.on.net
+ S:    Maintained
  ARM/TOSA MACHINE SUPPORT
  P:    Dmitry Baryshkov
  M:    dbaryshkov@gmail.com
@@@ -738,6 -743,8 +743,8 @@@ P: Nick Kossifidi
  M:    mickflemm@gmail.com
  P:    Luis R. Rodriguez
  M:    mcgrof@gmail.com
+ P:    Bob Copeland
+ M:    me@bobcopeland.com
  L:    linux-wireless@vger.kernel.org
  L:    ath5k-devel@lists.ath5k.org
  S:    Maintained
@@@ -1599,6 -1606,11 +1606,6 @@@ L:     acpi4asus-user@lists.sourceforge.ne
  W:    http://sourceforge.net/projects/acpi4asus
  S:    Maintained
  
 -EEPRO100 NETWORK DRIVER
 -P:    Andrey V. Savochkin
 -M:    saw@saw.sw.com.sg
 -S:    Maintained
 -
  EFS FILESYSTEM
  W:    http://aeschi.ch.eu.org/efs/
  S:    Orphan
@@@ -1744,7 -1756,7 +1751,7 @@@ FREESCALE I2C CPM DRIVE
  P:    Jochen Friedrich
  M:    jochen@scram.de
  L:    linuxppc-dev@ozlabs.org
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  FREESCALE SOC FS_ENET DRIVER
@@@ -2017,7 -2029,7 +2024,7 @@@ S:      Maintaine
  I2C/SMBUS STUB DRIVER
  P:    Mark M. Hoffman
  M:    mhoffman@lightlink.com
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  I2C SUBSYSTEM
@@@ -2025,14 -2037,14 +2032,14 @@@ P:   Jean Delvare (PC drivers, core
  M:    khali@linux-fr.org
  P:    Ben Dooks (embedded platforms)
  M:    ben-linux@fluff.org
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  T:    quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/
  S:    Maintained
  
  I2C-TINY-USB DRIVER
  P:    Till Harbaum
  M:    till@harbaum.org
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  T:    http://www.harbaum.org/till/i2c_tiny_usb
  S:    Maintained
  
@@@ -2696,6 -2708,16 +2703,16 @@@ M:    matthew@wil.c
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  
+ LTP (Linux Test Project)
+ P:    Subrata Modak
+ M:    subrata@linux.vnet.ibm.com
+ P:    Mike Frysinger
+ M:    vapier@gentoo.org
+ L:    ltp-list@lists.sourceforge.net (subscribers-only)
+ W:    http://ltp.sourceforge.net/
+ T:    git kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
+ S:    Maintained
  M32R ARCHITECTURE
  P:    Hirokazu Takata
  M:    takata@linux-m32r.org
@@@ -3138,7 -3160,7 +3155,7 @@@ S:      Maintaine
  OPENCORES I2C BUS DRIVER
  P:    Peter Korsgaard
  M:    jacmet@sunsite.dk
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  OPROFILE
@@@ -3185,7 -3207,7 +3202,7 @@@ S:      Maintaine
  PA SEMI SMBUS DRIVER
  P:    Olof Johansson
  M:    olof@lixom.net
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  PANASONIC LAPTOP ACPI EXTRAS DRIVER
@@@ -3330,7 -3352,7 +3347,7 @@@ S:      Maintaine
  PNXxxxx I2C DRIVER
  P:    Vitaly Wool
  M:    vitalywool@gmail.com
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  PPP PROTOCOL DRIVERS AND COMPRESSORS
@@@ -3794,7 -3816,7 +3811,7 @@@ S:      Maintaine
  SIS 96X I2C/SMBUS DRIVER
  P:    Mark M. Hoffman
  M:    mhoffman@lightlink.com
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  SIS FRAMEBUFFER DRIVER
@@@ -4541,7 -4563,7 +4558,7 @@@ S:      Maintaine
  VIAPRO SMBUS DRIVER
  P:    Jean Delvare
  M:    khali@linux-fr.org
- L:    i2c@lm-sensors.org
+ L:    linux-i2c@vger.kernel.org
  S:    Maintained
  
  VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
diff --combined drivers/net/amd8111e.c
@@@ -644,10 -644,6 +644,6 @@@ This function frees the  transmiter an
  */
  static void amd8111e_free_ring(struct amd8111e_priv* lp)
  {
-       /* Free transmit and receive skbs */
-       amd8111e_free_skbs(lp->amd8111e_net_dev);
        /* Free transmit and receive descriptor rings */
        if(lp->rx_ring){
                pci_free_consistent(lp->pci_dev,
@@@ -833,12 -829,14 +829,14 @@@ static int amd8111e_rx_poll(struct napi
  
        } while(intr0 & RINT0);
  
-       /* Receive descriptor is empty now */
-       spin_lock_irqsave(&lp->lock, flags);
-       __netif_rx_complete(dev, napi);
-       writel(VAL0|RINTEN0, mmio + INTEN0);
-       writel(VAL2 | RDMD0, mmio + CMD0);
-       spin_unlock_irqrestore(&lp->lock, flags);
+       if (rx_pkt_limit > 0) {
+               /* Receive descriptor is empty now */
+               spin_lock_irqsave(&lp->lock, flags);
+               __netif_rx_complete(dev, napi);
+               writel(VAL0|RINTEN0, mmio + INTEN0);
+               writel(VAL2 | RDMD0, mmio + CMD0);
+               spin_unlock_irqrestore(&lp->lock, flags);
+       }
  
  rx_not_empty:
        return num_rx_pkt;
@@@ -1231,7 -1229,9 +1229,9 @@@ static int amd8111e_close(struct net_de
  
        amd8111e_disable_interrupt(lp);
        amd8111e_stop_chip(lp);
-       amd8111e_free_ring(lp);
+       /* Free transmit and receive skbs */
+       amd8111e_free_skbs(lp->amd8111e_net_dev);
  
        netif_carrier_off(lp->amd8111e_net_dev);
  
  
        spin_unlock_irq(&lp->lock);
        free_irq(dev->irq, dev);
+       amd8111e_free_ring(lp);
  
        /* Update the statistics before closing */
        amd8111e_get_stats(dev);
@@@ -1820,6 -1821,7 +1821,6 @@@ static int __devinit amd8111e_probe_one
        unsigned long reg_addr,reg_len;
        struct amd8111e_priv* lp;
        struct net_device* dev;
 -      DECLARE_MAC_BUF(mac);
  
        err = pci_enable_device(pdev);
        if(err){
        chip_version = (readl(lp->mmio + CHIPID) & 0xf0000000)>>28;
        printk(KERN_INFO "%s: AMD-8111e Driver Version: %s\n",
               dev->name,MODULE_VERS);
 -      printk(KERN_INFO "%s: [ Rev %x ] PCI 10/100BaseT Ethernet %s\n",
 -             dev->name, chip_version, print_mac(mac, dev->dev_addr));
 +      printk(KERN_INFO "%s: [ Rev %x ] PCI 10/100BaseT Ethernet %pM\n",
 +             dev->name, chip_version, dev->dev_addr);
        if (lp->ext_phy_id)
                printk(KERN_INFO "%s: Found MII PHY ID 0x%08x at address 0x%02x\n",
                       dev->name, lp->ext_phy_id, lp->ext_phy_addr);
@@@ -485,6 -485,7 +485,6 @@@ static void update_mac_address(struct n
  static int set_mac_address(struct net_device *dev, void* addr)
  {
        struct sockaddr *address = addr;
 -      DECLARE_MAC_BUF(mac);
  
        if (!is_valid_ether_addr(address->sa_data))
                return -EADDRNOTAVAIL;
        memcpy(dev->dev_addr, address->sa_data, dev->addr_len);
        update_mac_address(dev);
  
 -      printk("%s: Setting MAC address to %s\n", dev->name,
 -             print_mac(mac, dev->dev_addr));
 +      printk("%s: Setting MAC address to %pM\n", dev->name,
 +             dev->dev_addr);
  
        return 0;
  }
@@@ -977,6 -978,7 +977,6 @@@ static int __init at91ether_setup(unsig
        struct at91_private *lp;
        unsigned int val;
        int res;
 -      DECLARE_MAC_BUF(mac);
  
        dev = alloc_etherdev(sizeof(struct at91_private));
        if (!dev)
                init_timer(&lp->check_timer);
                lp->check_timer.data = (unsigned long)dev;
                lp->check_timer.function = at91ether_check_link;
-       }
+       } else if (lp->board_data.phy_irq_pin >= 32)
+               gpio_request(lp->board_data.phy_irq_pin, "ethernet_phy");
  
        /* Display ethernet banner */
 -      printk(KERN_INFO "%s: AT91 ethernet at 0x%08x int=%d %s%s (%s)\n",
 +      printk(KERN_INFO "%s: AT91 ethernet at 0x%08x int=%d %s%s (%pM)\n",
               dev->name, (uint) dev->base_addr, dev->irq,
               at91_emac_read(AT91_EMAC_CFG) & AT91_EMAC_SPD ? "100-" : "10-",
               at91_emac_read(AT91_EMAC_CFG) & AT91_EMAC_FD ? "FullDuplex" : "HalfDuplex",
 -             print_mac(mac, dev->dev_addr));
 +             dev->dev_addr);
        if ((phy_type == MII_DM9161_ID) || (lp->phy_type == MII_DM9161A_ID))
                printk(KERN_INFO "%s: Davicom 9161 PHY %s\n", dev->name, (lp->phy_media == PORT_FIBRE) ? "(Fiber)" : "(Copper)");
        else if (phy_type == MII_LXT971A_ID)
@@@ -1165,6 -1168,9 +1166,9 @@@ static int __devexit at91ether_remove(s
        struct net_device *dev = platform_get_drvdata(pdev);
        struct at91_private *lp = netdev_priv(dev);
  
+       if (lp->board_data.phy_irq_pin >= 32)
+               gpio_free(lp->board_data.phy_irq_pin);
        unregister_netdev(dev);
        free_irq(dev->irq, dev);
        dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
@@@ -1791,6 -1791,7 +1791,6 @@@ int bond_release(struct net_device *bon
        struct slave *slave, *oldcurrent;
        struct sockaddr addr;
        int mac_addr_differ;
 -      DECLARE_MAC_BUF(mac);
  
        /* slave is not a slave or master is not master of this slave */
        if (!(slave_dev->flags & IFF_SLAVE) ||
                if (!mac_addr_differ && (bond->slave_cnt > 1))
                        printk(KERN_WARNING DRV_NAME
                               ": %s: Warning: the permanent HWaddr of %s - "
 -                             "%s - is still in use by %s. "
 +                             "%pM - is still in use by %s. "
                               "Set the HWaddr of %s to a different address "
                               "to avoid conflicts.\n",
                               bond_dev->name, slave_dev->name,
 -                             print_mac(mac, slave->perm_hwaddr),
 +                             slave->perm_hwaddr,
                               bond_dev->name, slave_dev->name);
        }
  
@@@ -1978,6 -1979,20 +1978,20 @@@ void bond_destroy(struct bonding *bond
        unregister_netdevice(bond->dev);
  }
  
+ static void bond_destructor(struct net_device *bond_dev)
+ {
+       struct bonding *bond = bond_dev->priv;
+       if (bond->wq)
+               destroy_workqueue(bond->wq);
+       netif_addr_lock_bh(bond_dev);
+       bond_mc_list_destroy(bond);
+       netif_addr_unlock_bh(bond_dev);
+       free_netdev(bond_dev);
+ }
  /*
  * First release a slave and than destroy the bond if no more slaves iare left.
  * Must be under rtnl_lock when this function is called.
@@@ -2375,6 -2390,9 +2389,9 @@@ static void bond_miimon_commit(struct b
                        continue;
  
                case BOND_LINK_DOWN:
+                       if (slave->link_failure_count < UINT_MAX)
+                               slave->link_failure_count++;
                        slave->link = BOND_LINK_DOWN;
  
                        if (bond->params.mode == BOND_MODE_ACTIVEBACKUP ||
@@@ -3221,6 -3239,7 +3238,6 @@@ static void bond_info_show_master(struc
        struct bonding *bond = seq->private;
        struct slave *curr;
        int i;
 -      u32 target;
  
        read_lock(&bond->curr_slave_lock);
        curr = bond->curr_active_slave;
                                continue;
                        if (printed)
                                seq_printf(seq, ",");
 -                      target = ntohl(bond->params.arp_targets[i]);
 -                      seq_printf(seq, " %d.%d.%d.%d", HIPQUAD(target));
 +                      seq_printf(seq, " %pI4", &bond->params.arp_targets[i]);
                        printed = 1;
                }
                seq_printf(seq, "\n");
  
        if (bond->params.mode == BOND_MODE_8023AD) {
                struct ad_info ad_info;
 -              DECLARE_MAC_BUF(mac);
  
                seq_puts(seq, "\n802.3ad info\n");
                seq_printf(seq, "LACP rate: %s\n",
                                   ad_info.actor_key);
                        seq_printf(seq, "\tPartner Key: %d\n",
                                   ad_info.partner_key);
 -                      seq_printf(seq, "\tPartner Mac Address: %s\n",
 -                                 print_mac(mac, ad_info.partner_system));
 +                      seq_printf(seq, "\tPartner Mac Address: %pM\n",
 +                                 ad_info.partner_system);
                }
        }
  }
  static void bond_info_show_slave(struct seq_file *seq, const struct slave *slave)
  {
        struct bonding *bond = seq->private;
 -      DECLARE_MAC_BUF(mac);
  
        seq_printf(seq, "\nSlave Interface: %s\n", slave->dev->name);
        seq_printf(seq, "MII Status: %s\n",
        seq_printf(seq, "Link Failure Count: %u\n",
                   slave->link_failure_count);
  
 -      seq_printf(seq,
 -                 "Permanent HW addr: %s\n",
 -                 print_mac(mac, slave->perm_hwaddr));
 +      seq_printf(seq, "Permanent HW addr: %pM\n", slave->perm_hwaddr);
  
        if (bond->params.mode == BOND_MODE_8023AD) {
                const struct aggregator *agg
@@@ -4543,7 -4567,7 +4560,7 @@@ static int bond_init(struct net_device 
  
        bond_set_mode_ops(bond, bond->params.mode);
  
-       bond_dev->destructor = free_netdev;
+       bond_dev->destructor = bond_destructor;
  
        /* Initialize the device options */
        bond_dev->tx_queue_len = 0;
        return 0;
  }
  
- /* De-initialize device specific data.
-  * Caller must hold rtnl_lock.
-  */
- static void bond_deinit(struct net_device *bond_dev)
- {
-       struct bonding *bond = bond_dev->priv;
-       list_del(&bond->bond_list);
- #ifdef CONFIG_PROC_FS
-       bond_remove_proc_entry(bond);
- #endif
- }
  static void bond_work_cancel_all(struct bonding *bond)
  {
        write_lock_bh(&bond->lock);
                cancel_delayed_work(&bond->ad_work);
  }
  
+ /* De-initialize device specific data.
+  * Caller must hold rtnl_lock.
+  */
+ static void bond_deinit(struct net_device *bond_dev)
+ {
+       struct bonding *bond = bond_dev->priv;
+       list_del(&bond->bond_list);
+       bond_work_cancel_all(bond);
+ #ifdef CONFIG_PROC_FS
+       bond_remove_proc_entry(bond);
+ #endif
+ }
  /* Unregister and free all bond devices.
   * Caller must hold rtnl_lock.
   */
@@@ -4628,9 -4654,6 +4647,6 @@@ static void bond_free_all(void
                struct net_device *bond_dev = bond->dev;
  
                bond_work_cancel_all(bond);
-               netif_addr_lock_bh(bond_dev);
-               bond_mc_list_destroy(bond);
-               netif_addr_unlock_bh(bond_dev);
                /* Release the bonded slaves */
                bond_release_all(bond_dev);
                bond_destroy(bond);
diff --combined drivers/net/gianfar.c
@@@ -162,6 -162,7 +162,6 @@@ static int gfar_probe(struct platform_d
        struct gianfar_platform_data *einfo;
        struct resource *r;
        int err = 0, irq;
 -      DECLARE_MAC_BUF(mac);
  
        einfo = (struct gianfar_platform_data *) pdev->dev.platform_data;
  
        gfar_init_sysfs(dev);
  
        /* Print out the device info */
 -      printk(KERN_INFO DEVICE_NAME "%s\n",
 -             dev->name, print_mac(mac, dev->dev_addr));
 +      printk(KERN_INFO DEVICE_NAME "%pM\n", dev->name, dev->dev_addr);
  
        /* Even more device info helps when determining which kernel */
        /* provided which set of benchmarks. */
@@@ -584,6 -586,18 +584,18 @@@ static void gfar_configure_serdes(struc
        struct gfar_mii __iomem *regs =
                        (void __iomem *)&priv->regs->gfar_mii_regs;
        int tbipa = gfar_read(&priv->regs->tbipa);
+       struct mii_bus *bus = gfar_get_miibus(priv);
+       if (bus)
+               mutex_lock(&bus->mdio_lock);
+       /* If the link is already up, we must already be ok, and don't need to
+        * configure and reset the TBI<->SerDes link.  Maybe U-Boot configured
+        * everything for us?  Resetting it takes the link down and requires
+        * several seconds for it to come back.
+        */
+       if (gfar_local_mdio_read(regs, tbipa, MII_BMSR) & BMSR_LSTATUS)
+               goto done;
  
        /* Single clk mode, mii mode off(for serdes communication) */
        gfar_local_mdio_write(regs, tbipa, MII_TBICON, TBICON_CLK_SELECT);
  
        gfar_local_mdio_write(regs, tbipa, MII_BMCR, BMCR_ANENABLE |
                        BMCR_ANRESTART | BMCR_FULLDPLX | BMCR_SPEED1000);
+       done:
+       if (bus)
+               mutex_unlock(&bus->mdio_lock);
  }
  
  static void init_registers(struct net_device *dev)
@@@ -396,7 -396,9 +396,7 @@@ static void emac_hash_mc(struct emac_in
  
        for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) {
                int slot, reg, mask;
 -              DBG2(dev, "mc %02x:%02x:%02x:%02x:%02x:%02x" NL,
 -                   dmi->dmi_addr[0], dmi->dmi_addr[1], dmi->dmi_addr[2],
 -                   dmi->dmi_addr[3], dmi->dmi_addr[4], dmi->dmi_addr[5]);
 +              DBG2(dev, "mc %pM" NL, dmi->dmi_addr);
  
                slot = EMAC_XAHT_CRC_TO_SLOT(dev, ether_crc(ETH_ALEN, dmi->dmi_addr));
                reg = EMAC_XAHT_SLOT_TO_REG(dev, slot);
@@@ -2603,7 -2605,7 +2603,7 @@@ static int __devinit emac_init_config(s
                    of_device_is_compatible(np, "ibm,emac-440gr"))
                        dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
                if (of_device_is_compatible(np, "ibm,emac-405ez")) {
- #ifdef CONFIG_IBM_NEW_EMAC_NO_FLOW_CONTROL
+ #ifdef CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL
                        dev->features |= EMAC_FTR_NO_FLOW_CONTROL_40x;
  #else
                        printk(KERN_ERR "%s: Flow control not disabled!\n",
@@@ -2863,8 -2865,11 +2863,8 @@@ static int __devinit emac_probe(struct 
        wake_up_all(&emac_probe_wait);
  
  
 -      printk(KERN_INFO
 -             "%s: EMAC-%d %s, MAC %02x:%02x:%02x:%02x:%02x:%02x\n",
 -             ndev->name, dev->cell_index, np->full_name,
 -             ndev->dev_addr[0], ndev->dev_addr[1], ndev->dev_addr[2],
 -             ndev->dev_addr[3], ndev->dev_addr[4], ndev->dev_addr[5]);
 +      printk(KERN_INFO "%s: EMAC-%d %s, MAC %pM\n",
 +             ndev->name, dev->cell_index, np->full_name, ndev->dev_addr);
  
        if (dev->phy_mode == PHY_MODE_SGMII)
                printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
@@@ -75,7 -75,7 +75,7 @@@
  #include "myri10ge_mcp.h"
  #include "myri10ge_mcp_gen_header.h"
  
- #define MYRI10GE_VERSION_STR "1.4.3-1.371"
+ #define MYRI10GE_VERSION_STR "1.4.3-1.375"
  
  MODULE_DESCRIPTION("Myricom 10G driver (10GbE)");
  MODULE_AUTHOR("Maintainer: help@myri.com");
@@@ -1393,6 -1393,7 +1393,7 @@@ myri10ge_tx_done(struct myri10ge_slice_
                if (tx->req == tx->done) {
                        tx->queue_active = 0;
                        put_be32(htonl(1), tx->send_stop);
+                       mmiowb();
                }
                __netif_tx_unlock(dev_queue);
        }
@@@ -2864,6 -2865,7 +2865,7 @@@ again
        if ((mgp->dev->real_num_tx_queues > 1) && tx->queue_active == 0) {
                tx->queue_active = 1;
                put_be32(htonl(1), tx->send_go);
+               mmiowb();
        }
        tx->pkt_start++;
        if ((avail - count) < MXGEFW_MAX_SEND_DESC) {
@@@ -2981,6 -2983,7 +2983,6 @@@ static void myri10ge_set_multicast_list
        struct dev_mc_list *mc_list;
        __be32 data[2] = { 0, 0 };
        int err;
 -      DECLARE_MAC_BUF(mac);
  
        /* can be called from atomic contexts,
         * pass 1 to force atomicity in myri10ge_send_cmd() */
                        printk(KERN_ERR "myri10ge: %s: Failed "
                               "MXGEFW_JOIN_MULTICAST_GROUP, error status:"
                               "%d\t", dev->name, err);
 -                      printk(KERN_ERR "MAC %s\n",
 -                             print_mac(mac, mc_list->dmi_addr));
 +                      printk(KERN_ERR "MAC %pM\n", mc_list->dmi_addr);
                        goto abort;
                }
        }
diff --combined drivers/net/pppoe.c
@@@ -399,11 -399,11 +399,11 @@@ static int pppoe_rcv(struct sk_buff *sk
        if (skb->len < len)
                goto drop;
  
-       po = get_item(ph->sid, eth_hdr(skb)->h_source, dev->ifindex);
-       if (!po)
+       if (pskb_trim_rcsum(skb, len))
                goto drop;
  
-       if (pskb_trim_rcsum(skb, len))
+       po = get_item(ph->sid, eth_hdr(skb)->h_source, dev->ifindex);
+       if (!po)
                goto drop;
  
        return sk_receive_skb(sk_pppox(po), skb, 0);
@@@ -958,6 -958,7 +958,6 @@@ static int pppoe_seq_show(struct seq_fi
  {
        struct pppox_sock *po;
        char *dev_name;
 -      DECLARE_MAC_BUF(mac);
  
        if (v == SEQ_START_TOKEN) {
                seq_puts(seq, "Id       Address              Device\n");
        po = v;
        dev_name = po->pppoe_pa.dev;
  
 -      seq_printf(seq, "%08X %s %8s\n",
 -                 po->pppoe_pa.sid, print_mac(mac, po->pppoe_pa.remote), dev_name);
 +      seq_printf(seq, "%08X %pM %8s\n",
 +                 po->pppoe_pa.sid, po->pppoe_pa.remote, dev_name);
  out:
        return 0;
  }
diff --combined drivers/net/smc91x.c
@@@ -1778,6 -1778,7 +1778,6 @@@ static int __init smc_probe(struct net_
        int retval;
        unsigned int val, revision_register;
        const char *version_string;
 -      DECLARE_MAC_BUF(mac);
  
        DBG(2, "%s: %s\n", CARDNAME, __func__);
  
                               "set using ifconfig\n", dev->name);
                } else {
                        /* Print the Ethernet address */
 -                      printk("%s: Ethernet addr: %s\n",
 -                             dev->name, print_mac(mac, dev->dev_addr));
 +                      printk("%s: Ethernet addr: %pM\n",
 +                             dev->name, dev->dev_addr);
                }
  
                if (lp->phy_type == 0) {
@@@ -2059,7 -2060,6 +2059,6 @@@ static int smc_request_attrib(struct pl
                              struct net_device *ndev)
  {
        struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib");
-       struct smc_local *lp = netdev_priv(ndev);
  
        if (!res)
                return 0;
@@@ -2074,7 -2074,6 +2073,6 @@@ static void smc_release_attrib(struct p
                               struct net_device *ndev)
  {
        struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib");
-       struct smc_local *lp = netdev_priv(ndev);
  
        if (res)
                release_mem_region(res->start, ATTRIB_SIZE);
diff --combined drivers/net/tulip/dmfe.c
@@@ -362,6 -362,7 +362,6 @@@ static int __devinit dmfe_init_one (str
        struct net_device *dev;
        u32 pci_pmr;
        int i, err;
 -      DECLARE_MAC_BUF(mac);
  
        DMFE_DBUG(0, "dmfe_init_one()", 0);
  
        /* Allocate Tx/Rx descriptor memory */
        db->desc_pool_ptr = pci_alloc_consistent(pdev, sizeof(struct tx_desc) *
                        DESC_ALL_CNT + 0x20, &db->desc_pool_dma_ptr);
+       if (!db->desc_pool_ptr)
+               goto err_out_res;
  
        db->buf_pool_ptr = pci_alloc_consistent(pdev, TX_BUF_ALLOC *
                        TX_DESC_CNT + 4, &db->buf_pool_dma_ptr);
+       if (!db->buf_pool_ptr)
+               goto err_out_free_desc;
  
        db->first_tx_desc = (struct tx_desc *) db->desc_pool_ptr;
        db->first_tx_desc_dma = db->desc_pool_dma_ptr;
  
        err = register_netdev (dev);
        if (err)
-               goto err_out_res;
+               goto err_out_free_buf;
  
 -      printk(KERN_INFO "%s: Davicom DM%04lx at pci%s, "
 -             "%s, irq %d.\n",
 +      printk(KERN_INFO "%s: Davicom DM%04lx at pci%s, %pM, irq %d.\n",
               dev->name,
               ent->driver_data >> 16,
               pci_name(pdev),
 -             print_mac(mac, dev->dev_addr),
 +             dev->dev_addr,
               dev->irq);
  
        pci_set_master(pdev);
  
        return 0;
  
+ err_out_free_buf:
+       pci_free_consistent(pdev, TX_BUF_ALLOC * TX_DESC_CNT + 4,
+                           db->buf_pool_ptr, db->buf_pool_dma_ptr);
+ err_out_free_desc:
+       pci_free_consistent(pdev, sizeof(struct tx_desc) * DESC_ALL_CNT + 0x20,
+                           db->desc_pool_ptr, db->desc_pool_dma_ptr);
  err_out_res:
        pci_release_regions(pdev);
  err_out_disable:
@@@ -239,6 -239,7 +239,6 @@@ static int iwl4965_commit_rxon(struct i
  {
        /* cast away the const for active_rxon in this function */
        struct iwl_rxon_cmd *active_rxon = (void *)&priv->active_rxon;
 -      DECLARE_MAC_BUF(mac);
        int ret;
        bool new_assoc =
                !!(priv->staging_rxon.filter_flags & RXON_FILTER_ASSOC_MSK);
        IWL_DEBUG_INFO("Sending RXON\n"
                       "* with%s RXON_FILTER_ASSOC_MSK\n"
                       "* channel = %d\n"
 -                     "* bssid = %s\n",
 +                     "* bssid = %pM\n",
                       (new_assoc ? "" : "out"),
                       le16_to_cpu(priv->staging_rxon.channel),
 -                     print_mac(mac, priv->staging_rxon.bssid_addr));
 +                     priv->staging_rxon.bssid_addr);
  
        iwl4965_set_rxon_hwcrypto(priv, !priv->hw_params.sw_crypto);
  
@@@ -1463,6 -1464,7 +1463,6 @@@ void iwl_rx_handle(struct iwl_priv *pri
  static void iwl4965_print_rx_config_cmd(struct iwl_priv *priv)
  {
        struct iwl_rxon_cmd *rxon = &priv->staging_rxon;
 -      DECLARE_MAC_BUF(mac);
  
        IWL_DEBUG_RADIO("RX CONFIG:\n");
        iwl_print_hex_dump(priv, IWL_DL_RADIO, (u8 *) rxon, sizeof(*rxon));
        IWL_DEBUG_RADIO("u8 ofdm_basic_rates: 0x%02x\n",
                        rxon->ofdm_basic_rates);
        IWL_DEBUG_RADIO("u8 cck_basic_rates: 0x%02x\n", rxon->cck_basic_rates);
 -      IWL_DEBUG_RADIO("u8[6] node_addr: %s\n",
 -                      print_mac(mac, rxon->node_addr));
 -      IWL_DEBUG_RADIO("u8[6] bssid_addr: %s\n",
 -                      print_mac(mac, rxon->bssid_addr));
 +      IWL_DEBUG_RADIO("u8[6] node_addr: %pM\n", rxon->node_addr);
 +      IWL_DEBUG_RADIO("u8[6] bssid_addr: %pM\n", rxon->bssid_addr);
        IWL_DEBUG_RADIO("u16 assoc_id: 0x%x\n", le16_to_cpu(rxon->assoc_id));
  }
  #endif
@@@ -2086,7 -2090,6 +2086,6 @@@ static void iwl_alive_start(struct iwl_
                iwl4965_error_recovery(priv);
  
        iwl_power_update_mode(priv, 1);
-       ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
  
        if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status))
                iwl4965_set_mode(priv, priv->iw_mode);
@@@ -2338,6 -2341,7 +2337,7 @@@ static void iwl_bg_alive_start(struct w
        mutex_lock(&priv->mutex);
        iwl_alive_start(priv);
        mutex_unlock(&priv->mutex);
+       ieee80211_notify_mac(priv->hw, IEEE80211_NOTIFY_RE_ASSOC);
  }
  
  static void iwl4965_bg_rf_kill(struct work_struct *work)
@@@ -2462,6 -2466,7 +2462,6 @@@ static void iwl4965_post_associate(stru
  {
        struct ieee80211_conf *conf = NULL;
        int ret = 0;
 -      DECLARE_MAC_BUF(mac);
        unsigned long flags;
  
        if (priv->iw_mode == NL80211_IFTYPE_AP) {
                return;
        }
  
 -      IWL_DEBUG_ASSOC("Associated as %d to: %s\n",
 -                      priv->assoc_id,
 -                      print_mac(mac, priv->active_rxon.bssid_addr));
 +      IWL_DEBUG_ASSOC("Associated as %d to: %pM\n",
 +                      priv->assoc_id, priv->active_rxon.bssid_addr);
  
  
        if (test_bit(STATUS_EXIT_PENDING, &priv->status))
@@@ -2716,6 -2722,7 +2716,6 @@@ static int iwl4965_mac_add_interface(st
  {
        struct iwl_priv *priv = hw->priv;
        unsigned long flags;
 -      DECLARE_MAC_BUF(mac);
  
        IWL_DEBUG_MAC80211("enter: type %d\n", conf->type);
  
        mutex_lock(&priv->mutex);
  
        if (conf->mac_addr) {
 -              IWL_DEBUG_MAC80211("Set %s\n", print_mac(mac, conf->mac_addr));
 +              IWL_DEBUG_MAC80211("Set %pM\n", conf->mac_addr);
                memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
        }
  
@@@ -2941,6 -2948,7 +2941,6 @@@ static int iwl4965_mac_config_interface
                                    struct ieee80211_if_conf *conf)
  {
        struct iwl_priv *priv = hw->priv;
 -      DECLARE_MAC_BUF(mac);
        unsigned long flags;
        int rc;
  
        mutex_lock(&priv->mutex);
  
        if (conf->bssid)
 -              IWL_DEBUG_MAC80211("bssid: %s\n",
 -                                 print_mac(mac, conf->bssid));
 +              IWL_DEBUG_MAC80211("bssid: %pM\n", conf->bssid);
  
  /*
   * very dubious code was here; the probe filtering flag is never set:
                if (!conf->bssid) {
                        conf->bssid = priv->mac_addr;
                        memcpy(priv->bssid, priv->mac_addr, ETH_ALEN);
 -                      IWL_DEBUG_MAC80211("bssid was set to: %s\n",
 -                                         print_mac(mac, conf->bssid));
 +                      IWL_DEBUG_MAC80211("bssid was set to: %pM\n",
 +                                         conf->bssid);
                }
                if (priv->ibss_beacon)
                        dev_kfree_skb(priv->ibss_beacon);
@@@ -3232,13 -3241,14 +3232,13 @@@ static void iwl4965_mac_update_tkip_key
        unsigned long flags;
        __le16 key_flags = 0;
        int i;
 -      DECLARE_MAC_BUF(mac);
  
        IWL_DEBUG_MAC80211("enter\n");
  
        sta_id = iwl_find_station(priv, addr);
        if (sta_id == IWL_INVALID_STATION) {
 -              IWL_DEBUG_MAC80211("leave - %s not in station map.\n",
 -                                 print_mac(mac, addr));
 +              IWL_DEBUG_MAC80211("leave - %pM not in station map.\n",
 +                                 addr);
                return;
        }
  
@@@ -3275,6 -3285,7 +3275,6 @@@ static int iwl4965_mac_set_key(struct i
                           struct ieee80211_key_conf *key)
  {
        struct iwl_priv *priv = hw->priv;
 -      DECLARE_MAC_BUF(mac);
        int ret = 0;
        u8 sta_id = IWL_INVALID_STATION;
        u8 is_default_wep_key = 0;
  
        sta_id = iwl_find_station(priv, addr);
        if (sta_id == IWL_INVALID_STATION) {
 -              IWL_DEBUG_MAC80211("leave - %s not in station map.\n",
 -                                 print_mac(mac, addr));
 +              IWL_DEBUG_MAC80211("leave - %pM not in station map.\n",
 +                                 addr);
                return -EINVAL;
  
        }
@@@ -3394,9 -3405,10 +3394,9 @@@ static int iwl4965_mac_ampdu_action(str
                             struct ieee80211_sta *sta, u16 tid, u16 *ssn)
  {
        struct iwl_priv *priv = hw->priv;
 -      DECLARE_MAC_BUF(mac);
  
 -      IWL_DEBUG_HT("A-MPDU action on addr %s tid %d\n",
 -                   print_mac(mac, sta->addr), tid);
 +      IWL_DEBUG_HT("A-MPDU action on addr %pM tid %d\n",
 +                   sta->addr, tid);
  
        if (!(priv->cfg->sku & IWL_SKU_N))
                return -EACCES;
@@@ -4159,6 -4171,7 +4159,6 @@@ static int iwl4965_pci_probe(struct pci
        struct ieee80211_hw *hw;
        struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
        unsigned long flags;
 -      DECLARE_MAC_BUF(mac);
  
        /************************
         * 1. Allocating HW data
  
        /* extract MAC Address */
        iwl_eeprom_get_mac(priv, priv->mac_addr);
 -      IWL_DEBUG_INFO("MAC address: %s\n", print_mac(mac, priv->mac_addr));
 +      IWL_DEBUG_INFO("MAC address: %pM\n", priv->mac_addr);
        SET_IEEE80211_PERM_ADDR(priv->hw, priv->mac_addr);
  
        /************************
@@@ -87,6 -87,7 +87,6 @@@ int lbs_update_hw_spec(struct lbs_priva
        struct cmd_ds_get_hw_spec cmd;
        int ret = -1;
        u32 i;
 -      DECLARE_MAC_BUF(mac);
  
        lbs_deb_enter(LBS_DEB_CMD);
  
         * CF card    firmware 5.0.16p0:   cap 0x00000303
         * USB dongle firmware 5.110.17p2: cap 0x00000303
         */
 -      lbs_pr_info("%s, fw %u.%u.%up%u, cap 0x%08x\n",
 -              print_mac(mac, cmd.permanentaddr),
 +      lbs_pr_info("%pM, fw %u.%u.%up%u, cap 0x%08x\n",
 +              cmd.permanentaddr,
                priv->fwrelease >> 24 & 0xff,
                priv->fwrelease >> 16 & 0xff,
                priv->fwrelease >>  8 & 0xff,
@@@ -604,9 -605,9 +604,9 @@@ int lbs_get_tx_power(struct lbs_privat
        if (ret == 0) {
                *curlevel = le16_to_cpu(cmd.curlevel);
                if (minlevel)
-                       *minlevel = le16_to_cpu(cmd.minlevel);
+                       *minlevel = cmd.minlevel;
                if (maxlevel)
-                       *maxlevel = le16_to_cpu(cmd.maxlevel);
+                       *maxlevel = cmd.maxlevel;
        }
  
        lbs_deb_leave(LBS_DEB_CMD);
@@@ -359,6 -359,7 +359,6 @@@ int lbs_scan_networks(struct lbs_privat
  #ifdef CONFIG_LIBERTAS_DEBUG
        struct bss_descriptor *iter;
        int i = 0;
 -      DECLARE_MAC_BUF(mac);
  #endif
  
        lbs_deb_enter_args(LBS_DEB_SCAN, "full_scan %d", full_scan);
        mutex_lock(&priv->lock);
        lbs_deb_scan("scan table:\n");
        list_for_each_entry(iter, &priv->network_list, list)
 -              lbs_deb_scan("%02d: BSSID %s, RSSI %d, SSID '%s'\n",
 -                           i++, print_mac(mac, iter->bssid), iter->rssi,
 +              lbs_deb_scan("%02d: BSSID %pM, RSSI %d, SSID '%s'\n",
 +                           i++, iter->bssid, iter->rssi,
                             escape_essid(iter->ssid, iter->ssid_len));
        mutex_unlock(&priv->lock);
  #endif
@@@ -511,6 -512,7 +511,6 @@@ static int lbs_process_bss(struct bss_d
        struct ieeetypes_dsparamset *pDS;
        struct ieeetypes_cfparamset *pCF;
        struct ieeetypes_ibssparamset *pibss;
 -      DECLARE_MAC_BUF(mac);
        struct ieeetypes_countryinfoset *pcountryinfo;
        uint8_t *pos, *end, *p;
        uint8_t n_ex_rates = 0, got_basic_rates = 0, n_basic_rates = 0;
        *bytesleft -= beaconsize;
  
        memcpy(bss->bssid, pos, ETH_ALEN);
 -      lbs_deb_scan("process_bss: BSSID %s\n", print_mac(mac, bss->bssid));
 +      lbs_deb_scan("process_bss: BSSID %pM\n", bss->bssid);
        pos += ETH_ALEN;
  
        if ((end - pos) < 12) {
  
                switch (elem->id) {
                case MFIE_TYPE_SSID:
-                       bss->ssid_len = elem->len;
-                       memcpy(bss->ssid, elem->data, elem->len);
+                       bss->ssid_len = min_t(int, 32, elem->len);
+                       memcpy(bss->ssid, elem->data, bss->ssid_len);
                        lbs_deb_scan("got SSID IE: '%s', len %u\n",
                                     escape_essid(bss->ssid, bss->ssid_len),
                                     bss->ssid_len);
@@@ -1149,6 -1151,7 +1149,6 @@@ static int lbs_ret_80211_scan(struct lb
                struct bss_descriptor new;
                struct bss_descriptor *found = NULL;
                struct bss_descriptor *oldest = NULL;
 -              DECLARE_MAC_BUF(mac);
  
                /* Process the data fields and IEs returned for this BSS */
                memset(&new, 0, sizeof (struct bss_descriptor));
                        continue;
                }
  
 -              lbs_deb_scan("SCAN_RESP: BSSID %s\n", print_mac(mac, new.bssid));
 +              lbs_deb_scan("SCAN_RESP: BSSID %pM\n", new.bssid);
  
                /* Copy the locally created newbssentry to the scan table */
                memcpy(found, &new, offsetof(struct bss_descriptor, list));
@@@ -319,7 -319,8 +319,7 @@@ static int p54_parse_eeprom(struct ieee
        void *tmp;
        int err;
        u8 *end = (u8 *)eeprom + len;
-       u16 synth;
+       u16 synth = 0;
 -      DECLARE_MAC_BUF(mac);
  
        wrap = (struct eeprom_pda_wrap *) eeprom;
        entry = (void *)wrap->data + le16_to_cpu(wrap->len);
                entry = (void *)entry + (entry_len + 1)*2;
        }
  
-       if (!priv->iq_autocal || !priv->output_limit || !priv->curve_data) {
+       if (!synth || !priv->iq_autocal || !priv->output_limit ||
+           !priv->curve_data) {
                printk(KERN_ERR "p54: not all required entries found in eeprom!\n");
                err = -EINVAL;
                goto err;
                SET_IEEE80211_PERM_ADDR(dev, perm_addr);
        }
  
 -      printk(KERN_INFO "%s: hwaddr %s, MAC:isl38%02x RF:%s\n",
 +      printk(KERN_INFO "%s: hwaddr %pM, MAC:isl38%02x RF:%s\n",
                wiphy_name(dev->wiphy),
 -              print_mac(mac, dev->wiphy->perm_addr),
 +              dev->wiphy->perm_addr,
                priv->version, p54_rf_chips[priv->rxhw]);
  
        return 0;
@@@ -346,68 -346,6 +346,6 @@@ static void p54p_tx(struct ieee80211_h
                printk(KERN_INFO "%s: tx overflow.\n", wiphy_name(dev->wiphy));
  }
  
- static int p54p_open(struct ieee80211_hw *dev)
- {
-       struct p54p_priv *priv = dev->priv;
-       int err;
-       init_completion(&priv->boot_comp);
-       err = request_irq(priv->pdev->irq, &p54p_interrupt,
-                         IRQF_SHARED, "p54pci", dev);
-       if (err) {
-               printk(KERN_ERR "%s: failed to register IRQ handler\n",
-                      wiphy_name(dev->wiphy));
-               return err;
-       }
-       memset(priv->ring_control, 0, sizeof(*priv->ring_control));
-       err = p54p_upload_firmware(dev);
-       if (err) {
-               free_irq(priv->pdev->irq, dev);
-               return err;
-       }
-       priv->rx_idx_data = priv->tx_idx_data = 0;
-       priv->rx_idx_mgmt = priv->tx_idx_mgmt = 0;
-       p54p_refill_rx_ring(dev, 0, priv->ring_control->rx_data,
-               ARRAY_SIZE(priv->ring_control->rx_data), priv->rx_buf_data);
-       p54p_refill_rx_ring(dev, 2, priv->ring_control->rx_mgmt,
-               ARRAY_SIZE(priv->ring_control->rx_mgmt), priv->rx_buf_mgmt);
-       P54P_WRITE(ring_control_base, cpu_to_le32(priv->ring_control_dma));
-       P54P_READ(ring_control_base);
-       wmb();
-       udelay(10);
-       P54P_WRITE(int_enable, cpu_to_le32(ISL38XX_INT_IDENT_INIT));
-       P54P_READ(int_enable);
-       wmb();
-       udelay(10);
-       P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_RESET));
-       P54P_READ(dev_int);
-       if (!wait_for_completion_interruptible_timeout(&priv->boot_comp, HZ)) {
-               printk(KERN_ERR "%s: Cannot boot firmware!\n",
-                      wiphy_name(dev->wiphy));
-               free_irq(priv->pdev->irq, dev);
-               return -ETIMEDOUT;
-       }
-       P54P_WRITE(int_enable, cpu_to_le32(ISL38XX_INT_IDENT_UPDATE));
-       P54P_READ(int_enable);
-       wmb();
-       udelay(10);
-       P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_UPDATE));
-       P54P_READ(dev_int);
-       wmb();
-       udelay(10);
-       return 0;
- }
  static void p54p_stop(struct ieee80211_hw *dev)
  {
        struct p54p_priv *priv = dev->priv;
        memset(ring_control, 0, sizeof(*ring_control));
  }
  
+ static int p54p_open(struct ieee80211_hw *dev)
+ {
+       struct p54p_priv *priv = dev->priv;
+       int err;
+       init_completion(&priv->boot_comp);
+       err = request_irq(priv->pdev->irq, &p54p_interrupt,
+                         IRQF_SHARED, "p54pci", dev);
+       if (err) {
+               printk(KERN_ERR "%s: failed to register IRQ handler\n",
+                      wiphy_name(dev->wiphy));
+               return err;
+       }
+       memset(priv->ring_control, 0, sizeof(*priv->ring_control));
+       err = p54p_upload_firmware(dev);
+       if (err) {
+               free_irq(priv->pdev->irq, dev);
+               return err;
+       }
+       priv->rx_idx_data = priv->tx_idx_data = 0;
+       priv->rx_idx_mgmt = priv->tx_idx_mgmt = 0;
+       p54p_refill_rx_ring(dev, 0, priv->ring_control->rx_data,
+               ARRAY_SIZE(priv->ring_control->rx_data), priv->rx_buf_data);
+       p54p_refill_rx_ring(dev, 2, priv->ring_control->rx_mgmt,
+               ARRAY_SIZE(priv->ring_control->rx_mgmt), priv->rx_buf_mgmt);
+       P54P_WRITE(ring_control_base, cpu_to_le32(priv->ring_control_dma));
+       P54P_READ(ring_control_base);
+       wmb();
+       udelay(10);
+       P54P_WRITE(int_enable, cpu_to_le32(ISL38XX_INT_IDENT_INIT));
+       P54P_READ(int_enable);
+       wmb();
+       udelay(10);
+       P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_RESET));
+       P54P_READ(dev_int);
+       if (!wait_for_completion_interruptible_timeout(&priv->boot_comp, HZ)) {
+               printk(KERN_ERR "%s: Cannot boot firmware!\n",
+                      wiphy_name(dev->wiphy));
+               p54p_stop(dev);
+               return -ETIMEDOUT;
+       }
+       P54P_WRITE(int_enable, cpu_to_le32(ISL38XX_INT_IDENT_UPDATE));
+       P54P_READ(int_enable);
+       wmb();
+       udelay(10);
+       P54P_WRITE(dev_int, cpu_to_le32(ISL38XX_DEV_INT_UPDATE));
+       P54P_READ(dev_int);
+       wmb();
+       udelay(10);
+       return 0;
+ }
  static int __devinit p54p_probe(struct pci_dev *pdev,
                                const struct pci_device_id *id)
  {
        struct ieee80211_hw *dev;
        unsigned long mem_addr, mem_len;
        int err;
 -      DECLARE_MAC_BUF(mac);
  
        err = pci_enable_device(pdev);
        if (err) {
        spin_lock_init(&priv->lock);
        tasklet_init(&priv->rx_tasklet, p54p_rx_tasklet, (unsigned long)dev);
  
-       p54p_open(dev);
+       err = p54p_open(dev);
+       if (err)
+               goto err_free_common;
        err = p54_read_eeprom(dev);
        p54p_stop(dev);
        if (err)
-               goto err_free_desc;
+               goto err_free_common;
  
        err = ieee80211_register_hw(dev);
        if (err) {
  
   err_free_common:
        p54_free_common(dev);
-  err_free_desc:
        pci_free_consistent(pdev, sizeof(*priv->ring_control),
                            priv->ring_control, priv->ring_control_dma);
  
@@@ -131,13 -131,17 +131,13 @@@ static int qeth_l2_send_setgroupmac_cb(
        mac = &cmd->data.setdelmac.mac[0];
        /* MAC already registered, needed in couple/uncouple case */
        if (cmd->hdr.return_code == 0x2005) {
 -              QETH_DBF_MESSAGE(2, "Group MAC %02x:%02x:%02x:%02x:%02x:%02x "
 -                        "already existing on %s \n",
 -                        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
 -                        QETH_CARD_IFNAME(card));
 +              QETH_DBF_MESSAGE(2, "Group MAC %pM already existing on %s \n",
 +                        mac, QETH_CARD_IFNAME(card));
                cmd->hdr.return_code = 0;
        }
        if (cmd->hdr.return_code)
 -              QETH_DBF_MESSAGE(2, "Could not set group MAC "
 -                        "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n",
 -                        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
 -                        QETH_CARD_IFNAME(card), cmd->hdr.return_code);
 +              QETH_DBF_MESSAGE(2, "Could not set group MAC %pM on %s: %x\n",
 +                        mac, QETH_CARD_IFNAME(card), cmd->hdr.return_code);
        return 0;
  }
  
@@@ -159,8 -163,10 +159,8 @@@ static int qeth_l2_send_delgroupmac_cb(
        cmd = (struct qeth_ipa_cmd *) data;
        mac = &cmd->data.setdelmac.mac[0];
        if (cmd->hdr.return_code)
 -              QETH_DBF_MESSAGE(2, "Could not delete group MAC "
 -                        "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n",
 -                        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
 -                        QETH_CARD_IFNAME(card), cmd->hdr.return_code);
 +              QETH_DBF_MESSAGE(2, "Could not delete group MAC %pM on %s: %x\n",
 +                        mac, QETH_CARD_IFNAME(card), cmd->hdr.return_code);
        return 0;
  }
  
@@@ -367,8 -373,6 +367,6 @@@ static int qeth_l2_stop_card(struct qet
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
  
        qeth_set_allowed_threads(card, 0, 1);
-       if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD))
-               return -ERESTARTSYS;
        if (card->read.state == CH_STATE_UP &&
            card->write.state == CH_STATE_UP &&
            (card->state == CARD_STATE_UP)) {
@@@ -445,12 -449,15 +443,15 @@@ static void qeth_l2_process_inbound_buf
                        netif_rx(skb);
                        break;
                case QETH_HEADER_TYPE_OSN:
-                       skb_push(skb, sizeof(struct qeth_hdr));
-                       skb_copy_to_linear_data(skb, hdr,
+                       if (card->info.type == QETH_CARD_TYPE_OSN) {
+                               skb_push(skb, sizeof(struct qeth_hdr));
+                               skb_copy_to_linear_data(skb, hdr,
                                                sizeof(struct qeth_hdr));
-                       len = skb->len;
-                       card->osn_info.data_cb(skb);
-                       break;
+                               len = skb->len;
+                               card->osn_info.data_cb(skb);
+                               break;
+                       }
+                       /* else unknown */
                default:
                        dev_kfree_skb_any(skb);
                        QETH_DBF_TEXT(TRACE, 3, "inbunkno");
@@@ -969,12 -976,6 +970,6 @@@ static int __qeth_l2_set_online(struct 
        QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
  
        qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
-       if (qeth_wait_for_threads(card, ~QETH_RECOVER_THREAD)) {
-               PRINT_WARN("set_online of card %s interrupted by user!\n",
-                          CARD_BUS_ID(card));
-               return -ERESTARTSYS;
-       }
        recover_flag = card->state;
        rc = ccw_device_set_online(CARD_RDEV(card));
        if (rc) {
@@@ -1085,11 -1086,7 +1080,7 @@@ static int __qeth_l2_set_offline(struc
        if (card->dev && netif_carrier_ok(card->dev))
                netif_carrier_off(card->dev);
        recover_flag = card->state;
-       if (qeth_l2_stop_card(card, recovery_mode) == -ERESTARTSYS) {
-               PRINT_WARN("Stopping card %s interrupted by user!\n",
-                          CARD_BUS_ID(card));
-               return -ERESTARTSYS;
-       }
+       qeth_l2_stop_card(card, recovery_mode);
        rc  = ccw_device_set_offline(CARD_DDEV(card));
        rc2 = ccw_device_set_offline(CARD_WDEV(card));
        rc3 = ccw_device_set_offline(CARD_RDEV(card));
diff --combined include/linux/kernel.h
@@@ -116,6 -116,8 +116,8 @@@ extern int _cond_resched(void)
  # define might_resched() do { } while (0)
  #endif
  
+ #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
+   void __might_sleep(char *file, int line);
  /**
   * might_sleep - annotation for functions that can sleep
   *
   * be bitten later when the calling function happens to sleep when it is not
   * supposed to.
   */
- #ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
-   void __might_sleep(char *file, int line);
  # define might_sleep() \
        do { __might_sleep(__FILE__, __LINE__); might_resched(); } while (0)
  #else
@@@ -357,6 -357,18 +357,6 @@@ static inline char *pack_hex_byte(char 
        ((unsigned char *)&addr)[3]
  #define NIPQUAD_FMT "%u.%u.%u.%u"
  
 -#define NIP6(addr) \
 -      ntohs((addr).s6_addr16[0]), \
 -      ntohs((addr).s6_addr16[1]), \
 -      ntohs((addr).s6_addr16[2]), \
 -      ntohs((addr).s6_addr16[3]), \
 -      ntohs((addr).s6_addr16[4]), \
 -      ntohs((addr).s6_addr16[5]), \
 -      ntohs((addr).s6_addr16[6]), \
 -      ntohs((addr).s6_addr16[7])
 -#define NIP6_FMT "%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x"
 -#define NIP6_SEQFMT "%04x%04x%04x%04x%04x%04x%04x%04x"
 -
  #if defined(__LITTLE_ENDIAN)
  #define HIPQUAD(addr) \
        ((unsigned char *)&addr)[3], \
diff --combined include/net/sock.h
@@@ -229,9 -229,7 +229,9 @@@ struct sock 
        } sk_backlog;
        wait_queue_head_t       *sk_sleep;
        struct dst_entry        *sk_dst_cache;
 +#ifdef CONFIG_XFRM
        struct xfrm_policy      *sk_policy[2];
 +#endif
        rwlock_t                sk_dst_lock;
        atomic_t                sk_rmem_alloc;
        atomic_t                sk_wmem_alloc;
@@@ -363,27 -361,6 +363,27 @@@ static __inline__ int sk_del_node_init(
        return rc;
  }
  
 +static __inline__ int __sk_del_node_init_rcu(struct sock *sk)
 +{
 +      if (sk_hashed(sk)) {
 +              hlist_del_init_rcu(&sk->sk_node);
 +              return 1;
 +      }
 +      return 0;
 +}
 +
 +static __inline__ int sk_del_node_init_rcu(struct sock *sk)
 +{
 +      int rc = __sk_del_node_init_rcu(sk);
 +
 +      if (rc) {
 +              /* paranoid for a while -acme */
 +              WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
 +              __sock_put(sk);
 +      }
 +      return rc;
 +}
 +
  static __inline__ void __sk_add_node(struct sock *sk, struct hlist_head *list)
  {
        hlist_add_head(&sk->sk_node, list);
@@@ -395,17 -372,6 +395,17 @@@ static __inline__ void sk_add_node(stru
        __sk_add_node(sk, list);
  }
  
 +static __inline__ void __sk_add_node_rcu(struct sock *sk, struct hlist_head *list)
 +{
 +      hlist_add_head_rcu(&sk->sk_node, list);
 +}
 +
 +static __inline__ void sk_add_node_rcu(struct sock *sk, struct hlist_head *list)
 +{
 +      sock_hold(sk);
 +      __sk_add_node_rcu(sk, list);
 +}
 +
  static __inline__ void __sk_del_bind_node(struct sock *sk)
  {
        __hlist_del(&sk->sk_bind_node);
@@@ -419,8 -385,6 +419,8 @@@ static __inline__ void sk_add_bind_node
  
  #define sk_for_each(__sk, node, list) \
        hlist_for_each_entry(__sk, node, list, sk_node)
 +#define sk_for_each_rcu_safenext(__sk, node, list, next) \
 +      hlist_for_each_entry_rcu_safenext(__sk, node, list, sk_node, next)
  #define sk_for_each_from(__sk, node) \
        if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
                hlist_for_each_entry_from(__sk, node, sk_node)
@@@ -623,9 -587,8 +623,9 @@@ struct proto 
        int                     *sysctl_rmem;
        int                     max_header;
  
 -      struct kmem_cache               *slab;
 +      struct kmem_cache       *slab;
        unsigned int            obj_size;
 +      int                     slab_flags;
  
        atomic_t                *orphan_count;
  
  
        union {
                struct inet_hashinfo    *hashinfo;
 -              struct hlist_head       *udp_hash;
 +              struct udp_table        *udp_table;
                struct raw_hashinfo     *raw_hash;
        } h;
  
@@@ -973,7 -936,6 +973,6 @@@ extern void sock_init_data(struct socke
  
  /**
   *    sk_filter_release: Release a socket filter
-  *    @sk: socket
   *    @fp: filter to remove
   *
   *    Remove a filter from a socket and release its resources.
diff --combined net/core/net_namespace.c
@@@ -47,6 -47,7 +47,6 @@@ static __net_init int setup_net(struct 
                goto out;
  
        ng->len = INITIAL_NET_GEN_PTRS;
 -      INIT_RCU_HEAD(&ng->rcu);
        rcu_assign_pointer(net->gen, ng);
  
        error = 0;
@@@ -324,6 -325,38 +324,38 @@@ void unregister_pernet_subsys(struct pe
  }
  EXPORT_SYMBOL_GPL(unregister_pernet_subsys);
  
+ int register_pernet_gen_subsys(int *id, struct pernet_operations *ops)
+ {
+       int rv;
+       mutex_lock(&net_mutex);
+ again:
+       rv = ida_get_new_above(&net_generic_ids, 1, id);
+       if (rv < 0) {
+               if (rv == -EAGAIN) {
+                       ida_pre_get(&net_generic_ids, GFP_KERNEL);
+                       goto again;
+               }
+               goto out;
+       }
+       rv = register_pernet_operations(first_device, ops);
+       if (rv < 0)
+               ida_remove(&net_generic_ids, *id);
+       mutex_unlock(&net_mutex);
+ out:
+       return rv;
+ }
+ EXPORT_SYMBOL_GPL(register_pernet_gen_subsys);
+ void unregister_pernet_gen_subsys(int id, struct pernet_operations *ops)
+ {
+       mutex_lock(&net_mutex);
+       unregister_pernet_operations(ops);
+       ida_remove(&net_generic_ids, id);
+       mutex_unlock(&net_mutex);
+ }
+ EXPORT_SYMBOL_GPL(unregister_pernet_gen_subsys);
  /**
   *      register_pernet_device - register a network namespace device
   *    @ops:  pernet operations structure for the subsystem
@@@ -445,6 -478,7 +477,6 @@@ int net_assign_generic(struct net *net
         */
  
        ng->len = id;
 -      INIT_RCU_HEAD(&ng->rcu);
        memcpy(&ng->ptr, &old_ng->ptr, old_ng->len);
  
        rcu_assign_pointer(net->gen, ng);
diff --combined net/core/pktgen.c
@@@ -509,6 -509,7 +509,6 @@@ static int pktgen_if_show(struct seq_fi
        __u64 sa;
        __u64 stopped;
        __u64 now = getCurUs();
 -      DECLARE_MAC_BUF(mac);
  
        seq_printf(seq,
                   "Params: count %llu  min_pkt_size: %u  max_pkt_size: %u\n",
  
        seq_puts(seq, "     src_mac: ");
  
 -      seq_printf(seq, "%s ",
 -                 print_mac(mac, is_zero_ether_addr(pkt_dev->src_mac) ?
 -                           pkt_dev->odev->dev_addr : pkt_dev->src_mac));
 +      seq_printf(seq, "%pM ",
 +                 is_zero_ether_addr(pkt_dev->src_mac) ?
 +                           pkt_dev->odev->dev_addr : pkt_dev->src_mac);
  
        seq_printf(seq, "dst_mac: ");
 -      seq_printf(seq, "%s\n", print_mac(mac, pkt_dev->dst_mac));
 +      seq_printf(seq, "%pM\n", pkt_dev->dst_mac);
  
        seq_printf(seq,
                   "     udp_src_min: %d  udp_src_max: %d  udp_dst_min: %d  udp_dst_max: %d\n",
@@@ -1972,28 -1973,27 +1972,27 @@@ static void pktgen_setup_inject(struct 
  
        /* make sure that we don't pick a non-existing transmit queue */
        ntxq = pkt_dev->odev->real_num_tx_queues;
-       if (ntxq <= num_online_cpus() && (pkt_dev->flags & F_QUEUE_MAP_CPU)) {
+       if (ntxq > num_online_cpus() && (pkt_dev->flags & F_QUEUE_MAP_CPU)) {
                printk(KERN_WARNING "pktgen: WARNING: QUEUE_MAP_CPU "
-                      "disabled because CPU count (%d) exceeds number ",
-                      num_online_cpus());
-               printk(KERN_WARNING "pktgen: WARNING: of tx queues "
-                      "(%d) on %s \n", ntxq, pkt_dev->odev->name);
+                      "disabled because CPU count (%d) exceeds number "
+                      "of tx queues (%d) on %s\n", num_online_cpus(), ntxq,
+                      pkt_dev->odev->name);
                pkt_dev->flags &= ~F_QUEUE_MAP_CPU;
        }
        if (ntxq <= pkt_dev->queue_map_min) {
                printk(KERN_WARNING "pktgen: WARNING: Requested "
-                      "queue_map_min (%d) exceeds number of tx\n",
-                      pkt_dev->queue_map_min);
-               printk(KERN_WARNING "pktgen: WARNING: queues (%d) on "
-                      "%s, resetting\n", ntxq, pkt_dev->odev->name);
+                      "queue_map_min (zero-based) (%d) exceeds valid range "
+                      "[0 - %d] for (%d) queues on %s, resetting\n",
+                      pkt_dev->queue_map_min, (ntxq ?: 1)- 1, ntxq,
+                      pkt_dev->odev->name);
                pkt_dev->queue_map_min = ntxq - 1;
        }
-       if (ntxq <= pkt_dev->queue_map_max) {
+       if (pkt_dev->queue_map_max >= ntxq) {
                printk(KERN_WARNING "pktgen: WARNING: Requested "
-                      "queue_map_max (%d) exceeds number of tx\n",
-                      pkt_dev->queue_map_max);
-               printk(KERN_WARNING "pktgen: WARNING: queues (%d) on "
-                      "%s, resetting\n", ntxq, pkt_dev->odev->name);
+                      "queue_map_max (zero-based) (%d) exceeds valid range "
+                      "[0 - %d] for (%d) queues on %s, resetting\n",
+                      pkt_dev->queue_map_max, (ntxq ?: 1)- 1, ntxq,
+                      pkt_dev->odev->name);
                pkt_dev->queue_map_max = ntxq - 1;
        }
  
diff --combined net/ipv4/cipso_ipv4.c
@@@ -490,6 -490,7 +490,6 @@@ int cipso_v4_doi_add(struct cipso_v4_do
        }
  
        atomic_set(&doi_def->refcount, 1);
 -      INIT_RCU_HEAD(&doi_def->rcu);
  
        spin_lock(&cipso_v4_doi_list_lock);
        if (cipso_v4_doi_search(doi_def->doi) != NULL)
@@@ -2062,9 -2063,10 +2062,10 @@@ int cipso_v4_skbuff_setattr(struct sk_b
        u32 opt_len;
        int len_delta;
  
-       buf_len = cipso_v4_genopt(buf, buf_len, doi_def, secattr);
-       if (buf_len < 0)
-               return buf_len;
+       ret_val = cipso_v4_genopt(buf, buf_len, doi_def, secattr);
+       if (ret_val < 0)
+               return ret_val;
+       buf_len = ret_val;
        opt_len = (buf_len + 3) & ~3;
  
        /* we overwrite any existing options to ensure that we have enough
@@@ -315,6 -315,7 +315,7 @@@ struct netlbl_af6list *netlbl_af6list_r
   * Audit Helper Functions
   */
  
+ #ifdef CONFIG_AUDIT
  /**
   * netlbl_af4list_audit_addr - Audit an IPv4 address
   * @audit_buf: audit buffer
@@@ -370,7 -371,7 +371,7 @@@ void netlbl_af6list_audit_addr(struct a
  
        if (dev != NULL)
                audit_log_format(audit_buf, " netif=%s", dev);
 -      audit_log_format(audit_buf, " %s=" NIP6_FMT, dir, NIP6(*addr));
 +      audit_log_format(audit_buf, " %s=%pI6", dir, addr);
        if (ntohl(mask->s6_addr32[3]) != 0xffffffff) {
                u32 mask_len = 0;
                u32 mask_val;
        }
  }
  #endif /* IPv6 */
+ #endif /* CONFIG_AUDIT */
diff --combined net/sunrpc/xprtsock.c
@@@ -249,6 -249,7 +249,7 @@@ struct sock_xprt 
        void                    (*old_data_ready)(struct sock *, int);
        void                    (*old_state_change)(struct sock *);
        void                    (*old_write_space)(struct sock *);
+       void                    (*old_error_report)(struct sock *);
  };
  
  /*
@@@ -341,7 -342,8 +342,7 @@@ static void xs_format_ipv6_peer_address
  
        buf = kzalloc(40, GFP_KERNEL);
        if (buf) {
 -              snprintf(buf, 40, NIP6_FMT,
 -                              NIP6(addr->sin6_addr));
 +              snprintf(buf, 40, "%pI6",&addr->sin6_addr);
        }
        xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
  
  
        buf = kzalloc(64, GFP_KERNEL);
        if (buf) {
 -              snprintf(buf, 64, "addr="NIP6_FMT" port=%u proto=%s",
 -                              NIP6(addr->sin6_addr),
 +              snprintf(buf, 64, "addr=%pI6 port=%u proto=%s",
 +                              &addr->sin6_addr,
                                ntohs(addr->sin6_port),
                                protocol);
        }
        xprt->address_strings[RPC_DISPLAY_ALL] = buf;
  
        buf = kzalloc(36, GFP_KERNEL);
 -      if (buf) {
 -              snprintf(buf, 36, NIP6_SEQFMT,
 -                              NIP6(addr->sin6_addr));
 -      }
 +      if (buf)
 +              snprintf(buf, 36, "%pi6", &addr->sin6_addr);
 +
        xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
  
        buf = kzalloc(8, GFP_KERNEL);
  
        buf = kzalloc(50, GFP_KERNEL);
        if (buf) {
 -              snprintf(buf, 50, NIP6_FMT".%u.%u",
 -                              NIP6(addr->sin6_addr),
 -                              ntohs(addr->sin6_port) >> 8,
 -                              ntohs(addr->sin6_port) & 0xff);
 +              snprintf(buf, 50, "%pI6.%u.%u",
 +                       &addr->sin6_addr,
 +                       ntohs(addr->sin6_port) >> 8,
 +                       ntohs(addr->sin6_port) & 0xff);
        }
        xprt->address_strings[RPC_DISPLAY_UNIVERSAL_ADDR] = buf;
  
@@@ -696,8 -699,9 +697,9 @@@ static int xs_tcp_send_request(struct r
        case -EAGAIN:
                xs_nospace(task);
                break;
-       case -ECONNREFUSED:
        case -ECONNRESET:
+               xs_tcp_shutdown(xprt);
+       case -ECONNREFUSED:
        case -ENOTCONN:
        case -EPIPE:
                status = -ENOTCONN;
@@@ -740,6 -744,22 +742,22 @@@ out_release
        xprt_release_xprt(xprt, task);
  }
  
+ static void xs_save_old_callbacks(struct sock_xprt *transport, struct sock *sk)
+ {
+       transport->old_data_ready = sk->sk_data_ready;
+       transport->old_state_change = sk->sk_state_change;
+       transport->old_write_space = sk->sk_write_space;
+       transport->old_error_report = sk->sk_error_report;
+ }
+ static void xs_restore_old_callbacks(struct sock_xprt *transport, struct sock *sk)
+ {
+       sk->sk_data_ready = transport->old_data_ready;
+       sk->sk_state_change = transport->old_state_change;
+       sk->sk_write_space = transport->old_write_space;
+       sk->sk_error_report = transport->old_error_report;
+ }
  /**
   * xs_close - close a socket
   * @xprt: transport
@@@ -763,9 -783,8 +781,8 @@@ static void xs_close(struct rpc_xprt *x
        transport->sock = NULL;
  
        sk->sk_user_data = NULL;
-       sk->sk_data_ready = transport->old_data_ready;
-       sk->sk_state_change = transport->old_state_change;
-       sk->sk_write_space = transport->old_write_space;
+       xs_restore_old_callbacks(transport, sk);
        write_unlock_bh(&sk->sk_callback_lock);
  
        sk->sk_no_check = 0;
@@@ -1177,6 -1196,28 +1194,28 @@@ static void xs_tcp_state_change(struct 
        read_unlock(&sk->sk_callback_lock);
  }
  
+ /**
+  * xs_tcp_error_report - callback mainly for catching RST events
+  * @sk: socket
+  */
+ static void xs_tcp_error_report(struct sock *sk)
+ {
+       struct rpc_xprt *xprt;
+       read_lock(&sk->sk_callback_lock);
+       if (sk->sk_err != ECONNRESET || sk->sk_state != TCP_ESTABLISHED)
+               goto out;
+       if (!(xprt = xprt_from_sock(sk)))
+               goto out;
+       dprintk("RPC:       %s client %p...\n"
+                       "RPC:       error %d\n",
+                       __func__, xprt, sk->sk_err);
+       xprt_force_disconnect(xprt);
+ out:
+       read_unlock(&sk->sk_callback_lock);
+ }
  /**
   * xs_udp_write_space - callback invoked when socket buffer space
   *                             becomes available
@@@ -1407,8 -1448,8 +1446,8 @@@ static int xs_bind6(struct sock_xprt *t
                if (port > last)
                        nloop++;
        } while (err == -EADDRINUSE && nloop != 2);
 -      dprintk("RPC:       xs_bind6 "NIP6_FMT":%u: %s (%d)\n",
 -              NIP6(myaddr.sin6_addr), port, err ? "failed" : "ok", err);
 +      dprintk("RPC:       xs_bind6 %pI6:%u: %s (%d)\n",
 +              &myaddr.sin6_addr, port, err ? "failed" : "ok", err);
        return err;
  }
  
@@@ -1452,10 -1493,9 +1491,9 @@@ static void xs_udp_finish_connecting(st
  
                write_lock_bh(&sk->sk_callback_lock);
  
+               xs_save_old_callbacks(transport, sk);
                sk->sk_user_data = xprt;
-               transport->old_data_ready = sk->sk_data_ready;
-               transport->old_state_change = sk->sk_state_change;
-               transport->old_write_space = sk->sk_write_space;
                sk->sk_data_ready = xs_udp_data_ready;
                sk->sk_write_space = xs_udp_write_space;
                sk->sk_no_check = UDP_CSUM_NORCV;
@@@ -1587,13 -1627,13 +1625,13 @@@ static int xs_tcp_finish_connecting(str
  
                write_lock_bh(&sk->sk_callback_lock);
  
+               xs_save_old_callbacks(transport, sk);
                sk->sk_user_data = xprt;
-               transport->old_data_ready = sk->sk_data_ready;
-               transport->old_state_change = sk->sk_state_change;
-               transport->old_write_space = sk->sk_write_space;
                sk->sk_data_ready = xs_tcp_data_ready;
                sk->sk_state_change = xs_tcp_state_change;
                sk->sk_write_space = xs_tcp_write_space;
+               sk->sk_error_report = xs_tcp_error_report;
                sk->sk_allocation = GFP_ATOMIC;
  
                /* socket options */
diff --combined net/xfrm/xfrm_policy.c
@@@ -1251,6 -1251,8 +1251,8 @@@ xfrm_tmpl_resolve_one(struct xfrm_polic
                                 -EINVAL : -EAGAIN);
                        xfrm_state_put(x);
                }
+               else if (error == -ESRCH)
+                       error = -EAGAIN;
  
                if (!tmpl->optional)
                        goto fail;
@@@ -2467,11 -2469,13 +2469,11 @@@ static void xfrm_audit_common_policyinf
                                         sel->prefixlen_d);
                break;
        case AF_INET6:
 -              audit_log_format(audit_buf, " src=" NIP6_FMT,
 -                               NIP6(*(struct in6_addr *)sel->saddr.a6));
 +              audit_log_format(audit_buf, " src=%pI6", sel->saddr.a6);
                if (sel->prefixlen_s != 128)
                        audit_log_format(audit_buf, " src_prefixlen=%d",
                                         sel->prefixlen_s);
 -              audit_log_format(audit_buf, " dst=" NIP6_FMT,
 -                               NIP6(*(struct in6_addr *)sel->daddr.a6));
 +              audit_log_format(audit_buf, " dst=%pI6", sel->daddr.a6);
                if (sel->prefixlen_d != 128)
                        audit_log_format(audit_buf, " dst_prefixlen=%d",
                                         sel->prefixlen_d);