From: Mugunthan V N <mugunthanvnm@ti.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: <netdev@vger.kernel.org>, <tglx@linutronix.de>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH 3/5] net/cpsw: don't rely on netif_running() to check which device is active
Date: Thu, 18 Apr 2013 17:20:34 +0530 [thread overview]
Message-ID: <516FDE0A.70504@ti.com> (raw)
In-Reply-To: <1366235536-15744-4-git-send-email-bigeasy@linutronix.de>
On 4/18/2013 3:22 AM, Sebastian Andrzej Siewior wrote:
> netif_running() reports false before even the ->ndo_stop() callback is
> called. That means if one executes "ifconfig down" and the system
> receives an interrupt before the interrupt source has been disabled we
> hang for always for two reasons:
> - we never disable the interrupt source because devices claim to be
> already inactive (or non-present)
> - since the ISR always reports IRQ_HANDLED the line is never deactivated
> because it looks like the ISR feels respsonsible.
>
> This patch introduces now the ->active field which is set/cleared in
> ndo_open / ndo_stop.
>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> ---
> drivers/net/ethernet/ti/cpsw.c | 26 +++++++++++++++++---------
> 1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index 3b22a36..c32780d 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
> @@ -341,6 +341,7 @@ struct cpsw_priv {
> int host_port;
> struct clk *clk;
> u8 mac_addr[ETH_ALEN];
> + u8 active;
Frame work is providing this feature then why you need to have additional
book keeping in device private?
> struct cpsw_slave *slaves;
> struct cpdma_ctlr *dma;
> struct cpdma_chan *txch, *rxch;
> @@ -511,19 +512,24 @@ static irqreturn_t cpsw_interrupt(int irq, void *dev_id)
> {
> struct cpsw_priv *priv = dev_id;
>
> - if (likely(netif_running(priv->ndev))) {
> + if (priv->active) {
> cpsw_intr_disable(priv);
> cpsw_disable_irq(priv);
> napi_schedule(&priv->napi);
> - } else {
> - priv = cpsw_get_slave_priv(priv, 1);
> - if (likely(priv) && likely(netif_running(priv->ndev))) {
> - cpsw_intr_disable(priv);
> - cpsw_disable_irq(priv);
> - napi_schedule(&priv->napi);
> - }
> + return IRQ_HANDLED;
> + }
> +
> + priv = cpsw_get_slave_priv(priv, 1);
> + if (!priv)
> + return IRQ_NONE;
> +
> + if (priv->active) {
> + cpsw_intr_disable(priv);
> + cpsw_disable_irq(priv);
> + napi_schedule(&priv->napi);
> + return IRQ_HANDLED;
> }
> - return IRQ_HANDLED;
> + return IRQ_NONE;
> }
>
> static int cpsw_poll(struct napi_struct *napi, int budget)
> @@ -937,6 +943,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
> cpsw_set_coalesce(ndev, &coal);
> }
>
> + priv->active = 1;
> cpdma_ctlr_start(priv->dma);
> cpsw_intr_enable(priv);
> napi_enable(&priv->napi);
> @@ -980,6 +987,7 @@ static int cpsw_ndo_stop(struct net_device *ndev)
> pm_runtime_put_sync(&priv->pdev->dev);
> if (priv->data.dual_emac)
> priv->slaves[priv->emac_port].open_stat = false;
> + priv->active = 0;
> return 0;
> }
>
Regards
Mugunthan V N
next prev parent reply other threads:[~2013-04-18 11:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-17 21:52 my small cpsw queue Sebastian Andrzej Siewior
2013-04-17 21:52 ` [PATCH 1/5] net/davinci_cpdma: don't check for jiffies with interrupts Sebastian Andrzej Siewior
2013-04-18 11:49 ` Mugunthan V N
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
2013-04-17 21:52 ` [PATCH 3/5] net/cpsw: don't rely on netif_running() to check which device is active Sebastian Andrzej Siewior
2013-04-18 11:50 ` Mugunthan V N [this message]
2013-04-18 12:10 ` Sebastian Andrzej Siewior
2013-04-19 10:35 ` Mugunthan V N
2013-04-22 8:30 ` [PATCH 3/5 v2] net/cpsw: don't rely only " Sebastian Andrzej Siewior
2013-04-22 9:14 ` Mugunthan V N
2013-04-22 9:30 ` Sebastian Andrzej Siewior
2013-04-22 9:40 ` Mugunthan V N
2013-04-22 9:49 ` Sebastian Andrzej Siewior
2013-04-22 10:12 ` Mugunthan V N
2013-04-22 10:19 ` Sebastian Andrzej Siewior
2013-04-22 19:21 ` David Miller
2013-04-19 13:10 ` [PATCH 3/5] net/cpsw: don't rely " Sergei Shtylyov
2013-04-22 8:33 ` Sebastian Andrzej Siewior
2013-04-17 21:52 ` [PATCH 4/5] net/davinci_cpdma: remove unused argument in cpdma_chan_submit() Sebastian Andrzej Siewior
2013-04-18 11:51 ` Mugunthan V N
2013-04-17 21:52 ` [PATCH 5/5] net/cpsw: redo rx skb allocation in rx path Sebastian Andrzej Siewior
2013-04-18 11:50 ` Mugunthan V N
2013-04-18 12:13 ` Sebastian Andrzej Siewior
2013-04-19 10:28 ` Mugunthan V N
2013-04-18 14:59 ` Eric Dumazet
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=516FDE0A.70504@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.