3.16.42-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Govindarajulu Varadarajan <_gov...@gmx.com>

commit 17197236d62c44da127be461c63ac5cc2cce1e53 upstream.

Driver sets the skb l4/l3 hash based on NIC_CFG_RSS_HASH_TYPE_*,
which is bit mask. This is wrong. Hw actually provides us enum.
Use CQ_ENET_RQ_DESC_RSS_TYPE_* to set l3 and l4 hash type.

Fixes: bf751ba802fe ("driver/net: enic: record q_number and rss_hash for skb")
Signed-off-by: Govindarajulu Varadarajan <_gov...@gmx.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
[bwh: Backported to 3.16: drop the version bump]
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -1033,12 +1033,18 @@ static void enic_rq_indicate_buf(struct
                skb->protocol = eth_type_trans(skb, netdev);
                skb_record_rx_queue(skb, q_number);
                if (netdev->features & NETIF_F_RXHASH) {
-                       skb_set_hash(skb, rss_hash,
-                                    (rss_type &
-                                     (NIC_CFG_RSS_HASH_TYPE_TCP_IPV6_EX |
-                                      NIC_CFG_RSS_HASH_TYPE_TCP_IPV6 |
-                                      NIC_CFG_RSS_HASH_TYPE_TCP_IPV4)) ?
-                                    PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3);
+                       switch (rss_type) {
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv4:
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6:
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_TCP_IPv6_EX:
+                               skb_set_hash(skb, rss_hash, PKT_HASH_TYPE_L4);
+                               break;
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_IPv4:
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_IPv6:
+                       case CQ_ENET_RQ_DESC_RSS_TYPE_IPv6_EX:
+                               skb_set_hash(skb, rss_hash, PKT_HASH_TYPE_L3);
+                               break;
+                       }
                }
 
                /* Hardware does not provide whole packet checksum. It only

Reply via email to