From patchwork Wed Apr 6 02:26:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Troy Kisky X-Patchwork-Id: 606814 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 3qfqR74sZPz9t5g for ; Wed, 6 Apr 2016 12:28:51 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=boundarydevices-com.20150623.gappssmtp.com header.i=@boundarydevices-com.20150623.gappssmtp.com header.b=hDqPsGHH; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760451AbcDFC2q (ORCPT ); Tue, 5 Apr 2016 22:28:46 -0400 Received: from mail-pa0-f48.google.com ([209.85.220.48]:32812 "EHLO mail-pa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1760278AbcDFC2i (ORCPT ); Tue, 5 Apr 2016 22:28:38 -0400 Received: by mail-pa0-f48.google.com with SMTP id zm5so22822029pac.0 for ; Tue, 05 Apr 2016 19:28:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=boundarydevices-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jlZH6TrSOl6sDQw2HazMwdL4Bt5lgUlpAR9QHagGWrY=; b=hDqPsGHHYDhilj6qdTTJDn2zd+JiHSGmodOXcbvpjIEG1zsqBsTZkXgiqlYWKEp1b1 pR5cw8Ao41Ch3CGJjOIRTpQJXVSggGBMd4i+ALfnzcIt7VWVWjSRKcPmNPoGpBPwzJ7h xPkQjOJd2xKI7dAjJTBh1mHn0UxExhZNu75Mqid6cqYHxGntD3zVBqhuGR0kSb3xzUHc Zkxuj4FLSV1kv4r+Jr92sImyLiPewP8qy6XohgxwZBCUnaxZtshgSF7EqJio59zS9XbX 153xnb+9x7hnI22gZ+VjF6kEuPS+x44zhJQa5SaDAEJ832jbYnYjeNIt48h068J/Ms3d 9viA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jlZH6TrSOl6sDQw2HazMwdL4Bt5lgUlpAR9QHagGWrY=; b=QEgYKXLEdR2Nn5Tr0b00EubUqICYVnPJGa1f6loxRNvCJF1IZvul133dcN9uz9dHJT AwcBRz/GQbassYp9xd22DYZn7HM+fM7FAxabo8u8aCV2/e0T5q1a2BognZYjmNyT60wl dzXxHWM0DIiolf9b447P6VCTnqm1eMzjR+cgQn5xLdKaUOqBeqtD8Ja/IZPlZBSr67r0 j6WMEZvsTF7qKdNyNjscTZnQIDIrJWidkKiLbk6cPLJGiTZUoY4Xxuitp76HcraDoZqa y9NBT6LAc8S3WtEQ0WdMIjMA3LtZaNjTiaqVHKqOmdJThO2sxoZbGfE6Qor272mhpiac BEkQ== X-Gm-Message-State: AD7BkJJc7cWIbb6h39SLlu4QMWdbEx16aPyNlDVoE3mAPVHrIvI/QQ6EWMyqIhYXq3U/2A== X-Received: by 10.66.147.103 with SMTP id tj7mr67291803pab.72.1459909712094; Tue, 05 Apr 2016 19:28:32 -0700 (PDT) Received: from localhost.localdomain (wsip-70-184-93-199.ph.ph.cox.net. [70.184.93.199]) by smtp.googlemail.com with ESMTPSA id l14sm528682pfi.23.2016.04.05.19.28.30 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 05 Apr 2016 19:28:31 -0700 (PDT) From: Troy Kisky To: netdev@vger.kernel.org, davem@davemloft.net, fugang.duan@nxp.com, lznuaa@gmail.com Cc: fabio.estevam@nxp.com, l.stach@pengutronix.de, andrew@lunn.ch, tremyfr@gmail.com, gerg@uclinux.org, linux-arm-kernel@lists.infradead.org, johannes@sipsolutions.net, stillcompiling@gmail.com, sergei.shtylyov@cogentembedded.com, arnd@arndb.de, Troy Kisky Subject: [PATCH net-next V3 14/16] net: fec: create subroutine reset_tx_queue Date: Tue, 5 Apr 2016 19:26:00 -0700 Message-Id: <1459909562-22865-15-git-send-email-troy.kisky@boundarydevices.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1459909562-22865-1-git-send-email-troy.kisky@boundarydevices.com> References: <1459909562-22865-1-git-send-email-troy.kisky@boundarydevices.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Create subroutine reset_tx_queue to have one place to release any queued tx skbs. Signed-off-by: Troy Kisky --- v3: change commit message --- drivers/net/ethernet/freescale/fec_main.c | 50 +++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 445443d..a38acf2 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -752,12 +752,33 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev) return NETDEV_TX_OK; } +static void reset_tx_queue(struct fec_enet_private *fep, + struct fec_enet_priv_tx_q *txq) +{ + struct bufdesc *bdp = txq->bd.base; + unsigned int i; + + txq->bd.cur = bdp; + for (i = 0; i < txq->bd.ring_size; i++) { + /* Initialize the BD for every fragment in the page. */ + if (txq->tx_skbuff[i]) { + dev_kfree_skb_any(txq->tx_skbuff[i]); + txq->tx_skbuff[i] = NULL; + } + bdp->cbd_bufaddr = cpu_to_fec32(0); + bdp->cbd_sc = cpu_to_fec16((bdp == txq->bd.last) ? + BD_SC_WRAP : 0); + bdp = fec_enet_get_nextdesc(bdp, &txq->bd); + } + bdp = fec_enet_get_prevdesc(bdp, &txq->bd); + txq->dirty_tx = bdp; +} + /* Init RX & TX buffer descriptors */ static void fec_enet_bd_init(struct net_device *dev) { struct fec_enet_private *fep = netdev_priv(dev); - struct fec_enet_priv_tx_q *txq; struct fec_enet_priv_rx_q *rxq; struct bufdesc *bdp; unsigned int i; @@ -780,26 +801,8 @@ static void fec_enet_bd_init(struct net_device *dev) rxq->bd.cur = rxq->bd.base; } - for (q = 0; q < fep->num_tx_queues; q++) { - /* ...and the same for transmit */ - txq = fep->tx_queue[q]; - bdp = txq->bd.base; - txq->bd.cur = bdp; - - for (i = 0; i < txq->bd.ring_size; i++) { - /* Initialize the BD for every fragment in the page. */ - if (txq->tx_skbuff[i]) { - dev_kfree_skb_any(txq->tx_skbuff[i]); - txq->tx_skbuff[i] = NULL; - } - bdp->cbd_bufaddr = cpu_to_fec32(0); - bdp->cbd_sc = cpu_to_fec16((bdp == txq->bd.last) ? - BD_SC_WRAP : 0); - bdp = fec_enet_get_nextdesc(bdp, &txq->bd); - } - bdp = fec_enet_get_prevdesc(bdp, &txq->bd); - txq->dirty_tx = bdp; - } + for (q = 0; q < fep->num_tx_queues; q++) + reset_tx_queue(fep, fep->tx_queue[q]); } static void fec_enet_active_rxring(struct net_device *ndev) @@ -2648,13 +2651,10 @@ static void fec_enet_free_buffers(struct net_device *ndev) for (q = 0; q < fep->num_tx_queues; q++) { txq = fep->tx_queue[q]; - bdp = txq->bd.base; + reset_tx_queue(fep, txq); for (i = 0; i < txq->bd.ring_size; i++) { kfree(txq->tx_bounce[i]); txq->tx_bounce[i] = NULL; - skb = txq->tx_skbuff[i]; - txq->tx_skbuff[i] = NULL; - dev_kfree_skb(skb); } } }