|
@@ -3764,10 +3764,16 @@ static bool e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
|
|
unsigned int i;
|
|
unsigned int i;
|
|
u8 css;
|
|
u8 css;
|
|
u32 cmd_len = E1000_TXD_CMD_DEXT;
|
|
u32 cmd_len = E1000_TXD_CMD_DEXT;
|
|
|
|
+ __be16 protocol;
|
|
|
|
|
|
if (skb->ip_summed != CHECKSUM_PARTIAL)
|
|
if (skb->ip_summed != CHECKSUM_PARTIAL)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+ if (skb->protocol == cpu_to_be16(ETH_P_8021Q))
|
|
|
|
+ protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto;
|
|
|
|
+ else
|
|
|
|
+ protocol = skb->protocol;
|
|
|
|
+
|
|
switch (skb->protocol) {
|
|
switch (skb->protocol) {
|
|
case cpu_to_be16(ETH_P_IP):
|
|
case cpu_to_be16(ETH_P_IP):
|
|
if (ip_hdr(skb)->protocol == IPPROTO_TCP)
|
|
if (ip_hdr(skb)->protocol == IPPROTO_TCP)
|
|
@@ -3780,7 +3786,8 @@ static bool e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
if (unlikely(net_ratelimit()))
|
|
if (unlikely(net_ratelimit()))
|
|
- e_warn("checksum_partial proto=%x!\n", skb->protocol);
|
|
|
|
|
|
+ e_warn("checksum_partial proto=%x!\n",
|
|
|
|
+ be16_to_cpu(protocol));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|