Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
authorDavid S. Miller <davem@davemloft.net>
Sat, 23 Apr 2016 22:26:24 +0000 (18:26 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 Apr 2016 22:51:33 +0000 (18:51 -0400)
Conflicts were two cases of simple overlapping changes,
nothing serious.

In the UDP case, we need to add a hlist_add_tail_rcu()
to linux/rculist.h, because we've moved UDP socket handling
away from using nulls lists.

Signed-off-by: David S. Miller <davem@davemloft.net>
34 files changed:
1  2 
MAINTAINERS
drivers/net/dsa/mv88e6xxx.c
drivers/net/ethernet/broadcom/genet/bcmgenet.c
drivers/net/ethernet/intel/fm10k/fm10k_pf.c
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/i40e/i40e_txrx.h
drivers/net/ethernet/intel/i40evf/i40e_txrx.c
drivers/net/ethernet/intel/i40evf/i40e_txrx.h
drivers/net/ethernet/qlogic/qede/qede_main.c
drivers/net/ethernet/renesas/ravb_main.c
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
drivers/net/ethernet/ti/cpsw.c
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/ops.c
drivers/net/wireless/intel/iwlwifi/pcie/trans.c
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/dm.c
include/linux/rculist.h
include/net/ipv6.h
include/net/route.h
include/net/sctp/structs.h
include/net/sock.h
include/net/tcp.h
kernel/bpf/verifier.c
net/core/skbuff.c
net/ipv4/tcp_input.c
net/ipv4/tcp_output.c
net/ipv4/udp.c
net/ipv6/addrconf.c
net/ipv6/datagram.c
net/ipv6/udp.c
net/netlink/af_netlink.c
net/packet/af_packet.c
net/sctp/sm_sideeffect.c
net/wireless/nl80211.c

diff --cc MAINTAINERS
Simple merge
Simple merge
index 77ccdde56c0c4b1c08672aafdd8ee6f96841e3c9,a9bd70537d6547b550a591b7775a8fcf4c76f186..6b2b1913527d84d8ee0b0e843fba12b68004ec83
@@@ -442,20 -413,14 +442,24 @@@ static inline int i40e_maybe_stop_tx(st
   **/
  static inline bool i40e_chk_linearize(struct sk_buff *skb, int count)
  {
-       /* we can only support up to 8 data buffers for a single send */
-       if (likely(count <= I40E_MAX_BUFFER_TXD))
+       /* Both TSO and single send will work if count is less than 8 */
+       if (likely(count < I40E_MAX_BUFFER_TXD))
                return false;
  
-       return __i40e_chk_linearize(skb);
+       if (skb_is_gso(skb))
+               return __i40e_chk_linearize(skb);
+       /* we can support up to 8 data buffers for a single send */
+       return count != I40E_MAX_BUFFER_TXD;
  }
 +
 +/**
 + * i40e_rx_is_fcoe - returns true if the Rx packet type is FCoE
 + * @ptype: the packet type field from Rx descriptor write-back
 + **/
 +static inline bool i40e_rx_is_fcoe(u16 ptype)
 +{
 +      return (ptype >= I40E_RX_PTYPE_L2_FCOE_PAY3) &&
 +             (ptype <= I40E_RX_PTYPE_L2_FCOE_VFT_FCOTHER);
 +}
  #endif /* _I40E_TXRX_H_ */
index 84c28aa64fdf9fd8ea20e276a15c6297cfd237c0,0429553fe8870cb7f38ae07ab13bb0c94d07dbe0..54b52e8f7097bbe5b6c50bffdd761f026e970127
@@@ -424,20 -395,14 +424,24 @@@ static inline int i40e_maybe_stop_tx(st
   **/
  static inline bool i40e_chk_linearize(struct sk_buff *skb, int count)
  {
-       /* we can only support up to 8 data buffers for a single send */
-       if (likely(count <= I40E_MAX_BUFFER_TXD))
+       /* Both TSO and single send will work if count is less than 8 */
+       if (likely(count < I40E_MAX_BUFFER_TXD))
                return false;
  
-       return __i40evf_chk_linearize(skb);
+       if (skb_is_gso(skb))
+               return __i40evf_chk_linearize(skb);
+       /* we can support up to 8 data buffers for a single send */
+       return count != I40E_MAX_BUFFER_TXD;
  }
 +
 +/**
 + * i40e_rx_is_fcoe - returns true if the Rx packet type is FCoE
 + * @ptype: the packet type field from Rx descriptor write-back
 + **/
 +static inline bool i40e_rx_is_fcoe(u16 ptype)
 +{
 +      return (ptype >= I40E_RX_PTYPE_L2_FCOE_PAY3) &&
 +             (ptype <= I40E_RX_PTYPE_L2_FCOE_VFT_FCOTHER);
 +}
  #endif /* _I40E_TXRX_H_ */
Simple merge
index 656541c5360a374ebaad9137f9404b82d9fb4d04,d278399097dc5bedb72ae8bed05da5db263cd6f2..8bfb8e06a90c4dd24765ca56aaf7a16abaa0f25b
@@@ -782,15 -761,8 +782,13 @@@ static void iwl_op_mode_mvm_stop(struc
        for (i = 0; i < NVM_MAX_NUM_SECTIONS; i++)
                kfree(mvm->nvm_sections[i].data);
  
-       iwl_free_fw_paging(mvm);
        iwl_mvm_tof_clean(mvm);
  
 +      del_timer_sync(&mvm->scan_timer);
 +
 +      mutex_destroy(&mvm->mutex);
 +      mutex_destroy(&mvm->d0i3_suspend_mutex);
 +
        ieee80211_free_hw(mvm->hw);
  }
  
index 17d4f849c65e3dcf5dfbbd8100abf1236073ad55,17d4f849c65e3dcf5dfbbd8100abf1236073ad55..8beb98dcf14f066fc4e9075ed0b94cc29998c9bc
@@@ -487,6 -487,6 +487,42 @@@ static inline void hlist_add_head_rcu(s
                first->pprev = &n->next;
  }
  
++/**
++ * hlist_add_tail_rcu
++ * @n: the element to add to the hash list.
++ * @h: the list to add to.
++ *
++ * Description:
++ * Adds the specified element to the specified hlist,
++ * while permitting racing traversals.
++ *
++ * The caller must take whatever precautions are necessary
++ * (such as holding appropriate locks) to avoid racing
++ * with another list-mutation primitive, such as hlist_add_head_rcu()
++ * or hlist_del_rcu(), running on this same list.
++ * However, it is perfectly legal to run concurrently with
++ * the _rcu list-traversal primitives, such as
++ * hlist_for_each_entry_rcu(), used to prevent memory-consistency
++ * problems on Alpha CPUs.  Regardless of the type of CPU, the
++ * list-traversal primitive must be guarded by rcu_read_lock().
++ */
++static inline void hlist_add_tail_rcu(struct hlist_node *n,
++                                    struct hlist_head *h)
++{
++      struct hlist_node *i, *last = NULL;
++
++      for (i = hlist_first_rcu(h); i; i = hlist_next_rcu(i))
++              last = i;
++
++      if (last) {
++              n->next = last->next;
++              n->pprev = &last->next;
++              rcu_assign_pointer(hlist_next_rcu(last), n);
++      } else {
++              hlist_add_head_rcu(n, h);
++      }
++}
++
  /**
   * hlist_add_before_rcu
   * @n: the new element to add to the hash list.
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/ipv4/udp.c
index 37e09c3dd0468f46a0ae153038a9d11745311c6c,a2e7f55a1f6103e7a84d8ca2dd821841fb51f9bc..76ea0a8be09085488339d70bdeb3438fbf0ac458
@@@ -336,8 -339,13 +336,13 @@@ found
  
                hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
                spin_lock(&hslot2->lock);
-               hlist_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
-                                        &hslot2->head);
+               if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport &&
 -                      sk->sk_family == AF_INET6)
 -                      hlist_nulls_add_tail_rcu(&udp_sk(sk)->udp_portaddr_node,
 -                                               &hslot2->head);
++                  sk->sk_family == AF_INET6)
++                      hlist_add_tail_rcu(&udp_sk(sk)->udp_portaddr_node,
++                                         &hslot2->head);
+               else
 -                      hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
 -                                               &hslot2->head);
++                      hlist_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
++                                         &hslot2->head);
                hslot2->count++;
                spin_unlock(&hslot2->lock);
        }
Simple merge
Simple merge
diff --cc net/ipv6/udp.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge