mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
vmxnet3: move rss code block under eop descriptor
Commitb3973bb400
("vmxnet3: set correct hash type based on rss information") added hashType information into skb. However, rssType field is populated for eop descriptor. This can lead to incorrectly reporting of hashType for packets which use multiple rx descriptors. Multiple rx descriptors are used for Jumbo frame or LRO packets, which can hit this issue. This patch moves the RSS codeblock under eop descritor. Cc: stable@vger.kernel.org Fixes:b3973bb400
("vmxnet3: set correct hash type based on rss information") Signed-off-by: Ronak Doshi <doshir@vmware.com> Acked-by: Peng Li <lpeng@vmware.com> Acked-by: Guolin Yang <gyang@vmware.com> Link: https://lore.kernel.org/r/20230208223900.5794-1-doshir@vmware.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6e77a5a4af
commit
ec76d0c2da
@ -1546,31 +1546,6 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
|
||||
rxd->len = rbi->len;
|
||||
}
|
||||
|
||||
#ifdef VMXNET3_RSS
|
||||
if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
|
||||
(adapter->netdev->features & NETIF_F_RXHASH)) {
|
||||
enum pkt_hash_types hash_type;
|
||||
|
||||
switch (rcd->rssType) {
|
||||
case VMXNET3_RCD_RSS_TYPE_IPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_IPV6:
|
||||
hash_type = PKT_HASH_TYPE_L3;
|
||||
break;
|
||||
case VMXNET3_RCD_RSS_TYPE_TCPIPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_TCPIPV6:
|
||||
case VMXNET3_RCD_RSS_TYPE_UDPIPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_UDPIPV6:
|
||||
hash_type = PKT_HASH_TYPE_L4;
|
||||
break;
|
||||
default:
|
||||
hash_type = PKT_HASH_TYPE_L3;
|
||||
break;
|
||||
}
|
||||
skb_set_hash(ctx->skb,
|
||||
le32_to_cpu(rcd->rssHash),
|
||||
hash_type);
|
||||
}
|
||||
#endif
|
||||
skb_record_rx_queue(ctx->skb, rq->qid);
|
||||
skb_put(ctx->skb, rcd->len);
|
||||
|
||||
@ -1653,6 +1628,31 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
|
||||
u32 mtu = adapter->netdev->mtu;
|
||||
skb->len += skb->data_len;
|
||||
|
||||
#ifdef VMXNET3_RSS
|
||||
if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE &&
|
||||
(adapter->netdev->features & NETIF_F_RXHASH)) {
|
||||
enum pkt_hash_types hash_type;
|
||||
|
||||
switch (rcd->rssType) {
|
||||
case VMXNET3_RCD_RSS_TYPE_IPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_IPV6:
|
||||
hash_type = PKT_HASH_TYPE_L3;
|
||||
break;
|
||||
case VMXNET3_RCD_RSS_TYPE_TCPIPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_TCPIPV6:
|
||||
case VMXNET3_RCD_RSS_TYPE_UDPIPV4:
|
||||
case VMXNET3_RCD_RSS_TYPE_UDPIPV6:
|
||||
hash_type = PKT_HASH_TYPE_L4;
|
||||
break;
|
||||
default:
|
||||
hash_type = PKT_HASH_TYPE_L3;
|
||||
break;
|
||||
}
|
||||
skb_set_hash(skb,
|
||||
le32_to_cpu(rcd->rssHash),
|
||||
hash_type);
|
||||
}
|
||||
#endif
|
||||
vmxnet3_rx_csum(adapter, skb,
|
||||
(union Vmxnet3_GenericDesc *)rcd);
|
||||
skb->protocol = eth_type_trans(skb, adapter->netdev);
|
||||
|
Loading…
Reference in New Issue
Block a user