Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932316Ab0BHCzU (ORCPT ); Sun, 7 Feb 2010 21:55:20 -0500 Received: from rex.securecomputing.com ([203.24.151.4]:43565 "EHLO cyberguard.com.au" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932174Ab0BHCzS (ORCPT ); Sun, 7 Feb 2010 21:55:18 -0500 Message-ID: <4B6F7D3F.2020303@snapgear.com> Date: Mon, 08 Feb 2010 12:55:59 +1000 From: Greg Ungerer User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: Amit Kucheria CC: List Linux Kernel , Rob Herring , davem@davemloft.net, netdev@vger.kernel.org, s.hauer@pengutronix.de, gerg@uclinux.org, u.kleine-koenig@pengutronix.de, amit.kucheria@verdurent.com Subject: Re: [PATCH 1/3] fec: fix uninitialized rx buffer usage References: <39ec69d1e3af809dcf210f4757ca2385efb5f9bc.1265396105.git.amit.kucheria@canonical.com> In-Reply-To: <39ec69d1e3af809dcf210f4757ca2385efb5f9bc.1265396105.git.amit.kucheria@canonical.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3803 Lines: 124 Amit Kucheria wrote: > From: Rob Herring > > The fec driver was enabling receive buffer descriptor without allocating > the buffers. Make sure the buffer descriptors are initialized to not > start receiving packets. > > Open also calls fec_restart after the rx buffers are allocated. With the code > in fec_restart, it zeroes out the buffer descriptors that have just been > setup. > > Signed-off-by: Rob Herring > Signed-off-by: Amit Kucheria > Acked-by: Grant Likely Acked-by: Greg Ungerer > --- > drivers/net/fec.c | 57 +++++++++++++++++++++++++++-------------------------- > 1 files changed, 29 insertions(+), 28 deletions(-) > > diff --git a/drivers/net/fec.c b/drivers/net/fec.c > index 16a1d58..9a8743d 100644 > --- a/drivers/net/fec.c > +++ b/drivers/net/fec.c > @@ -1658,6 +1658,7 @@ static int fec_enet_init(struct net_device *dev, int index) > { > struct fec_enet_private *fep = netdev_priv(dev); > struct bufdesc *cbd_base; > + struct bufdesc *bdp; > int i; > > /* Allocate memory for buffer descriptors. */ > @@ -1710,6 +1711,34 @@ static int fec_enet_init(struct net_device *dev, int index) > /* Set MII speed to 2.5 MHz */ > fep->phy_speed = ((((clk_get_rate(fep->clk) / 2 + 4999999) > / 2500000) / 2) & 0x3F) << 1; > + > + /* Initialize the receive buffer descriptors. */ > + bdp = fep->rx_bd_base; > + for (i = 0; i < RX_RING_SIZE; i++) { > + > + /* Initialize the BD for every fragment in the page. */ > + bdp->cbd_sc = 0; > + bdp++; > + } > + > + /* Set the last buffer to wrap */ > + bdp--; > + bdp->cbd_sc |= BD_SC_WRAP; > + > + /* ...and the same for transmit */ > + bdp = fep->tx_bd_base; > + for (i = 0; i < TX_RING_SIZE; i++) { > + > + /* Initialize the BD for every fragment in the page. */ > + bdp->cbd_sc = 0; > + bdp->cbd_bufaddr = 0; > + bdp++; > + } > + > + /* Set the last buffer to wrap */ > + bdp--; > + bdp->cbd_sc |= BD_SC_WRAP; > + > fec_restart(dev, 0); > > /* Queue up command to detect the PHY and initialize the > @@ -1730,7 +1759,6 @@ static void > fec_restart(struct net_device *dev, int duplex) > { > struct fec_enet_private *fep = netdev_priv(dev); > - struct bufdesc *bdp; > int i; > > /* Whack a reset. We should wait for this. */ > @@ -1768,33 +1796,6 @@ fec_restart(struct net_device *dev, int duplex) > } > } > > - /* Initialize the receive buffer descriptors. */ > - bdp = fep->rx_bd_base; > - for (i = 0; i < RX_RING_SIZE; i++) { > - > - /* Initialize the BD for every fragment in the page. */ > - bdp->cbd_sc = BD_ENET_RX_EMPTY; > - bdp++; > - } > - > - /* Set the last buffer to wrap */ > - bdp--; > - bdp->cbd_sc |= BD_SC_WRAP; > - > - /* ...and the same for transmit */ > - bdp = fep->tx_bd_base; > - for (i = 0; i < TX_RING_SIZE; i++) { > - > - /* Initialize the BD for every fragment in the page. */ > - bdp->cbd_sc = 0; > - bdp->cbd_bufaddr = 0; > - bdp++; > - } > - > - /* Set the last buffer to wrap */ > - bdp--; > - bdp->cbd_sc |= BD_SC_WRAP; > - > /* Enable MII mode */ > if (duplex) { > /* MII enable / FD enable */ -- ------------------------------------------------------------------------ Greg Ungerer -- Principal Engineer EMAIL: gerg@snapgear.com SnapGear Group, McAfee PHONE: +61 7 3435 2888 8 Gardner Close FAX: +61 7 3217 5323 Milton, QLD, 4064, Australia WEB: http://www.SnapGear.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/