From patchwork Fri Mar 13 17:07:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 449993 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 A52F1140182 for ; Sat, 14 Mar 2015 04:08:59 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=gmail.com header.i=@gmail.com header.b=mMC5VXS9; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753489AbbCMRIy (ORCPT ); Fri, 13 Mar 2015 13:08:54 -0400 Received: from mail-qc0-f171.google.com ([209.85.216.171]:45298 "EHLO mail-qc0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752489AbbCMRIU (ORCPT ); Fri, 13 Mar 2015 13:08:20 -0400 Received: by qcwb13 with SMTP id b13so28128157qcw.12 for ; Fri, 13 Mar 2015 10:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=30DCUJ4kXnfaRV1CA8Qb1jW4tL5fpRipq7319S5Rmm4=; b=mMC5VXS9OUxeC5vI31RC/2IcJ0Wx0Xv2jdxkyC1FH0K/vLCSnLVDZnUaRqYevOr1Zs dGv3xbQW2PA56uL9X0PzM0B27GAow0dt7M14qJynyP7Xy4648KwFoOIHT71iSMaQ+QBs XwjGTuVO1lGRDV0hqD4DSPipY1XescQY+B14W1tYD2Vr1oas9XYsEbZmpHvoMJSt86ew lkYUkeKaKb+UEbjT1sU2Mvffq9NqrxuCLZfhUf4VXJuFuSclTNV/TlHx9LVL9gVN6KoR IbQkSKmTbch3b1xCShShdb/JLemqPPzr7iKIy/+YWMV5vH5DR/rS9YOh2VL4Oa1dlOiz r8zg== X-Received: by 10.55.23.82 with SMTP id i79mr56299573qkh.15.1426266500164; Fri, 13 Mar 2015 10:08:20 -0700 (PDT) Received: from localhost.localdomain ([177.194.98.53]) by mx.google.com with ESMTPSA id n20sm1756092qgd.48.2015.03.13.10.08.17 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 13 Mar 2015 10:08:19 -0700 (PDT) From: Fabio Estevam To: davem@davemloft.net Cc: b38611@freescale.com, netdev@vger.kernel.org, rockford@yandex.ru, Fabio Estevam Subject: [PATCH net] Revert "net: fec: fix the warning found by dma debug" Date: Fri, 13 Mar 2015 14:07:54 -0300 Message-Id: <1426266474-6018-1-git-send-email-festevam@gmail.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Fabio Estevam This reverts commit 2b995f63987013bacde99168218f9c7b252bdcf1. Панов Андрей reported the following regression: "Commit 2b995f63987013bacde99168218f9c7b252bdcf1 in 4.0.0-rc3 introduces a nasty bug in transmit, corrupting packets. To reproduce: $ dd if=/dev/zero of=zeros bs=1M count=20 $ md5sum -b zeros 8f4e33f3dc3e414ff94e5fb6905cba8c *zeros This checksum is correct. Copy file "zeros" to another host with NFS, and it gets corrupted, checksum is changed. File should be big, small amounts of transmit isn't affected. I use an i.MX6 Quad board. If this commit is reverted, all works fine." Reported-by: Панов Андрей Signed-off-by: Fabio Estevam --- drivers/net/ethernet/freescale/fec_main.c | 34 ++++++++++--------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 787db50..78e1ce0 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1189,13 +1189,12 @@ static void fec_enet_tx_queue(struct net_device *ndev, u16 queue_id) { struct fec_enet_private *fep; - struct bufdesc *bdp, *bdp_t; + struct bufdesc *bdp; unsigned short status; struct sk_buff *skb; struct fec_enet_priv_tx_q *txq; struct netdev_queue *nq; int index = 0; - int i, bdnum; int entries_free; fep = netdev_priv(ndev); @@ -1216,29 +1215,18 @@ fec_enet_tx_queue(struct net_device *ndev, u16 queue_id) if (bdp == txq->cur_tx) break; - bdp_t = bdp; - bdnum = 1; - index = fec_enet_get_bd_index(txq->tx_bd_base, bdp_t, fep); - skb = txq->tx_skbuff[index]; - while (!skb) { - bdp_t = fec_enet_get_nextdesc(bdp_t, fep, queue_id); - index = fec_enet_get_bd_index(txq->tx_bd_base, bdp_t, fep); - skb = txq->tx_skbuff[index]; - bdnum++; - } - if (skb_shinfo(skb)->nr_frags && - (status = bdp_t->cbd_sc) & BD_ENET_TX_READY) - break; + index = fec_enet_get_bd_index(txq->tx_bd_base, bdp, fep); - for (i = 0; i < bdnum; i++) { - if (!IS_TSO_HEADER(txq, bdp->cbd_bufaddr)) - dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr, - bdp->cbd_datlen, DMA_TO_DEVICE); - bdp->cbd_bufaddr = 0; - if (i < bdnum - 1) - bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); - } + skb = txq->tx_skbuff[index]; txq->tx_skbuff[index] = NULL; + if (!IS_TSO_HEADER(txq, bdp->cbd_bufaddr)) + dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr, + bdp->cbd_datlen, DMA_TO_DEVICE); + bdp->cbd_bufaddr = 0; + if (!skb) { + bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); + continue; + } /* Check for errors. */ if (status & (BD_ENET_TX_HB | BD_ENET_TX_LC |