**/
  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_ */
 
   **/
  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_ */
 
        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);
  }
  
 
                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.
 
  
                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);
        }