From patchwork Wed Mar 15 20:27:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iyappan Subramanian X-Patchwork-Id: 739428 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 3vk36B1fHPz9ryk for ; Thu, 16 Mar 2017 07:26:26 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=apm.com header.i=@apm.com header.b="HCdr7pP2"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753876AbdCOU0Z (ORCPT ); Wed, 15 Mar 2017 16:26:25 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:36222 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753840AbdCOU0T (ORCPT ); Wed, 15 Mar 2017 16:26:19 -0400 Received: by mail-pf0-f170.google.com with SMTP id o126so13690497pfb.3 for ; Wed, 15 Mar 2017 13:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apm.com; s=apm; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rXKHPF6czZPq/GNGiGFSM2o56gDTE/cB8olf9WOF/xQ=; b=HCdr7pP2wj+hDGPJjg7frBzCwTZlPZGjq8wyeFdWvd1NNd8B3C9r5smMGZEu+Tqobd bvBO2HH5Mriatk5OYKe7YkCZyCmpimy2mOKu3zn1dr1Y44JuXiYDwt2JN8r7L9cz7jzN ET9cNto91x24G3dK8doaG1icGJ9AC7NwkQvLc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rXKHPF6czZPq/GNGiGFSM2o56gDTE/cB8olf9WOF/xQ=; b=pP0m0BaH9qzx9DiNKmJHI76iGgJOS87if7go3zykiLBmmKI9P552fvrE0beYxI6yJ9 eE4xhjGEJtBuLBHGcU602qt2ehl9nc/HfYtFjLm8SGeXz+vZMJIecMGdxVU8potVwmLw 3vmcsChJ1+zkJPmGslVupINQ+5pIEstYXEJg/wEla+z+8QK2o/RBwaF5GrUzsB8BLQ+5 +wKi1DQmXj1M+opCICc+aKNVs6JarrvtbKH5WEodUdpiUvq1xFEKFrxEBmAu6NNjp4yB 9Z+iPkc0k+3byHO6e9PfykVNdeAn6Iajvnnsgcx4dRAq25SpzxUTR4mPRCQ5TYUBPCLb 7IcQ== X-Gm-Message-State: AFeK/H3Sb2HpuEy8ZDOM9HzOrvUMBKUUw7ui6bk+mYzntg7cHO0Brn8giEBvuMtQ2zjuomgQ X-Received: by 10.99.101.197 with SMTP id z188mr5873640pgb.164.1489609568689; Wed, 15 Mar 2017 13:26:08 -0700 (PDT) Received: from isubrama-dev.amcc.com ([206.80.4.98]) by smtp.gmail.com with ESMTPSA id r67sm5922281pfb.125.2017.03.15.13.26.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 15 Mar 2017 13:26:08 -0700 (PDT) From: Iyappan Subramanian To: davem@davemloft.net, netdev@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, patches@apm.com, kchudgar@apm.com, qnguyen@apm.com, Iyappan Subramanian Subject: [PATCH net-next 4/7] drivers: net: xgene: Fix Rx checksum validation logic Date: Wed, 15 Mar 2017 13:27:18 -0700 Message-Id: <1489609641-31557-5-git-send-email-isubramanian@apm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1489609641-31557-1-git-send-email-isubramanian@apm.com> References: <1489609641-31557-1-git-send-email-isubramanian@apm.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch fixes Rx checksum validation logic and adds NETIF_F_RXCSUM flag. Signed-off-by: Iyappan Subramanian --- drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index ec43278..e881365 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -601,14 +601,24 @@ static netdev_tx_t xgene_enet_start_xmit(struct sk_buff *skb, return NETDEV_TX_OK; } -static void xgene_enet_skip_csum(struct sk_buff *skb) +static void xgene_enet_rx_csum(struct sk_buff *skb) { + struct net_device *ndev = skb->dev; struct iphdr *iph = ip_hdr(skb); - if (!ip_is_fragment(iph) || - (iph->protocol != IPPROTO_TCP && iph->protocol != IPPROTO_UDP)) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - } + if (!(ndev->features & NETIF_F_RXCSUM)) + return; + + if (skb->protocol != htons(ETH_P_IP)) + return; + + if (ip_is_fragment(iph)) + return; + + if (iph->protocol != IPPROTO_TCP && iph->protocol != IPPROTO_UDP) + return; + + skb->ip_summed = CHECKSUM_UNNECESSARY; } static void xgene_enet_free_pagepool(struct xgene_enet_desc_ring *buf_pool, @@ -729,10 +739,7 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring, skip_jumbo: skb_checksum_none_assert(skb); skb->protocol = eth_type_trans(skb, ndev); - if (likely((ndev->features & NETIF_F_IP_CSUM) && - skb->protocol == htons(ETH_P_IP))) { - xgene_enet_skip_csum(skb); - } + xgene_enet_rx_csum(skb); rx_ring->rx_packets++; rx_ring->rx_bytes += datalen; @@ -2039,7 +2046,7 @@ static int xgene_enet_probe(struct platform_device *pdev) xgene_enet_setup_ops(pdata); if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { - ndev->features |= NETIF_F_TSO; + ndev->features |= NETIF_F_TSO | NETIF_F_RXCSUM; spin_lock_init(&pdata->mss_lock); } ndev->hw_features = ndev->features;