i40e/i40evf: fix extension header csum logic
authorJesse Brandeburg <jesse.brandeburg@intel.com>
Wed, 9 Jul 2014 07:46:13 +0000 (07:46 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 24 Jul 2014 10:47:28 +0000 (03:47 -0700)
The hardware design requires that the driver avoid indicating
checksum offload success on some ipv6 frames with extension
headers.

The code needs to just check for the IPV6EXADD bit and if
it is set punt the checksum to the stack.  I don't know why
the code was checking TCP on inner protocol, as that code
doesn't make any sense to me but seems wrong, so remove it.

Change-ID: I10d3aacdbb1819fb60b4b0eb80e6cc67ef2c9599
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-By: Jim Young <jamesx.m.young@intel.com>
Tested-by: Sibai Li <sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/i40evf/i40e_txrx.c

index 989866af26e5edeaa271ee693bb3286331e27a10..d26d6836689da4d3febaf686d76fe1fd58bb6e02 100644 (file)
@@ -1237,8 +1237,6 @@ static inline void i40e_rx_checksum(struct i40e_vsi *vsi,
 
        /* likely incorrect csum if alternate IP extension headers found */
        if (ipv6 &&
-           decoded.inner_prot == I40E_RX_PTYPE_INNER_PROT_TCP &&
-           rx_error & (1 << I40E_RX_DESC_ERROR_L4E_SHIFT) &&
            rx_status & (1 << I40E_RX_DESC_STATUS_IPV6EXADD_SHIFT))
                /* don't increment checksum err here, non-fatal err */
                return;
index b342f212e91fb04bf218cacff06d19b9f1529589..79bf96ca648954b390dbf60728ae687181292097 100644 (file)
@@ -773,8 +773,6 @@ static inline void i40e_rx_checksum(struct i40e_vsi *vsi,
 
        /* likely incorrect csum if alternate IP extension headers found */
        if (ipv6 &&
-           decoded.inner_prot == I40E_RX_PTYPE_INNER_PROT_TCP &&
-           rx_error & (1 << I40E_RX_DESC_ERROR_L4E_SHIFT) &&
            rx_status & (1 << I40E_RX_DESC_STATUS_IPV6EXADD_SHIFT))
                /* don't increment checksum err here, non-fatal err */
                return;