aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/realtek
diff options
context:
space:
mode:
authorBirger Koblitz <git@birger-koblitz.de>2022-01-01 14:22:41 +0100
committerDaniel Golle <daniel@makrotopia.org>2022-02-17 15:21:47 +0000
commit1b1f05f6826e35eefbf74a68ee313f9f2cc29b5d (patch)
treee208bcf75469d06110f3905da8dbc2e8dc9b0713 /target/linux/realtek
parent9d847244d9fd22f2c0d44891d06edc0a0f0f3238 (diff)
downloadupstream-1b1f05f6826e35eefbf74a68ee313f9f2cc29b5d.tar.gz
upstream-1b1f05f6826e35eefbf74a68ee313f9f2cc29b5d.tar.bz2
upstream-1b1f05f6826e35eefbf74a68ee313f9f2cc29b5d.zip
realtek: Fix Ethernet driver IRQ service routine for SMP
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>
Diffstat (limited to 'target/linux/realtek')
-rw-r--r--target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c
index 9e5dfe9640..39d28ae896 100644
--- a/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c
+++ b/target/linux/realtek/files-5.10/drivers/net/ethernet/rtl838x_eth.c
@@ -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)
{
@@ -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 */
@@ -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;
}
@@ -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) {
@@ -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;
}