Skip to content

Commit 5a0266a

Browse files
mugunthanvnmdavem330
authored andcommitted
drivers: net: cpsw: fix disabling of tx interrupt in rx isr
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 <[email protected]> Cc: <[email protected]> # v4.0+ Signed-off-by: Mugunthan V N <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent adb3505 commit 5a0266a

File tree

1 file changed

+3
-16
lines changed

1 file changed

+3
-16
lines changed

drivers/net/ethernet/ti/cpsw.c

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,6 @@ do { \
138138
#define CPSW_CMINTMAX_INTVL (1000 / CPSW_CMINTMIN_CNT)
139139
#define CPSW_CMINTMIN_INTVL ((1000 / CPSW_CMINTMAX_CNT) + 1)
140140

141-
#define cpsw_enable_irq(priv) \
142-
do { \
143-
u32 i; \
144-
for (i = 0; i < priv->num_irqs; i++) \
145-
enable_irq(priv->irqs_table[i]); \
146-
} while (0)
147-
#define cpsw_disable_irq(priv) \
148-
do { \
149-
u32 i; \
150-
for (i = 0; i < priv->num_irqs; i++) \
151-
disable_irq_nosync(priv->irqs_table[i]); \
152-
} while (0)
153-
154141
#define cpsw_slave_index(priv) \
155142
((priv->data.dual_emac) ? priv->emac_port : \
156143
priv->data.active_slave)
@@ -783,7 +770,7 @@ static irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
783770

784771
cpsw_intr_disable(priv);
785772
if (priv->irq_enabled == true) {
786-
cpsw_disable_irq(priv);
773+
disable_irq_nosync(priv->irqs_table[0]);
787774
priv->irq_enabled = false;
788775
}
789776

@@ -819,7 +806,7 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
819806
prim_cpsw = cpsw_get_slave_priv(priv, 0);
820807
if (prim_cpsw->irq_enabled == false) {
821808
prim_cpsw->irq_enabled = true;
822-
cpsw_enable_irq(priv);
809+
enable_irq(priv->irqs_table[0]);
823810
}
824811
}
825812

@@ -1335,7 +1322,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
13351322
if (prim_cpsw->irq_enabled == false) {
13361323
if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) {
13371324
prim_cpsw->irq_enabled = true;
1338-
cpsw_enable_irq(prim_cpsw);
1325+
enable_irq(prim_cpsw->irqs_table[0]);
13391326
}
13401327
}
13411328

0 commit comments

Comments
 (0)