Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Thu, 5 Jul 2012 10:44:25 +0000 (03:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Jul 2012 10:44:25 +0000 (03:44 -0700)
1  2 
MAINTAINERS
drivers/net/ethernet/intel/e1000e/netdev.c
net/core/skbuff.c
net/netfilter/nfnetlink.c

diff --combined MAINTAINERS
@@@ -329,7 -329,7 +329,7 @@@ F: drivers/hwmon/adm1029.
  
  ADM8211 WIRELESS DRIVER
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
@@@ -1423,7 -1423,7 +1423,7 @@@ B43 WIRELESS DRIVE
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
 -W:    http://linuxwireless.org/en/users/Drivers/b43
 +W:    http://wireless.kernel.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43/
  
@@@ -1432,7 -1432,7 +1432,7 @@@ M:      Larry Finger <Larry.Finger@lwfinger.
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
  L:    b43-dev@lists.infradead.org
 -W:    http://linuxwireless.org/en/users/Drivers/b43
 +W:    http://wireless.kernel.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43legacy/
  
@@@ -1595,7 -1595,6 +1595,7 @@@ M:      Arend van Spriel <arend@broadcom.com
  M:    Franky (Zhenhui) Lin <frankyl@broadcom.com>
  M:    Kan Yan <kanyan@broadcom.com>
  L:    linux-wireless@vger.kernel.org
 +L:    brcm80211-dev-list@broadcom.com
  S:    Supported
  F:    drivers/net/wireless/brcm80211/
  
@@@ -4352,7 -4351,7 +4352,7 @@@ F:      arch/m68k/hp300
  MAC80211
  M:    Johannes Berg <johannes@sipsolutions.net>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  S:    Maintained
@@@ -4364,7 -4363,7 +4364,7 @@@ MAC80211 PID RATE CONTRO
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  M:    Mattias Nissler <mattias.nissler@gmx.de>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/PID
 +W:    http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/PID
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git
  S:    Maintained
@@@ -4655,8 -4654,8 +4655,8 @@@ L:      netfilter@vger.kernel.or
  L:    coreteam@netfilter.org
  W:    http://www.netfilter.org/
  W:    http://www.iptables.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-2.6.git
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next-2.6.git
+ T:    git git://1984.lsi.us.es/nf
+ T:    git git://1984.lsi.us.es/nf-next
  S:    Supported
  F:    include/linux/netfilter*
  F:    include/linux/netfilter/
@@@ -5049,7 -5048,7 +5049,7 @@@ F:      fs/ocfs2
  
  ORINOCO DRIVER
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/en/users/Drivers/orinoco
 +W:    http://wireless.kernel.org/en/users/Drivers/orinoco
  W:    http://www.nongnu.org/orinoco/
  S:    Orphan
  F:    drivers/net/wireless/orinoco/
@@@ -5754,7 -5753,7 +5754,7 @@@ F:      net/rose
  RTL8180 WIRELESS DRIVER
  M:    "John W. Linville" <linville@tuxdriver.com>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtl818x/rtl8180/
@@@ -5764,7 -5763,7 +5764,7 @@@ M:      Herton Ronaldo Krzesinski <herton@ca
  M:    Hin-Tak Leung <htl10@users.sourceforge.net>
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtl818x/rtl8187/
@@@ -5773,7 -5772,7 +5773,7 @@@ RTL8192CE WIRELESS DRIVE
  M:    Larry Finger <Larry.Finger@lwfinger.net>
  M:    Chaoming Li <chaoming_li@realsil.com.cn>
  L:    linux-wireless@vger.kernel.org
 -W:    http://linuxwireless.org/
 +W:    http://wireless.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
  F:    drivers/net/wireless/rtlwifi/
@@@ -496,7 -496,7 +496,7 @@@ static void e1000_receive_skb(struct e1
   * @sk_buff: socket buffer with received data
   **/
  static void e1000_rx_checksum(struct e1000_adapter *adapter, u32 status_err,
-                             __le16 csum, struct sk_buff *skb)
+                             struct sk_buff *skb)
  {
        u16 status = (u16)status_err;
        u8 errors = (u8)(status_err >> 24);
        if (status & E1000_RXD_STAT_IXSM)
                return;
  
-       /* TCP/UDP checksum error bit is set */
-       if (errors & E1000_RXD_ERR_TCPE) {
+       /* TCP/UDP checksum error bit or IP checksum error bit is set */
+       if (errors & (E1000_RXD_ERR_TCPE | E1000_RXD_ERR_IPE)) {
                /* let the stack verify checksum errors */
                adapter->hw_csum_err++;
                return;
                return;
  
        /* It must be a TCP or UDP packet with a valid checksum */
-       if (status & E1000_RXD_STAT_TCPCS) {
-               /* TCP checksum is good */
-               skb->ip_summed = CHECKSUM_UNNECESSARY;
-       } else {
-               /*
-                * IP fragment with UDP payload
-                * Hardware complements the payload checksum, so we undo it
-                * and then put the value in host order for further stack use.
-                */
-               __sum16 sum = (__force __sum16)swab16((__force u16)csum);
-               skb->csum = csum_unfold(~sum);
-               skb->ip_summed = CHECKSUM_COMPLETE;
-       }
+       skb->ip_summed = CHECKSUM_UNNECESSARY;
        adapter->hw_csum_good++;
  }
  
@@@ -954,8 -942,7 +942,7 @@@ static bool e1000_clean_rx_irq(struct e
                skb_put(skb, length);
  
                /* Receive Checksum Offload */
-               e1000_rx_checksum(adapter, staterr,
-                                 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
+               e1000_rx_checksum(adapter, staterr, skb);
  
                e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
  
@@@ -1341,8 -1328,7 +1328,7 @@@ copydone
                total_rx_bytes += skb->len;
                total_rx_packets++;
  
-               e1000_rx_checksum(adapter, staterr,
-                                 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
+               e1000_rx_checksum(adapter, staterr, skb);
  
                e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
  
@@@ -1512,9 -1498,8 +1498,8 @@@ static bool e1000_clean_jumbo_rx_irq(st
                        }
                }
  
-               /* Receive Checksum Offload XXX recompute due to CRC strip? */
-               e1000_rx_checksum(adapter, staterr,
-                                 rx_desc->wb.lower.hi_dword.csum_ip.csum, skb);
+               /* Receive Checksum Offload */
+               e1000_rx_checksum(adapter, staterr, skb);
  
                e1000_rx_hash(netdev, rx_desc->wb.lower.hi_dword.rss, skb);
  
@@@ -3098,19 -3083,10 +3083,10 @@@ static void e1000_configure_rx(struct e
  
        /* Enable Receive Checksum Offload for TCP and UDP */
        rxcsum = er32(RXCSUM);
-       if (adapter->netdev->features & NETIF_F_RXCSUM) {
+       if (adapter->netdev->features & NETIF_F_RXCSUM)
                rxcsum |= E1000_RXCSUM_TUOFL;
-               /*
-                * IPv4 payload checksum for UDP fragments must be
-                * used in conjunction with packet-split.
-                */
-               if (adapter->rx_ps_pages)
-                       rxcsum |= E1000_RXCSUM_IPPCSE;
-       } else {
+       else
                rxcsum &= ~E1000_RXCSUM_TUOFL;
-               /* no need to clear IPPCSE as it defaults to 0 */
-       }
        ew32(RXCSUM, rxcsum);
  
        if (adapter->hw.mac.type == e1000_pch2lan) {
@@@ -5241,22 -5217,10 +5217,10 @@@ static int e1000_change_mtu(struct net_
        int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
  
        /* Jumbo frame support */
-       if (max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) {
-               if (!(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
-                       e_err("Jumbo Frames not supported.\n");
-                       return -EINVAL;
-               }
-               /*
-                * IP payload checksum (enabled with jumbos/packet-split when
-                * Rx checksum is enabled) and generation of RSS hash is
-                * mutually exclusive in the hardware.
-                */
-               if ((netdev->features & NETIF_F_RXCSUM) &&
-                   (netdev->features & NETIF_F_RXHASH)) {
-                       e_err("Jumbo frames cannot be enabled when both receive checksum offload and receive hashing are enabled.  Disable one of the receive offload features before enabling jumbos.\n");
-                       return -EINVAL;
-               }
+       if ((max_frame > ETH_FRAME_LEN + ETH_FCS_LEN) &&
+           !(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
+               e_err("Jumbo Frames not supported.\n");
+               return -EINVAL;
        }
  
        /* Supported frame sizes */
@@@ -6030,17 -5994,6 +5994,6 @@@ static int e1000_set_features(struct ne
                         NETIF_F_RXALL)))
                return 0;
  
-       /*
-        * IP payload checksum (enabled with jumbos/packet-split when Rx
-        * checksum is enabled) and generation of RSS hash is mutually
-        * exclusive in the hardware.
-        */
-       if (adapter->rx_ps_pages &&
-           (features & NETIF_F_RXCSUM) && (features & NETIF_F_RXHASH)) {
-               e_err("Enabling both receive checksum offload and receive hashing is not possible with jumbo frames.  Disable jumbos or enable only one of the receive offload features.\n");
-               return -EINVAL;
-       }
        if (changed & NETIF_F_RXFCS) {
                if (features & NETIF_F_RXFCS) {
                        adapter->flags2 &= ~FLAG2_CRC_STRIPPING;
@@@ -6238,8 -6191,7 +6191,8 @@@ static int __devinit e1000_probe(struc
        }
  
        if (hw->phy.ops.check_reset_block && hw->phy.ops.check_reset_block(hw))
 -              e_info("PHY reset is blocked due to SOL/IDER session.\n");
 +              dev_info(&pdev->dev,
 +                       "PHY reset is blocked due to SOL/IDER session.\n");
  
        /* Set initial default active device features */
        netdev->features = (NETIF_F_SG |
                if (e1000_validate_nvm_checksum(&adapter->hw) >= 0)
                        break;
                if (i == 2) {
 -                      e_err("The NVM Checksum Is Not Valid\n");
 +                      dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n");
                        err = -EIO;
                        goto err_eeprom;
                }
  
        /* copy the MAC address */
        if (e1000e_read_mac_addr(&adapter->hw))
 -              e_err("NVM Read Error while reading MAC address\n");
 +              dev_err(&pdev->dev,
 +                      "NVM Read Error while reading MAC address\n");
  
        memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
        memcpy(netdev->perm_addr, adapter->hw.mac.addr, netdev->addr_len);
  
        if (!is_valid_ether_addr(netdev->perm_addr)) {
 -              e_err("Invalid MAC Address: %pM\n", netdev->perm_addr);
 +              dev_err(&pdev->dev, "Invalid MAC Address: %pM\n",
 +                      netdev->perm_addr);
                err = -EIO;
                goto err_eeprom;
        }
diff --combined net/core/skbuff.c
@@@ -160,8 -160,8 +160,8 @@@ static void skb_under_panic(struct sk_b
   *    @node: numa node to allocate memory on
   *
   *    Allocate a new &sk_buff. The returned buffer has no headroom and a
 - *    tail room of size bytes. The object has a reference count of one.
 - *    The return is the buffer. On a failure the return is %NULL.
 + *    tail room of at least size bytes. The object has a reference count
 + *    of one. The return is the buffer. On a failure the return is %NULL.
   *
   *    Buffers may only be allocated from interrupts using a @gfp_mask of
   *    %GFP_ATOMIC.
@@@ -1755,6 -1755,7 +1755,7 @@@ int skb_splice_bits(struct sk_buff *skb
        struct splice_pipe_desc spd = {
                .pages = pages,
                .partial = partial,
+               .nr_pages_max = MAX_SKB_FRAGS,
                .flags = flags,
                .ops = &sock_pipe_buf_ops,
                .spd_release = sock_spd_release,
@@@ -39,15 -39,6 +39,15 @@@ static char __initdata nfversion[] = "0
  static const struct nfnetlink_subsystem __rcu *subsys_table[NFNL_SUBSYS_COUNT];
  static DEFINE_MUTEX(nfnl_mutex);
  
 +static const int nfnl_group2type[NFNLGRP_MAX+1] = {
 +      [NFNLGRP_CONNTRACK_NEW]         = NFNL_SUBSYS_CTNETLINK,
 +      [NFNLGRP_CONNTRACK_UPDATE]      = NFNL_SUBSYS_CTNETLINK,
 +      [NFNLGRP_CONNTRACK_DESTROY]     = NFNL_SUBSYS_CTNETLINK,
 +      [NFNLGRP_CONNTRACK_EXP_NEW]     = NFNL_SUBSYS_CTNETLINK_EXP,
 +      [NFNLGRP_CONNTRACK_EXP_UPDATE]  = NFNL_SUBSYS_CTNETLINK_EXP,
 +      [NFNLGRP_CONNTRACK_EXP_DESTROY] = NFNL_SUBSYS_CTNETLINK_EXP,
 +};
 +
  void nfnl_lock(void)
  {
        mutex_lock(&nfnl_mutex);
@@@ -178,8 -169,10 +178,10 @@@ replay
  
                err = nla_parse(cda, ss->cb[cb_id].attr_count,
                                attr, attrlen, ss->cb[cb_id].policy);
-               if (err < 0)
+               if (err < 0) {
+                       rcu_read_unlock();
                        return err;
+               }
  
                if (nc->call_rcu) {
                        err = nc->call_rcu(net->nfnl, skb, nlh,
@@@ -209,35 -202,12 +211,35 @@@ static void nfnetlink_rcv(struct sk_buf
        netlink_rcv_skb(skb, &nfnetlink_rcv_msg);
  }
  
 +#ifdef CONFIG_MODULES
 +static void nfnetlink_bind(int group)
 +{
 +      const struct nfnetlink_subsystem *ss;
 +      int type = nfnl_group2type[group];
 +
 +      rcu_read_lock();
 +      ss = nfnetlink_get_subsys(type);
 +      if (!ss) {
 +              rcu_read_unlock();
 +              request_module("nfnetlink-subsys-%d", type);
 +              return;
 +      }
 +      rcu_read_unlock();
 +}
 +#endif
 +
  static int __net_init nfnetlink_net_init(struct net *net)
  {
        struct sock *nfnl;
 +      struct netlink_kernel_cfg cfg = {
 +              .groups = NFNLGRP_MAX,
 +              .input  = nfnetlink_rcv,
 +#ifdef CONFIG_MODULES
 +              .bind   = nfnetlink_bind,
 +#endif
 +      };
  
 -      nfnl = netlink_kernel_create(net, NETLINK_NETFILTER, NFNLGRP_MAX,
 -                                   nfnetlink_rcv, NULL, THIS_MODULE);
 +      nfnl = netlink_kernel_create(net, NETLINK_NETFILTER, THIS_MODULE, &cfg);
        if (!nfnl)
                return -ENOMEM;
        net->nfnl_stash = nfnl;