|
@@ -1360,14 +1360,31 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
|
|
}
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_IXGBE_DCA */
|
|
#endif /* CONFIG_IXGBE_DCA */
|
|
|
|
+
|
|
|
|
+#define IXGBE_RSS_L4_TYPES_MASK \
|
|
|
|
+ ((1ul << IXGBE_RXDADV_RSSTYPE_IPV4_TCP) | \
|
|
|
|
+ (1ul << IXGBE_RXDADV_RSSTYPE_IPV4_UDP) | \
|
|
|
|
+ (1ul << IXGBE_RXDADV_RSSTYPE_IPV6_TCP) | \
|
|
|
|
+ (1ul << IXGBE_RXDADV_RSSTYPE_IPV6_UDP))
|
|
|
|
+
|
|
static inline void ixgbe_rx_hash(struct ixgbe_ring *ring,
|
|
static inline void ixgbe_rx_hash(struct ixgbe_ring *ring,
|
|
union ixgbe_adv_rx_desc *rx_desc,
|
|
union ixgbe_adv_rx_desc *rx_desc,
|
|
struct sk_buff *skb)
|
|
struct sk_buff *skb)
|
|
{
|
|
{
|
|
- if (ring->netdev->features & NETIF_F_RXHASH)
|
|
|
|
- skb_set_hash(skb,
|
|
|
|
- le32_to_cpu(rx_desc->wb.lower.hi_dword.rss),
|
|
|
|
- PKT_HASH_TYPE_L3);
|
|
|
|
|
|
+ u16 rss_type;
|
|
|
|
+
|
|
|
|
+ if (!(ring->netdev->features & NETIF_F_RXHASH))
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ rss_type = le16_to_cpu(rx_desc->wb.lower.lo_dword.hs_rss.pkt_info) &
|
|
|
|
+ IXGBE_RXDADV_RSSTYPE_MASK;
|
|
|
|
+
|
|
|
|
+ if (!rss_type)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ skb_set_hash(skb, le32_to_cpu(rx_desc->wb.lower.hi_dword.rss),
|
|
|
|
+ (IXGBE_RSS_L4_TYPES_MASK & (1ul << rss_type)) ?
|
|
|
|
+ PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3);
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef IXGBE_FCOE
|
|
#ifdef IXGBE_FCOE
|