|
Thomas Bogendoerfer |
75a932 |
From: Ronak Doshi <doshir@vmware.com>
|
|
Thomas Bogendoerfer |
75a932 |
Date: Wed, 8 Feb 2023 14:38:59 -0800
|
|
Thomas Bogendoerfer |
75a932 |
Subject: vmxnet3: move rss code block under eop descriptor
|
|
Thomas Bogendoerfer |
75a932 |
Patch-mainline: v6.2
|
|
Thomas Bogendoerfer |
75a932 |
Git-commit: ec76d0c2da5c6dfb6a33f1545cc15997013923da
|
|
Thomas Bogendoerfer |
75a932 |
References: bsc#1208212
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
Commit b3973bb40041 ("vmxnet3: set correct hash type based on
|
|
Thomas Bogendoerfer |
75a932 |
rss information") added hashType information into skb. However,
|
|
Thomas Bogendoerfer |
75a932 |
rssType field is populated for eop descriptor. This can lead
|
|
Thomas Bogendoerfer |
75a932 |
to incorrectly reporting of hashType for packets which use
|
|
Thomas Bogendoerfer |
75a932 |
multiple rx descriptors. Multiple rx descriptors are used
|
|
Thomas Bogendoerfer |
75a932 |
for Jumbo frame or LRO packets, which can hit this issue.
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
This patch moves the RSS codeblock under eop descritor.
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
Cc: stable@vger.kernel.org
|
|
Thomas Bogendoerfer |
75a932 |
Fixes: b3973bb40041 ("vmxnet3: set correct hash type based on rss information")
|
|
Thomas Bogendoerfer |
75a932 |
Signed-off-by: Ronak Doshi <doshir@vmware.com>
|
|
Thomas Bogendoerfer |
75a932 |
Acked-by: Peng Li <lpeng@vmware.com>
|
|
Thomas Bogendoerfer |
75a932 |
Acked-by: Guolin Yang <gyang@vmware.com>
|
|
Thomas Bogendoerfer |
75a932 |
Link: https://lore.kernel.org/r/20230208223900.5794-1-doshir@vmware.com
|
|
Thomas Bogendoerfer |
75a932 |
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
Thomas Bogendoerfer |
75a932 |
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
|
|
Thomas Bogendoerfer |
75a932 |
---
|
|
Thomas Bogendoerfer |
75a932 |
drivers/net/vmxnet3/vmxnet3_drv.c | 50 +++++++++++++++++++-------------------
|
|
Thomas Bogendoerfer |
75a932 |
1 file changed, 25 insertions(+), 25 deletions(-)
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
|
|
Thomas Bogendoerfer |
75a932 |
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
|
|
Thomas Bogendoerfer |
75a932 |
@@ -1479,31 +1479,6 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx
|
|
Thomas Bogendoerfer |
75a932 |
rxd->len = rbi->len;
|
|
Thomas Bogendoerfer |
75a932 |
}
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
-#ifdef VMXNET3_RSS
|
|
Thomas Bogendoerfer |
75a932 |
- if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
|
|
Thomas Bogendoerfer |
75a932 |
- (adapter->netdev->features & NETIF_F_RXHASH)) {
|
|
Thomas Bogendoerfer |
75a932 |
- enum pkt_hash_types hash_type;
|
|
Thomas Bogendoerfer |
75a932 |
-
|
|
Thomas Bogendoerfer |
75a932 |
- switch (rcd->rssType) {
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_IPV4:
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_IPV6:
|
|
Thomas Bogendoerfer |
75a932 |
- hash_type = PKT_HASH_TYPE_L3;
|
|
Thomas Bogendoerfer |
75a932 |
- break;
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_TCPIPV4:
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_TCPIPV6:
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_UDPIPV4:
|
|
Thomas Bogendoerfer |
75a932 |
- case VMXNET3_RCD_RSS_TYPE_UDPIPV6:
|
|
Thomas Bogendoerfer |
75a932 |
- hash_type = PKT_HASH_TYPE_L4;
|
|
Thomas Bogendoerfer |
75a932 |
- break;
|
|
Thomas Bogendoerfer |
75a932 |
- default:
|
|
Thomas Bogendoerfer |
75a932 |
- hash_type = PKT_HASH_TYPE_L3;
|
|
Thomas Bogendoerfer |
75a932 |
- break;
|
|
Thomas Bogendoerfer |
75a932 |
- }
|
|
Thomas Bogendoerfer |
75a932 |
- skb_set_hash(ctx->skb,
|
|
Thomas Bogendoerfer |
75a932 |
- le32_to_cpu(rcd->rssHash),
|
|
Thomas Bogendoerfer |
75a932 |
- hash_type);
|
|
Thomas Bogendoerfer |
75a932 |
- }
|
|
Thomas Bogendoerfer |
75a932 |
-#endif
|
|
Thomas Bogendoerfer |
75a932 |
skb_put(ctx->skb, rcd->len);
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
if (VMXNET3_VERSION_GE_2(adapter) &&
|
|
Thomas Bogendoerfer |
75a932 |
@@ -1580,6 +1555,31 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx
|
|
Thomas Bogendoerfer |
75a932 |
u32 mtu = adapter->netdev->mtu;
|
|
Thomas Bogendoerfer |
75a932 |
skb->len += skb->data_len;
|
|
Thomas Bogendoerfer |
75a932 |
|
|
Thomas Bogendoerfer |
75a932 |
+#ifdef VMXNET3_RSS
|
|
Thomas Bogendoerfer |
75a932 |
+ if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
|
|
Thomas Bogendoerfer |
75a932 |
+ (adapter->netdev->features & NETIF_F_RXHASH)) {
|
|
Thomas Bogendoerfer |
75a932 |
+ enum pkt_hash_types hash_type;
|
|
Thomas Bogendoerfer |
75a932 |
+
|
|
Thomas Bogendoerfer |
75a932 |
+ switch (rcd->rssType) {
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_IPV4:
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_IPV6:
|
|
Thomas Bogendoerfer |
75a932 |
+ hash_type = PKT_HASH_TYPE_L3;
|
|
Thomas Bogendoerfer |
75a932 |
+ break;
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_TCPIPV4:
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_TCPIPV6:
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_UDPIPV4:
|
|
Thomas Bogendoerfer |
75a932 |
+ case VMXNET3_RCD_RSS_TYPE_UDPIPV6:
|
|
Thomas Bogendoerfer |
75a932 |
+ hash_type = PKT_HASH_TYPE_L4;
|
|
Thomas Bogendoerfer |
75a932 |
+ break;
|
|
Thomas Bogendoerfer |
75a932 |
+ default:
|
|
Thomas Bogendoerfer |
75a932 |
+ hash_type = PKT_HASH_TYPE_L3;
|
|
Thomas Bogendoerfer |
75a932 |
+ break;
|
|
Thomas Bogendoerfer |
75a932 |
+ }
|
|
Thomas Bogendoerfer |
75a932 |
+ skb_set_hash(skb,
|
|
Thomas Bogendoerfer |
75a932 |
+ le32_to_cpu(rcd->rssHash),
|
|
Thomas Bogendoerfer |
75a932 |
+ hash_type);
|
|
Thomas Bogendoerfer |
75a932 |
+ }
|
|
Thomas Bogendoerfer |
75a932 |
+#endif
|
|
Thomas Bogendoerfer |
75a932 |
vmxnet3_rx_csum(adapter, skb,
|
|
Thomas Bogendoerfer |
75a932 |
(union Vmxnet3_GenericDesc *)rcd);
|
|
Thomas Bogendoerfer |
75a932 |
skb->protocol = eth_type_trans(skb, adapter->netdev);
|