From: Mugunthan V N <mugunthanvnm@ti.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: <netdev@vger.kernel.org>, "David S. Miller" <davem@davemloft.net>,
<tglx@linutronix.de>
Subject: Re: [PATCH 2/5] net/cpsw: don't continue if we miss to allocate rx skbs
Date: Tue, 23 Apr 2013 23:11:13 +0530 [thread overview]
Message-ID: <5176C7B9.2020004@ti.com> (raw)
In-Reply-To: <1366738299-21285-3-git-send-email-bigeasy@linutronix.de>
On 4/23/2013 11:01 PM, Sebastian Andrzej Siewior wrote:
> if during "ifconfig up" we run out of mem we continue regardless how
> many skbs we got. In worst case we have zero RX skbs and can't ever
> receive further packets since the RX skbs are never reallocated. If
> cpdma_chan_submit() fails we even leak the skb.
> This patch changes the behavior here:
> If we fail to allocate an skb during bring up we don't continue and
> report that error. Same goes for errors from cpdma_chan_submit().
> While here I changed to __netdev_alloc_skb_ip_align() so GFP_KERNEL can
> be used.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> drivers/net/ethernet/ti/cpsw.c | 35 ++++++++++++++++++++++-------------
> 1 file changed, 22 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index e2ba702..29700fb 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
> @@ -867,6 +867,15 @@ static void cpsw_init_host_port(struct cpsw_priv *priv)
> }
> }
>
> +static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_priv *priv)
> +{
> + if (!slave->phy)
> + return;
> + phy_stop(slave->phy);
> + phy_disconnect(slave->phy);
> + slave->phy = NULL;
> +}
> +
> static int cpsw_ndo_open(struct net_device *ndev)
> {
> struct cpsw_priv *priv = netdev_priv(ndev);
> @@ -912,14 +921,16 @@ static int cpsw_ndo_open(struct net_device *ndev)
> struct sk_buff *skb;
>
> ret = -ENOMEM;
> - skb = netdev_alloc_skb_ip_align(priv->ndev,
> - priv->rx_packet_max);
> + skb = __netdev_alloc_skb_ip_align(priv->ndev,
> + priv->rx_packet_max, GFP_KERNEL);
> if (!skb)
> - break;
> + goto err_cleanup;
> ret = cpdma_chan_submit(priv->rxch, skb, skb->data,
> skb_tailroom(skb), 0, GFP_KERNEL);
> - if (WARN_ON(ret < 0))
> - break;
> + if (ret < 0) {
> + kfree_skb(skb);
> + goto err_cleanup;
> + }
> }
> /* continue even if we didn't manage to submit all
> * receive descs
> @@ -944,15 +955,13 @@ static int cpsw_ndo_open(struct net_device *ndev)
> if (priv->data.dual_emac)
> priv->slaves[priv->emac_port].open_stat = true;
> return 0;
> -}
>
> -static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_priv *priv)
> -{
> - if (!slave->phy)
> - return;
> - phy_stop(slave->phy);
> - phy_disconnect(slave->phy);
> - slave->phy = NULL;
> +err_cleanup:
> + cpdma_ctlr_stop(priv->dma);
> + for_each_slave(priv, cpsw_slave_stop, priv);
> + pm_runtime_put_sync(&priv->pdev->dev);
> + netif_carrier_off(priv->ndev);
> + return ret;
> }
>
> static int cpsw_ndo_stop(struct net_device *ndev)
Acked-by: Mugunthan V N <mugunthanvnm@ti.com>
Regards
Mugunthan V N
next prev parent reply other threads:[~2013-04-23 17:41 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-23 17:31 cpsw queue, v2 Sebastian Andrzej Siewior
2013-04-23 17:31 ` [PATCH 1/5] net/davinci_cpdma: don't check for jiffies with interrupts Sebastian Andrzej Siewior
2013-04-23 17:31 ` [PATCH 2/5] net/cpsw: don't continue if we miss to allocate rx skbs Sebastian Andrzej Siewior
2013-04-23 17:41 ` Mugunthan V N [this message]
2013-04-23 17:31 ` [PATCH 3/5] net/cpsw: don't rely only on netif_running() to check which device is active Sebastian Andrzej Siewior
2013-04-23 17:41 ` Mugunthan V N
2013-04-23 17:31 ` [PATCH 4/5] net/davinci_cpdma: remove unused argument in cpdma_chan_submit() Sebastian Andrzej Siewior
2013-04-23 17:31 ` [PATCH 5/5] net/cpsw: redo rx skb allocation in rx path Sebastian Andrzej Siewior
2013-04-25 8:17 ` cpsw queue, v2 David Miller
-- strict thread matches above, loose matches on Subject: below --
2013-04-17 21:52 my small cpsw queue Sebastian Andrzej Siewior
2013-04-17 21:52 ` [PATCH 2/5] net/cpsw: don't continue if we miss to allocate rx skbs Sebastian Andrzej Siewior
2013-04-18 11:50 ` Mugunthan V N
2013-04-18 12:09 ` Sebastian Andrzej Siewior
2013-04-19 10:40 ` Mugunthan V N
2013-04-22 8:05 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5176C7B9.2020004@ti.com \
--to=mugunthanvnm@ti.com \
--cc=bigeasy@linutronix.de \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.