Driver: Vmxnet3: set CHECKSUM_UNNECESSARY for IPv6 packets
For IPv6, if the device indicates that the checksum is correct, set CHECKSUM_UNNECESSARY. Reported-by: Subbarao Narahari <snarahari@vmware.com> Signed-off-by: Shrikrishna Khare <skhare@vmware.com> Signed-off-by: Jin Heo <heoj@vmware.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
f43bfaeddc
Коммит
f0d437809d
|
@ -1152,12 +1152,16 @@ vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
|
|||
union Vmxnet3_GenericDesc *gdesc)
|
||||
{
|
||||
if (!gdesc->rcd.cnc && adapter->netdev->features & NETIF_F_RXCSUM) {
|
||||
/* typical case: TCP/UDP over IP and both csums are correct */
|
||||
if ((le32_to_cpu(gdesc->dword[3]) & VMXNET3_RCD_CSUM_OK) ==
|
||||
VMXNET3_RCD_CSUM_OK) {
|
||||
if (gdesc->rcd.v4 &&
|
||||
(le32_to_cpu(gdesc->dword[3]) &
|
||||
VMXNET3_RCD_CSUM_OK) == VMXNET3_RCD_CSUM_OK) {
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
|
||||
BUG_ON(gdesc->rcd.frg);
|
||||
} else if (gdesc->rcd.v6 && (le32_to_cpu(gdesc->dword[3]) &
|
||||
(1 << VMXNET3_RCD_TUC_SHIFT))) {
|
||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
|
||||
BUG_ON(!(gdesc->rcd.v4 || gdesc->rcd.v6));
|
||||
BUG_ON(gdesc->rcd.frg);
|
||||
} else {
|
||||
if (gdesc->rcd.csum) {
|
||||
|
|
|
@ -69,10 +69,10 @@
|
|||
/*
|
||||
* Version numbers
|
||||
*/
|
||||
#define VMXNET3_DRIVER_VERSION_STRING "1.4.6.0-k"
|
||||
#define VMXNET3_DRIVER_VERSION_STRING "1.4.7.0-k"
|
||||
|
||||
/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
|
||||
#define VMXNET3_DRIVER_VERSION_NUM 0x01040600
|
||||
#define VMXNET3_DRIVER_VERSION_NUM 0x01040700
|
||||
|
||||
#if defined(CONFIG_PCI_MSI)
|
||||
/* RSS only makes sense if MSI-X is supported. */
|
||||
|
|
Загрузка…
Ссылка в новой задаче