From patchwork Fri Sep 9 15:17:54 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Hellstrom X-Patchwork-Id: 114109 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 55470B7090 for ; Sat, 10 Sep 2011 01:18:50 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752004Ab1IIPSp (ORCPT ); Fri, 9 Sep 2011 11:18:45 -0400 Received: from mail176c2.megamailservers.com ([69.49.111.76]:45809 "EHLO mail176c2.megamailservers.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750958Ab1IIPSo (ORCPT ); Fri, 9 Sep 2011 11:18:44 -0400 X-POP-User: jan@gaisler.com Received: from localhost.localdomain (gaisler.se [92.33.28.242]) by mail176c2.megamailservers.com (8.13.6/8.13.1) with ESMTP id p89FIZUP027596; Fri, 9 Sep 2011 11:18:36 -0400 From: Daniel Hellstrom To: davem@davemloft.net Cc: netdev@vger.kernel.org, kristoffer@gaisler.com, eric.dumazet@gmail.com Subject: [PATCH 2/2 v2] GRETH: avoid overwrite IP-stack's IP-frags checksum Date: Fri, 9 Sep 2011 17:17:54 +0200 Message-Id: <1315581474-4430-1-git-send-email-daniel@gaisler.com> X-Mailer: git-send-email 1.5.4 X-CSC: 0 X-CHA: v=1.1 cv=2Gf4Xu/7czTJIpW45n6TwY/zr/fxhY4s3JkmIjrDDIY= c=1 sm=1 a=UY-93PCv6p0A:10 a=U62ajLuCel8A:10 a=jXKJviUpWSOlMmIvGrHOfw==:17 a=ebG-ZW-8AAAA:8 a=xuEKLGJUPAzyKrkyvZIA:9 a=cCYF7-FHeg4A:10 a=jXKJviUpWSOlMmIvGrHOfw==:117 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The GRETH GBIT core does not do checksum offloading for IP segmentation. This patch adds a check in the xmit function to determine if the stack has calculated the checksum for us. Signed-off-by: Daniel Hellstrom --- drivers/net/greth.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/greth.c b/drivers/net/greth.c index 22e24a3..6775c24 100644 --- a/drivers/net/greth.c +++ b/drivers/net/greth.c @@ -489,7 +489,8 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) if (nr_frags != 0) status = GRETH_TXBD_MORE; - status |= GRETH_TXBD_CSALL; + if (skb->ip_summed == CHECKSUM_PARTIAL) + status |= GRETH_TXBD_CSALL; status |= skb_headlen(skb) & GRETH_BD_LEN; if (greth->tx_next == GRETH_TXBD_NUM_MASK) status |= GRETH_BD_WR; @@ -512,7 +513,9 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) greth->tx_skbuff[curr_tx] = NULL; bdp = greth->tx_bd_base + curr_tx; - status = GRETH_TXBD_CSALL | GRETH_BD_EN; + status = GRETH_BD_EN; + if (skb->ip_summed == CHECKSUM_PARTIAL) + status |= GRETH_TXBD_CSALL; status |= frag->size & GRETH_BD_LEN; /* Wrap around descriptor ring */