* [net PATCH v2 1/1] drivers: net: cpsw: fix disabling of tx interrupt in rx isr
@ 2015-07-08 9:05 Mugunthan V N
2015-07-09 21:54 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Mugunthan V N @ 2015-07-08 9:05 UTC (permalink / raw)
To: netdev; +Cc: davem, Mugunthan V N, Felipe Balbi, stable
In commit 'c03abd84634d ("net: ethernet: cpsw: don't requests
IRQs we don't use")', common isr is split into tx and rx, but
in rx isr tx interrupt is also disabledi in cpsw_disable_irq().
So tx interrupts are not handled during rx interrupts and rx
napi completion and results in poor tx performance by 40Mbps.
Fixing by disabling only rx interrupt in rx isr.
Cc: Felipe Balbi <balbi@ti.com>
Cc: <stable@vger.kernel.org> # v4.0+
Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
---
Changes from initial version:
* Modified only the commit message as commented by Balbi it is
not a regression and the patch improves tx performance
---
drivers/net/ethernet/ti/cpsw.c | 19 +++----------------
1 file changed, 3 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index e778703..f335bf1 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -138,19 +138,6 @@ do { \
#define CPSW_CMINTMAX_INTVL (1000 / CPSW_CMINTMIN_CNT)
#define CPSW_CMINTMIN_INTVL ((1000 / CPSW_CMINTMAX_CNT) + 1)
-#define cpsw_enable_irq(priv) \
- do { \
- u32 i; \
- for (i = 0; i < priv->num_irqs; i++) \
- enable_irq(priv->irqs_table[i]); \
- } while (0)
-#define cpsw_disable_irq(priv) \
- do { \
- u32 i; \
- for (i = 0; i < priv->num_irqs; i++) \
- disable_irq_nosync(priv->irqs_table[i]); \
- } while (0)
-
#define cpsw_slave_index(priv) \
((priv->data.dual_emac) ? priv->emac_port : \
priv->data.active_slave)
@@ -783,7 +770,7 @@ static irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
cpsw_intr_disable(priv);
if (priv->irq_enabled == true) {
- cpsw_disable_irq(priv);
+ disable_irq_nosync(priv->irqs_table[0]);
priv->irq_enabled = false;
}
@@ -819,7 +806,7 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
prim_cpsw = cpsw_get_slave_priv(priv, 0);
if (prim_cpsw->irq_enabled == false) {
prim_cpsw->irq_enabled = true;
- cpsw_enable_irq(priv);
+ enable_irq(priv->irqs_table[0]);
}
}
@@ -1335,7 +1322,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
if (prim_cpsw->irq_enabled == false) {
if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) {
prim_cpsw->irq_enabled = true;
- cpsw_enable_irq(prim_cpsw);
+ enable_irq(prim_cpsw->irqs_table[0]);
}
}
--
2.5.0.rc0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [net PATCH v2 1/1] drivers: net: cpsw: fix disabling of tx interrupt in rx isr
2015-07-08 9:05 [net PATCH v2 1/1] drivers: net: cpsw: fix disabling of tx interrupt in rx isr Mugunthan V N
@ 2015-07-09 21:54 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2015-07-09 21:54 UTC (permalink / raw)
To: mugunthanvnm; +Cc: netdev, balbi, stable
From: Mugunthan V N <mugunthanvnm@ti.com>
Date: Wed, 8 Jul 2015 14:35:22 +0530
> In commit 'c03abd84634d ("net: ethernet: cpsw: don't requests
> IRQs we don't use")', common isr is split into tx and rx, but
> in rx isr tx interrupt is also disabledi in cpsw_disable_irq().
> So tx interrupts are not handled during rx interrupts and rx
> napi completion and results in poor tx performance by 40Mbps.
> Fixing by disabling only rx interrupt in rx isr.
>
> Cc: Felipe Balbi <balbi@ti.com>
> Cc: <stable@vger.kernel.org> # v4.0+
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Applied, thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-07-09 21:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-08 9:05 [net PATCH v2 1/1] drivers: net: cpsw: fix disabling of tx interrupt in rx isr Mugunthan V N
2015-07-09 21:54 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).