Skip to content

Commit

Permalink
realtek: Fix Ethernet driver IRQ service routine for SMP
Browse files Browse the repository at this point in the history
Do not lock the register structure in IRQ context. It is not
necessary and leads to lockups under SMP load.

Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
  • Loading branch information
Birger Koblitz authored and dangowrt committed Feb 17, 2022
1 parent 9d84724 commit 1b1f05f
Showing 1 changed file with 0 additions and 5 deletions.
Expand Up @@ -331,7 +331,6 @@ bool rtl931x_decode_tag(struct p_hdr *h, struct dsa_tag *t)
/*
* Discard the RX ring-buffers, called as part of the net-ISR
* when the buffer runs over
* Caller needs to hold priv->lock
*/
static void rtl838x_rb_cleanup(struct rtl838x_eth_priv *priv, int status)
{
Expand Down Expand Up @@ -439,7 +438,6 @@ static irqreturn_t rtl83xx_net_irq(int irq, void *dev_id)

pr_debug("IRQ: %08x\n", status);

spin_lock(&priv->lock);
/* Ignore TX interrupt */
if ((status & 0xf0000)) {
/* Clear ISR */
Expand Down Expand Up @@ -482,7 +480,6 @@ static irqreturn_t rtl83xx_net_irq(int irq, void *dev_id)
rtl839x_l2_notification_handler(priv);
}

spin_unlock(&priv->lock);
return IRQ_HANDLED;
}

Expand All @@ -497,7 +494,6 @@ static irqreturn_t rtl93xx_net_irq(int irq, void *dev_id)

pr_debug("In %s, status_tx: %08x, status_rx: %08x, status_rx_r: %08x\n",
__func__, status_tx, status_rx, status_rx_r);
spin_lock(&priv->lock);

/* Ignore TX interrupt */
if (status_tx) {
Expand Down Expand Up @@ -528,7 +524,6 @@ static irqreturn_t rtl93xx_net_irq(int irq, void *dev_id)
rtl838x_rb_cleanup(priv, status_rx_r);
}

spin_unlock(&priv->lock);
return IRQ_HANDLED;
}

Expand Down

0 comments on commit 1b1f05f

Please sign in to comment.