Netdev List
 help / color / mirror / Atom feed
* [PATCH net-next 1/1]  hyperv: Properly handle checksum offload
@ 2014-04-25 18:45 K. Y. Srinivasan
  2014-04-26  0:43 ` Stephen Hemminger
  0 siblings, 1 reply; 6+ messages in thread
From: K. Y. Srinivasan @ 2014-04-25 18:45 UTC (permalink / raw)
  To: davem, netdev, linux-kernel, devel, olaf, apw, jasowang; +Cc: stable

Do checksum offload only if the client of the driver wants checksum to be
offloaded. Also Windows hosts support ip header checksum offload as well -
take advantage of that.

This patch fixes a bug that is exposed in gateway scenarios.


Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Cc: stable@kernel.org
---
 drivers/net/hyperv/netvsc_drv.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 939e3af..706b341 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -467,6 +467,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
 	if (skb_is_gso(skb))
 		goto do_lso;
 
+	if (skb->ip_summed != CHECKSUM_PARTIAL)
+		goto do_send;
+
 	rndis_msg_size += NDIS_CSUM_PPI_SIZE;
 	ppi = init_ppi_data(rndis_msg, NDIS_CSUM_PPI_SIZE,
 			    TCPIP_CHKSUM_PKTINFO);
@@ -474,6 +477,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
 	csum_info = (struct ndis_tcp_ip_checksum_info *)((void *)ppi +
 			ppi->ppi_offset);
 
+	ip_hdr(skb)->check = 0;
+	csum_info->transmit.ip_header_checksum = 1;
+
 	if (net_trans_info & (INFO_IPV4 << 16))
 		csum_info->transmit.is_ipv4 = 1;
 	else
-- 
1.7.4.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-04-26  2:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-25 18:45 [PATCH net-next 1/1] hyperv: Properly handle checksum offload K. Y. Srinivasan
2014-04-26  0:43 ` Stephen Hemminger
2014-04-26  1:15   ` Eric Dumazet
2014-04-26  2:24     ` KY Srinivasan
2014-04-26  2:40       ` KY Srinivasan
2014-04-26  2:23   ` KY Srinivasan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox