bnx2x: fix tunneling CSUM calculation
authorDmitry Kravkov <dmitry@broadcom.com>
Thu, 11 Jul 2013 12:48:21 +0000 (15:48 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Jul 2013 18:48:06 +0000 (11:48 -0700)
Since commit c957d09ffda417f6c8e3d1f10e2b05228607d6d7
"bnx2x: Remove sparse and coccinelle warnings"
driver provided wrong partial csum for HW in tunneing
scenarios.

Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Alexander Duyck <alexander.h.duyck@intel.com>
CC: Pravin Shelar <pshelar@nicira.com>
CC: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Tested-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

index 3353efe79194c1d9f3c8b7e072543bf1c22fecf3..ee350bde1818cc38c4a20a0db70a466bf158ee2e 100644 (file)
@@ -3543,9 +3543,9 @@ static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb,
        /* outer IP header info */
        if (xmit_type & XMIT_CSUM_V4) {
                struct iphdr *iph = ip_hdr(skb);
-               u16 csum = (__force u16)(~iph->check) -
-                          (__force u16)iph->tot_len -
-                          (__force u16)iph->frag_off;
+               u32 csum = (__force u32)(~iph->check) -
+                          (__force u32)iph->tot_len -
+                          (__force u32)iph->frag_off;
 
                pbd2->fw_ip_csum_wo_len_flags_frag =
                        bswab16(csum_fold((__force __wsum)csum));